javascript
SpringMVC框架的详细操作步骤和注解的用法
springMVC操作步驟:
第一步:導入jar(spring4個核心+日志+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>如果不手動添加資源文件的話,springmvc默認的資源文件位置在WEB-INF下,默認文件名為:servlet名-servlet.xml.
第三步:建立springmvc.xml的資源文件,并進行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注解,代表這是一個處理請求的類
第五步:在方法上添加@RequestMapping注解,其中value屬性的值為用戶請求的地址.
@RequestMapping注解詳解:
@RequestMapping屬性包含以下幾個:
- ①value:請求路徑和value屬性值一致時,該注解標注的方法即為處理請求的方法
- ②method:用來設置處理請求的方式,客戶請求的方式和method屬性的值一致時才可以處理請求.
- ③parmas:用來設置客戶端傳到服務器端的數據必須符合某些規則.要求請求路徑必須帶有parmas屬性的值才能處理該請求.
@RequestMapping作用的位置:
-
①放在方法上:
只對該方法有效 -
②放在類上:
對當前類的所有方法有效
放在類上時一般只使用value屬性.加上value屬性后訪問路徑變成:項目名/類上的value值/方法上的value值
@RequestMapping支持Ant方式的訪問路徑:
- *:表示任意一層目錄
- ?:表示任意一個字符
- **:表示任意多層目錄
REST風格:使用@PathVariable獲得占位符的數據,并賦值給形參
@PathVariable注解的使用:
在Spring3.0之后可以支持URL 傳參,帶占位符的 URL 是 Spring3.0 新增的功能,該功能在SpringMVC 向REST 目標挺進發展過程中具有里程碑的意義。
通過 @PathVariable 可以將 URL 中占位符參數綁定到控制器處理方法的入參中.
如URL 中的 /student/{name} 占位符可以通過@PathVariable(“name”) 綁定到操作方法的入參中。
@RequestMapping(" /student/{name}")public User testPathVaeiable(@PathVariable("name") String name){return userService.selectUser(name);}@RequestParam的作用:
當前端向后端傳值時,若請求的參數和controller方法的形參一致就可以自動賦值.若不一致使用@RequestParam進行指定
@RequestParam的value屬性:
通過value指定映射關系
如:@RequestParam(value=“name”)String username,可以指定前端傳過來的name輸入框的值賦值給username這個形參.
@RequestParam的required屬性:
取消自動裝配的必須性
如:@RequestParam(value=“name”,required=false),若前端沒有名為name這個輸入框,服務器也不會報錯,有則獲取,沒有則為空值.
@RequestParam的defaultValue:設置默認值,沒有傳參時使用該值
SpringMVC獲取客戶端傳來的參數的方式:
①在處理器的方法中加入對應的形參,保證該形參和請求的參數name一致
②使用pojo對象接收數據:當pojo對象的屬性和客戶端表單name 的值一致時可以接收數據,且支持級聯關系
③使用servlet原生API獲取參數如:HTTPServletRequest,HttpServletRespnse,HttpSession(不推薦)
SpringMVC中controller方法的返回值的幾種類型解說:
①使用ModelAndView存值并進行跳轉,方法的返回值為ModelAndView類型**
②返回void,使用servlet原生APIrequest和response實現存值和跳轉(不推薦).**
③返回String,直接return " 資源路徑"實現轉發操作,
return "redirect: 資源路徑"實現重定向操作,形參中傳入Model對象,使用model對象進行存值,存在request域中**
設置視圖的方式不一樣后臺所創建的視圖類型也不一樣.
①使用轉發的方式:return “資源路徑”;后臺會創建一個InternalResourceView對象,對該資源路徑進行解析,解析后執行getRequestDispatcher().forward(request,response)命令
②使用重定向的方式:return “redirect:資源路徑"的方式,后臺會創建一個RedirectView對象,對該資源進行解析,解析后執行sendRedirect(”")命令.
< mvc:default-Servlet-handler/>標簽的作用:
配合< mvc:annotation-driven/>標簽,把項目中的靜態資源文件(如js文件,css文件)交給tomcat中默認的servlet去處理,不經過前端控制器的處理.
@ResponseBody的作用:
一個處理器若加上了@ResponseBody這個注解,那么該處理器里面就不能在實現頁面的跳轉。就算返回一個字符串,也會將該字符串作為一個數據響應到客戶端。返回的任何類型都會轉化為json對象。但需要jackson的jar包的支持.因為springMVC底層使用jackson技術進行數據格式的轉換.
Json有兩種形式:①Json對象:{key:value,key:value,…};②Json數組:[{key:value,key:value…},{key:value,key:value…},…]
步驟一:加入jackson的jar包(三個).
步驟二:在springMVC.xml中開啟mvc注解驅動.
步驟三:在需要轉化為json數據的處理器上面加上@ResponseBody注解.
步驟四:在需要轉換為json數據的對象直接作為返回值返回.
示例:
①控制器向客戶端響應一個json數據類型的list集合:
②客戶端執行ajax請求,希望響應回一個json的數組:
<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">//文檔加載函數$(function(){$("#btn").click(function(){//執行ajax請求,請求路徑為controller中的testJson這個控制器$.post("testJson",function(data){//data裝載返回的list集合//循環遍歷出data里面的json數組$(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><!-- 點擊按鈕觸發ajax請求 --><input id="btn" type="button" value="測試json"/> </body> </html>springMVC實現上傳的功能:
在沒有使用springMVC的時候,實現上傳功能,我們需要用一個File類型來接收,但使用了springMVC后,我們可以使用MultipartFile類型來接收,因此,需要在springMVC中配置一個解析器來將File類型轉化為MultipartFile類型
步驟一:導入commons-io和commons-fileload的jar包;
上傳功能需要這兩個jar包才能被支持
步驟二:在springmvc.xml中配置解析器MultipartResolver,其中id必須為multipartResolver,因為要和DispatcherServlet類中的屬性保持一致;
該解析器可以將客戶端傳來的File類型的對象轉化為MultipartFile類型,該類型被springMVC封裝,包含了許多關于上傳的強大的功能.
配置如下:
步驟三:在客戶端編寫上傳文件的代碼,指定文件域中的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();//解決圖片重名問題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:
需要實現HandlerInterceptor接口或者繼承HandlerInterceptorAdapter這個類.
第一步:創建一個類實現HandlerInterceptor接口或者繼承HandlerInterceptorAdapter這個類
第二步:將該類作為攔截器配置在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:在請求之前進行攔截,有boolean類型的返回值,返回true則放行
postHandle:在controller處理器處理完數據后,返回modelAndView之前執行
afterCompletion:頁面渲染后執行,可以對異常進行處理
多個攔截器執行順序:
如有兩個攔截器(1)方法執行前返回值都為true,則順序如下方法執行前1 方法執行前2方法執行后2方法執行后1頁面渲染后2頁面渲染后1springMVC和Spring 的整合:
問題一:springMVC.xml可以被web.xml以servlet 的形式加載.那么spring的配置文件applicationContext.xml被誰加載?什么時候加載?
spring的配置文件需要被配置在web.xml 的context上下文中,以< context-param> 的形式去加載spring的配置文件,如若不以這樣的形式,那么web.xml會默認加載WEB-INF下的applicationContext.xml.
配置spring后,需要在服務器開啟時創建一個spring 的容器,因此需要配置一個loaderContextListener創建spring的容器.
總結
以上是生活随笔為你收集整理的SpringMVC框架的详细操作步骤和注解的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跳转路径时资源路径加/和不加/的区别
- 下一篇: 打开Mybatis核心配置文件SqlMa