javascript
SpringMVC框架的详细操作步骤和注解的用法
springMVC操作步驟:
第一步:導(dǎo)入jar(spring4個(gè)核心+日志+spring-web+spring-webmvc+spring-aop)
第二步:在web.xml中配置前端控制器(servlet),并讀取springmvc的資源文件springmvc.xml
<servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><!-- 加載資源文件 --><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>如果不手動(dòng)添加資源文件的話,springmvc默認(rèn)的資源文件位置在WEB-INF下,默認(rèn)文件名為:servlet名-servlet.xml.
第三步:建立springmvc.xml的資源文件,并進(jìn)行controller包掃描和配置視圖解析器
<?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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><context:component-scan base-package="com.sms.springmvc.controller"></context:component-scan></beans>第四步:在類上加@Controller注解,代表這是一個(gè)處理請(qǐng)求的類
第五步:在方法上添加@RequestMapping注解,其中value屬性的值為用戶請(qǐng)求的地址.
@RequestMapping注解詳解:
@RequestMapping屬性包含以下幾個(gè):
- ①value:請(qǐng)求路徑和value屬性值一致時(shí),該注解標(biāo)注的方法即為處理請(qǐng)求的方法
- ②method:用來(lái)設(shè)置處理請(qǐng)求的方式,客戶請(qǐng)求的方式和method屬性的值一致時(shí)才可以處理請(qǐng)求.
- ③parmas:用來(lái)設(shè)置客戶端傳到服務(wù)器端的數(shù)據(jù)必須符合某些規(guī)則.要求請(qǐng)求路徑必須帶有parmas屬性的值才能處理該請(qǐng)求.
@RequestMapping作用的位置:
-
①放在方法上:
只對(duì)該方法有效 -
②放在類上:
對(duì)當(dāng)前類的所有方法有效
放在類上時(shí)一般只使用value屬性.加上value屬性后訪問(wèn)路徑變成:項(xiàng)目名/類上的value值/方法上的value值
@RequestMapping支持Ant方式的訪問(wèn)路徑:
- *:表示任意一層目錄
- ?:表示任意一個(gè)字符
- **:表示任意多層目錄
REST風(fēng)格:使用@PathVariable獲得占位符的數(shù)據(jù),并賦值給形參
@PathVariable注解的使用:
在Spring3.0之后可以支持URL 傳參,帶占位符的 URL 是 Spring3.0 新增的功能,該功能在SpringMVC 向REST 目標(biāo)挺進(jìn)發(fā)展過(guò)程中具有里程碑的意義。
通過(guò) @PathVariable 可以將 URL 中占位符參數(shù)綁定到控制器處理方法的入?yún)⒅?
如URL 中的 /student/{name} 占位符可以通過(guò)@PathVariable(“name”) 綁定到操作方法的入?yún)⒅小?/p> @RequestMapping(" /student/{name}")public User testPathVaeiable(@PathVariable("name") String name){return userService.selectUser(name);}
@RequestParam的作用:
當(dāng)前端向后端傳值時(shí),若請(qǐng)求的參數(shù)和controller方法的形參一致就可以自動(dòng)賦值.若不一致使用@RequestParam進(jìn)行指定
@RequestParam的value屬性:
通過(guò)value指定映射關(guān)系
如:@RequestParam(value=“name”)String username,可以指定前端傳過(guò)來(lái)的name輸入框的值賦值給username這個(gè)形參.
@RequestParam的required屬性:
取消自動(dòng)裝配的必須性
如:@RequestParam(value=“name”,required=false),若前端沒(méi)有名為name這個(gè)輸入框,服務(wù)器也不會(huì)報(bào)錯(cuò),有則獲取,沒(méi)有則為空值.
@RequestParam的defaultValue:設(shè)置默認(rèn)值,沒(méi)有傳參時(shí)使用該值
SpringMVC獲取客戶端傳來(lái)的參數(shù)的方式:
①在處理器的方法中加入對(duì)應(yīng)的形參,保證該形參和請(qǐng)求的參數(shù)name一致
②使用pojo對(duì)象接收數(shù)據(jù):當(dāng)pojo對(duì)象的屬性和客戶端表單name 的值一致時(shí)可以接收數(shù)據(jù),且支持級(jí)聯(lián)關(guān)系
③使用servlet原生API獲取參數(shù)如:HTTPServletRequest,HttpServletRespnse,HttpSession(不推薦)
SpringMVC中controller方法的返回值的幾種類型解說(shuō):
①使用ModelAndView存值并進(jìn)行跳轉(zhuǎn),方法的返回值為ModelAndView類型**
②返回void,使用servlet原生APIrequest和response實(shí)現(xiàn)存值和跳轉(zhuǎn)(不推薦).**
③返回String,直接return " 資源路徑"實(shí)現(xiàn)轉(zhuǎn)發(fā)操作,
return "redirect: 資源路徑"實(shí)現(xiàn)重定向操作,形參中傳入Model對(duì)象,使用model對(duì)象進(jìn)行存值,存在request域中**
設(shè)置視圖的方式不一樣后臺(tái)所創(chuàng)建的視圖類型也不一樣.
①使用轉(zhuǎn)發(fā)的方式:return “資源路徑”;后臺(tái)會(huì)創(chuàng)建一個(gè)InternalResourceView對(duì)象,對(duì)該資源路徑進(jìn)行解析,解析后執(zhí)行g(shù)etRequestDispatcher().forward(request,response)命令
②使用重定向的方式:return “redirect:資源路徑"的方式,后臺(tái)會(huì)創(chuàng)建一個(gè)RedirectView對(duì)象,對(duì)該資源進(jìn)行解析,解析后執(zhí)行sendRedirect(”")命令.
< mvc:default-Servlet-handler/>標(biāo)簽的作用:
配合< mvc:annotation-driven/>標(biāo)簽,把項(xiàng)目中的靜態(tài)資源文件(如js文件,css文件)交給tomcat中默認(rèn)的servlet去處理,不經(jīng)過(guò)前端控制器的處理.
@ResponseBody的作用:
一個(gè)處理器若加上了@ResponseBody這個(gè)注解,那么該處理器里面就不能在實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。就算返回一個(gè)字符串,也會(huì)將該字符串作為一個(gè)數(shù)據(jù)響應(yīng)到客戶端。返回的任何類型都會(huì)轉(zhuǎn)化為json對(duì)象。但需要jackson的jar包的支持.因?yàn)閟pringMVC底層使用jackson技術(shù)進(jìn)行數(shù)據(jù)格式的轉(zhuǎn)換.
Json有兩種形式:①Json對(duì)象:{key:value,key:value,…};②Json數(shù)組:[{key:value,key:value…},{key:value,key:value…},…]
步驟一:加入jackson的jar包(三個(gè)).
步驟二:在springMVC.xml中開(kāi)啟mvc注解驅(qū)動(dòng).
步驟三:在需要轉(zhuǎn)化為json數(shù)據(jù)的處理器上面加上@ResponseBody注解.
步驟四:在需要轉(zhuǎn)換為json數(shù)據(jù)的對(duì)象直接作為返回值返回.
示例:
①控制器向客戶端響應(yīng)一個(gè)json數(shù)據(jù)類型的list集合:
②客戶端執(zhí)行ajax請(qǐng)求,希望響應(yīng)回一個(gè)json的數(shù)組:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.11.3.min.js"></script><script type="text/javascript">//文檔加載函數(shù)$(function(){$("#btn").click(function(){//執(zhí)行ajax請(qǐng)求,請(qǐng)求路徑為controller中的testJson這個(gè)控制器$.post("testJson",function(data){//data裝載返回的list集合//循環(huán)遍歷出data里面的json數(shù)組$(data).each(function(i,u){$("body").append("<p>id="+u.id+",username="+u.username+",gender="+u.gender+",age="+u.age +"</p>")})},"json")})})</script> </head> <body><!-- 點(diǎn)擊按鈕觸發(fā)ajax請(qǐng)求 --><input id="btn" type="button" value="測(cè)試json"/> </body> </html>springMVC實(shí)現(xiàn)上傳的功能:
在沒(méi)有使用springMVC的時(shí)候,實(shí)現(xiàn)上傳功能,我們需要用一個(gè)File類型來(lái)接收,但使用了springMVC后,我們可以使用MultipartFile類型來(lái)接收,因此,需要在springMVC中配置一個(gè)解析器來(lái)將File類型轉(zhuǎn)化為MultipartFile類型
步驟一:導(dǎo)入commons-io和commons-fileload的jar包;
上傳功能需要這兩個(gè)jar包才能被支持
步驟二:在springmvc.xml中配置解析器MultipartResolver,其中id必須為multipartResolver,因?yàn)橐虳ispatcherServlet類中的屬性保持一致;
該解析器可以將客戶端傳來(lái)的File類型的對(duì)象轉(zhuǎn)化為MultipartFile類型,該類型被springMVC封裝,包含了許多關(guān)于上傳的強(qiáng)大的功能.
配置如下:
步驟三:在客戶端編寫上傳文件的代碼,指定文件域中的name 值和控制器形參中Multipart的名一致.:
<form action="up" method="post" enctype="multipart/form-data">頭像:<input type="file" name="uploadFile"/>描述:<input type="text" name="desc"/><input type="submit" value="上傳"/> </form> @RequestMapping(value="up",method=RequestMethod.POST)public String up(String desc,MultipartFile uploadFile) throws IOException{//獲取文件要寫出的路徑String originalFilename = uploadFile.getOriginalFilename();//解決圖片重名問(wèn)題String finalFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));String path = session.getServletContext().getRealPath("photo") + File.separator + finalFileName;//將上傳的圖片寫到path下uploadFile.transferTo(new File(path));return "success";}配置攔截器interceptor:
需要實(shí)現(xiàn)HandlerInterceptor接口或者繼承HandlerInterceptorAdapter這個(gè)類.
第一步:創(chuàng)建一個(gè)類實(shí)現(xiàn)HandlerInterceptor接口或者繼承HandlerInterceptorAdapter這個(gè)類
第二步:將該類作為攔截器配置在springMVC中
<mvc:interceptors><mvc:mapping path="/**"/><mvc:exclude-mapping path="/login"/> <mvc:exclude-mapping path="/index"/><bean id="myInterceptor" class="com.sms.mvc.interceptor"></bean></mvc:interceptors>HandlerInterceptor中重寫的方法的作用:
preHandle:在請(qǐng)求之前進(jìn)行攔截,有boolean類型的返回值,返回true則放行
postHandle:在controller處理器處理完數(shù)據(jù)后,返回modelAndView之前執(zhí)行
afterCompletion:頁(yè)面渲染后執(zhí)行,可以對(duì)異常進(jìn)行處理
多個(gè)攔截器執(zhí)行順序:
如有兩個(gè)攔截器(1)方法執(zhí)行前返回值都為true,則順序如下方法執(zhí)行前1 方法執(zhí)行前2方法執(zhí)行后2方法執(zhí)行后1頁(yè)面渲染后2頁(yè)面渲染后1springMVC和Spring 的整合:
問(wèn)題一:springMVC.xml可以被web.xml以servlet 的形式加載.那么spring的配置文件applicationContext.xml被誰(shuí)加載?什么時(shí)候加載?
spring的配置文件需要被配置在web.xml 的context上下文中,以< context-param> 的形式去加載spring的配置文件,如若不以這樣的形式,那么web.xml會(huì)默認(rèn)加載WEB-INF下的applicationContext.xml.
配置spring后,需要在服務(wù)器開(kāi)啟時(shí)創(chuàng)建一個(gè)spring 的容器,因此需要配置一個(gè)loaderContextListener創(chuàng)建spring的容器.
總結(jié)
以上是生活随笔為你收集整理的SpringMVC框架的详细操作步骤和注解的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 跳转路径时资源路径加/和不加/的区别
- 下一篇: 打开Mybatis核心配置文件SqlMa