慕课 springmvc 起步 maven wbe
生活随笔
收集整理的這篇文章主要介紹了
慕课 springmvc 起步 maven wbe
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何從官網下載jdk1.7
http://jingyan.baidu.com/article/f7ff0bfc7f85532e27bb137c.html使用IntelliJ IDEA 14和Maven創建java web項目
http://www.cnblogs.com/jifeng/p/4658765.html
(使用IntelliJ IDEA 15和Maven創建Java Web項目
http://blog.csdn.net/myarrow/article/details/50824793
IntelliJ IDEA TOMCAT部署 ?
http://chemnk.blog.163.com/blog/static/20146312020134195048695/
)
IntelliJ IDEA 使用心得與常用快捷鍵
http://www.blogjava.net/rockblue1988/archive/2014/10/24/418994.html
1.spring mvc基本概念
DispatcherServlet 前端控制器
處理前端請求,進行分發
ModelAndView---Model的具體表現?
有人用Model,有人用Map,DispatcherServlet統統轉化成ModelAndView,因此我們認為這個是Model的具體表現
HandlerExecutionChain---handler執行鏈條
這個就是應用了java的反射機制
HandlerMapping作用?
1.告訴我們的DispatcherServlet,那個控制器獲得請求。<br>
2.HandlerMapping工作完畢之后,可以給DispatcherServlet一個HandlerAdapter,<br>
HandlerAdapter包括具體的controller實例和HandlerInterceptor外圍包裹(如圖所示),構成執行鏈條往下總
HandlerInterceptor攔截器--是一個接口
如果配置了這個類,并實現這個方法,可以做很多事情
HandlerAdapter -- controller的表現形式
適配器模式,適配DispatcherServlet可以很輕松地去調用我們的適配器
Maven?
1.pom即project object model,它主要是一個xml文件,用來包含項目中與其他jar包之間的依賴關系2.依賴關系:就是說一個項目可能會依賴于其他項目的jar包,只要使用了maven,在pom中寫出與此項目直接依賴的包,那么那些間接依賴的就會自動導入。
3.maven是通過坐標來標識依賴的jar包的,這個坐標包括groupId,artifactId,version和package,其中package是可以從缺省的
Maven的安裝
1.下載并解壓Maven:https://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/注意版本問題,3.3以上版本需要jdk7環境( Maven 3.3 requires JDK 1.7 or above, Maven 3.2 requires JDK 1.6 or above, while Maven 3.0/3.1 requires JDK 1.5 or above)
2.配置環境變量
(1)M2_HOME:解壓位置
(2)Path:%M2_HOME%\bin
測試maven安裝:mvn -version,顯示版本號,則成功。
3.配置Maven配置文件(本地倉庫路徑,鏡像)
(1)創建%M2_HOME%\.m2文件夾(該文件夾命名為.m2. )
?(2)將%M2_HOME%\conf\settings.xml放入.xml文件夾下
(3)不配置localRepository,會使用默認的即上面綠色的Default:后面的路徑,即修改本地倉庫位置。
(4)為 maven 設置 mirror,修改中央倉庫的替代倉庫地網址
? ? <mirror>
? ? ? <id>UK</id>
? ? ? <mirrorOf>central</mirrorOf>
? ? ? <name>UK Central</name>
? ? ? <url>http://uk.maven.org/maven2</url>
? ? </mirror>
(5)myeclipse配置Maven
http://my.oschina.net/u/2307376/blog/528126 (修改maven本地倉庫位置)
http://blog.sina.com.cn/s/blog_4f925fc30102epdv.html ?(MyEclipse創建Maven工程)
創建Maven項目:
(1)mvn命令,在需要創建目錄的工作區執行此命令(mvn archetype:generate -DgroupId=brandi-arthur -DartifactId=spring-mvc-demo -DarchetypeArtifactId=maven-archetype-webapp)(2)mvn eclipse:myeclipse -Dwtpversion=2.0 :maven工程轉化為mycelipse工程
(3)File----> Import --->Exsiting Projects into Workspace--->Browse選擇剛剛建立的maven項目
SpringMvc的小例子的實現過程:?
1:導入maven自動構建的目錄結構?2:添加缺失的java目錄?
3:觀察和配置pom.xml文件,這個文件非常的重要,是maven管理各種依賴關系的地方
Spring的版本管理
依賴關系的管理
依賴管理——我們的項目需要什么軟件包,有Maven來查找和管理
加入一些插件比如:jetty
4:配置web.xml文件
配置servlet
這相當重要,最好反復的看看和理解
5:配置Spring的配置文件
注解的配置
配置注解驅動器
配置組件掃描器
配置試圖解析器
5:創建對應的資源文件夾,比如:jsp/js/css/img等
6:創建對應的Controller
7:創建對應的試圖
8:啟動應用的容器或者服務器 ——這里是 mvn jetty:run 需要在項目的目錄下運行才可以的
9:打開瀏覽器,輸入訪問應用的URL測試是否訪問到我們的項目
配置文件的編寫是非常重要的,也是比較難懂的地方,難懂在于有許多的東西都是隱含不見的,當然也是搭建一個項目的關鍵和基礎。
項目實現:
1)pom.xml
2)applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
? ? ? ? http://www.springframework.org/schema/beans
? ? ? ? http://www.springframework.org/schema/beans/spring-beans.xsd
? ? ? ? http://www.springframework.org/schema/context?
? ? ? ? http://www.springframework.org/schema/context/spring-context.xsd
? ? ? ? http://www.springframework.org/schema/mvc
? ? ? ? http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:annotation-config />
<context:component-scan base-package="com.imooc.mvcdemo">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
</beans>
3)web.xml?
<web-app
? ? ? ? xmlns="http://java.sun.com/xml/ns/javaee"
? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ? xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
? ? ? ? version="3.0">
? <display-name>Archetype Created Web Application</display-name>
? <!-- Spring應用上下文, 理解層次化的ApplicationContext -->
? <context-param>
? ? <param-name>contextConfigLocation</param-name>
? ? <param-value>/WEB-INF/configs/spring/applicationContext*.xml</param-value>
? </context-param>
? <!-- DispatcherServlet上下文, 只管理@Controller類型的bean, 忽略其他型的bean, 如@Service -->
? <context:component-scan base-package="com.imooc.mvcdemo">
? <context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
? </context:component-scan>
? <!-- DispatcherServlet, Spring MVC的核心 -->
? <servlet>
? ? <servlet-name>mvc-dispatcher</servlet-name>
? ? <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
? ? <!-- DispatcherServlet對應的上下文配置, 默認為/WEB-INF/$servlet-name$-servlet.xml
? ? ?-->
? ? <init-param>
? ? ? <param-name>contextConfigLocation</param-name>
? ? ? <param-value>/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml</param-value>
? ? </init-param>
? ? <load-on-startup>1</load-on-startup>
? </servlet>
? <servlet-mapping>
? ? <servlet-name>mvc-dispatcher</servlet-name>
? ? <!-- mvc-dispatcher攔截所有的請求-->
? ? <url-pattern>/</url-pattern>
? </servlet-mapping>
</web-app>
4)mvc-dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
? ? ? ? http://www.springframework.org/schema/beans
? ? ? ? http://www.springframework.org/schema/beans/spring-beans.xsd
? ? ? ? http://www.springframework.org/schema/context?
? ? ? ? http://www.springframework.org/schema/context/spring-context.xsd
? ? ? ? http://www.springframework.org/schema/mvc
? ? ? ? http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 本配置文件是工名為mvc-dispatcher的DispatcherServlet使用, 提供其相關的Spring MVC配置 -->
<!-- 啟用Spring基于annotation的DI, 使用戶可以在Spring MVC中使用Spring的強大功能。 激活 @Required?
@Autowired,JSR 250's @PostConstruct, @PreDestroy and @Resource 等標注 -->
<context:annotation-config />
<!-- DispatcherServlet上下文, 只管理@Controller類型的bean, 忽略其他型的bean, 如@Service -->
<context:component-scan base-package="com.imooc.mvcdemo">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- HandlerMapping, 無需配置, Spring MVC可以默認啟動。 DefaultAnnotationHandlerMapping?
annotation-driven HandlerMapping -->
<!-- 擴充了注解驅動,可以將請求參數綁定到控制器參數 -->
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsps/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
5)HelloMvcController.java
package com.imooc.mvcdemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//告訴DispatcherServlet相關的容器, 這是一個Controller, 管理好這個bean哦
@Controller
//類級別的RequestMapping,告訴DispatcherServlet由這個類負責處理以跟URL。
//HandlerMapping依靠這個標簽來工作
@RequestMapping("/hello")
public class HelloMvcController {
? ? //方法級別的RequestMapping, 限制并縮小了URL路徑匹配,同類級別的標簽協同工作,最終確定攔截到的URL由那個方法處理
? ? @RequestMapping("/mvc")
? ? public String helloMvc() {
? ? ? ? //視圖渲染,/WEB-INF/jsps/home.jsp
? ? ? ? return "home";
? ? }
}
6)/WEB-INF/jsps/home.jsp
7)http://localhost:8080/hello/mvc ?轉到home.jsp
項目2:
Json是一種輕量級的數據書寫格式.
json的優點也使得Restful的webservice使用越來越廣泛,逐漸由取代soap的趨勢。
JSON是一種數據交換格式,Javascript語言處理這種數據格式比較容易,Javascript語言是現在Web開發中不可缺少的一種語言,所以,現在JSON這種數據交換格式被使用的越來越多了。
數據的本質沒變,為了更好的處理,呈現的格式變換了,這個符合人類的利益。
ResponseEntity用來包裝需要返回給頁面的json數據格式
@ResponseBody @RequestBody是客戶端與服務器通過交換數據,修改數據成為可能。還可以通過json推動數據到服務器。
1)mvc-dispatcher-servlet.xml
<!-- 配置ViewResolver。 可以用多個ViewResolver。 使用order屬性排序。 InternalResourceViewResolver放在最后。 -->
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
<entry key="htm" value="text/html" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- JSON View -->
<bean
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
</bean>
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
</bean>
8)CourseController.java
package com.imooc.mvcdemo.controller;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.imooc.mvcdemo.model.Course;
import com.imooc.mvcdemo.service.CourseService;
@Controller
@RequestMapping("/courses")
// /courses/**
public class CourseController {
private static Logger log = LoggerFactory.getLogger(CourseController.class);
private CourseService courseService;
@Autowired
public void setCourseService(CourseService courseService) {
this.courseService = courseService;
}
//本方法將處理 /courses/view?courseId=123 形式的URL
@RequestMapping(value="/view", method=RequestMethod.GET)
public String viewCourse(@RequestParam("courseId") Integer courseId,
Model model) {
log.debug("In viewCourse, courseId = {}", courseId);
Course course = courseService.getCoursebyId(courseId);
model.addAttribute(course);
return "course_overview";
}
//本方法將處理 /courses/view2/123 形式的URL
@RequestMapping("/view2/{courseId}")
public String viewCourse2(@PathVariable("courseId") Integer courseId,
Map<String, Object> model) {
log.debug("In viewCourse2, courseId = {}", courseId);
Course course = courseService.getCoursebyId(courseId);
model.put("course",course);
return "course_overview";
}
//本方法將處理 /courses/view3?courseId=123 形式的URL
@RequestMapping("/view3")
public String viewCourse3(HttpServletRequest request) {
Integer courseId = Integer.valueOf(request.getParameter("courseId"));
Course course = courseService.getCoursebyId(courseId);
request.setAttribute("course",course);
return "course_overview";
}
@RequestMapping(value="/admin", method = RequestMethod.GET, params = "add")
public String createCourse(){
return "course_admin/edit";
}
@RequestMapping(value="/save", method = RequestMethod.POST)
public String ?doSave(@ModelAttribute Course course){
log.debug("Info of Course:");
log.debug(ReflectionToStringBuilder.toString(course));
//在此進行業務操作,比如數據庫持久化
course.setCourseId(123);
return "redirect:view2/"+course.getCourseId();
}
@RequestMapping(value="/upload", method=RequestMethod.GET)
public String showUploadPage(@RequestParam(value= "multi", required = false) Boolean multi){
if(multi != null && multi){
return "course_admin/multifile";
}
return "course_admin/file";
}
@RequestMapping(value="/doUpload", method=RequestMethod.POST)
public String doUploadFile(@RequestParam("file") MultipartFile file) throws IOException{
if(!file.isEmpty()){
log.debug("Process file: {}", file.getOriginalFilename());
FileUtils.copyInputStreamToFile(file.getInputStream(), new File("c:\\temp\\imooc\\", System.currentTimeMillis()+ file.getOriginalFilename()));
}
return "success";
}
@RequestMapping(value="/doUpload2", method=RequestMethod.POST)
public String doUploadFile2(MultipartHttpServletRequest multiRequest) throws IOException{
Iterator<String> filesNames = multiRequest.getFileNames();
while(filesNames.hasNext()){
String fileName =filesNames.next();
MultipartFile file = ?multiRequest.getFile(fileName);
if(!file.isEmpty()){
log.debug("Process file: {}", file.getOriginalFilename());
FileUtils.copyInputStreamToFile(file.getInputStream(), new File("c:\\temp\\imooc\\", System.currentTimeMillis()+ file.getOriginalFilename()));
}
}
return "success";
}
@RequestMapping(value="/{courseId}",method=RequestMethod.GET)
public @ResponseBody Course getCourseInJson(@PathVariable Integer courseId){
return ?courseService.getCoursebyId(courseId);
}
@RequestMapping(value="/jsontype/{courseId}",method=RequestMethod.GET)
public ?ResponseEntity<Course> getCourseInJson2(@PathVariable Integer courseId){
Course course = ? courseService.getCoursebyId(courseId);
return new ResponseEntity<Course>(course, HttpStatus.OK);
}
}
總結
以上是生活随笔為你收集整理的慕课 springmvc 起步 maven wbe的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库笔试题(一)
- 下一篇: C语言无符号数运算问题