日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringMVC框架的详细操作步骤和注解的用法

發(fā)布時(shí)間:2025/3/21 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC框架的详细操作步骤和注解的用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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集合:

@Controller public class TestController {@RequestMapping("testJson")@ResponseBodypublic List<User> testJson(){ArrayList<User> list = new ArrayList<>();User user1 = new User(1001, "張三", "男", 12);User user2 = new User(1002, "李四", "男", 22);User user3 = new User(1003, "王五", "男", 32);User user4 = new User(1004, "趙六", "男", 42);list.add(user1);list.add(user2);list.add(user3);list.add(user4);//返回的list集合到客戶端后就回轉(zhuǎn)化成json格式return 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)大的功能.
配置如下:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

步驟三:在客戶端編寫(xiě)上傳文件的代碼,指定文件域中的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{//獲取文件要寫(xiě)出的路徑String originalFilename = uploadFile.getOriginalFilename();//解決圖片重名問(wèn)題String finalFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));String path = session.getServletContext().getRealPath("photo") + File.separator + finalFileName;//將上傳的圖片寫(xiě)到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中重寫(xiě)的方法的作用:
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è)面渲染后1

springMVC和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的容器.

<!-- 加載spring的配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/applicationContext-*.xml</param-value></context-param> <!-- 配置監(jiān)聽(tīng)器加載spring容器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

總結(jié)

以上是生活随笔為你收集整理的SpringMVC框架的详细操作步骤和注解的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。