1.案例:使用@Controller和@RequestMapping()實現歡迎程序javascript
@controller :用於標記在一個類上,使用它標記 的類就是一個Spring MVC Controller對象,分發處理器將會掃描使用了該註解的類的方法,並檢測該方法是否使用了@RequestMapping 註解。@Controller 只是定義了一個控制器類,而使用@RequestMapping 註解的方法纔是真正處理請求的處理器。html
@RequesrMapping():用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。java
@Controller public class FirstController { @RequestMapping("/first") public String doFirst(){ return "/second.jsp"; }
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!--包掃描器--> <context:component-scan base-package="cn.happy.day04"/> </bean?
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>Second</h1> </body> </html>
2.一個處理類中定義N個處理器方法jquery
@Controller public class FirstController { @RequestMapping("/first") public String doFirst(){ return "/second.jsp"; } @RequestMapping("/second") public String doSecond(){ return "/index.jsp"; }
3.註解式開發-----命名空間:用來區分不一樣類中的同名方法web
@Controller @RequestMapping("/user") public class FirstController { @RequestMapping("/first") public String doFirst(){ return "/second.jsp"; }
4.註解式開發-----請求方法中的通配符用法ajax
@RequestMapping("/first*") //表明0個或多個字符,以first開頭就行 public String doFirst(){ return "/second.jsp"; } @RequestMapping("/**/second") //0級或者無限極目錄 public String doSecond(){ return "/index.jsp"; } @RequestMapping("/*/third") //有且只能有一級目錄 public String doThird(){ return "/second.jsp";
5.註解開發-----請求中方式的定義spring
對於@RequestMapping,有一個屬性method,用於對被註解方法所處理請求的提交方式進行限制,只有知足該method屬性制定的提交方式,纔會執行被註解方法。 json
method屬性的取值爲RequestMethod,是一個枚舉常量。經常使用值爲 RequestMethod.GET 與 RequestMethod.POST.瀏覽器
@RequestMapping(value = "/first",method = RequestMethod.GET) public String doFirst(){ return "/second.jsp"; }
6.處理器方法的參數spring-mvc
請求中所攜帶的請求參數
01.零散參數
<body> <form action="/second" method="post"> 登陸名:<input name="uname"/> <input type="submit"/> </form> </body> @RequestMapping("/second") public String doFirst(String uname){ System.out.println(info.getUname()+"========"); return "/first.jsp"; }
02.校訂請求參數名
//校驗參數名稱 @RequestMapping("/second") public String doSecond(@RequestParam(value = "uname") String info){ //value的值和表單元素的name屬性保持一致,便可實現自動裝配 System.out.println(info+"--------"); return "/second.jsp"; }
03.對象參數
<body> <form action="/second" method="post"> 登陸名:<input name="uname"/> <input type="submit"/> </form> </body> @RequestMapping("/second") public String doFirst(UserInfo info){ System.out.println(info.getUname()+"========"); return "/first.jsp"; }
04.域屬性對象自動裝配
<body> <form action="/second" method="post"> 登陸名:<input name="uname"/> 汽車品牌1:<input name="car.brand"/> <input type="submit"/> </form> </body> @RequestMapping("/second") public String doFirst(UserInfo info){ System.out.println(info.getUname()+"========"); System.out.println(info.getCar().getBrand()+"----------"); return "/first.jsp"; }
05.對象集合的自動綁定
<body> <form action="/second" method="post"> 登陸名:<input name="uname"/> 汽車品牌1:<input name="userCars[0].brand"/> 汽車品牌2:<input name ="userCars[1].brand"/> <input type="submit"/> </form> </body> @RequestMapping("/second") public String doFirst(UserInfo info){ System.out.println(info.getUname()+"========"); System.out.println(info.getUserCars().get(0).getBrand()); System.out.println(info.getUserCars().get(1).getBrand()); return "/first.jsp"; }
06.亂碼解決
<!--編碼過濾器--> <filter> <filter-name>CharEncoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
07.路徑變量@PathVariable
對於處理器方法中所接收的請求參數,能夠來自於請求中所攜帶的參數,也能夠來自於請求的url中所攜帶的變量,即路徑變量。不過,此時須要藉助@PathVariable註解
@PathVariable在不指定參數的狀況下,默認其參數名即路徑變量名與用於接受其信息的屬性名相同。若路徑變量與用於接受其信息的屬性名不一樣,則@PathVariable可經過參數指出路徑變量名稱。
//路徑變量 @RequestMapping(value="/{rname}/{age}/second") public String doThid(@PathVariable("rname") String name,@PathVariable int age){ System.out.println(name); System.out.println(age); return "/second.jsp"; }
08.處理器方法的返回值
001. void ajax
1》引入jar包
<!--alibaba的 fastjson--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.31</version> </dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.1</version> </dependency>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script type="text/javascript" src="/js/jquery-1.8.3.js"></script> <script type="text/javascript"> $(function(){ $.ajax({ url:"/toJson", type:"post", data:"", success:function(data){ alert(data.toString()) } }) }) </script> </head> <body> </body> </html>
@RequestMapping("/toJson") public void doFirst(HttpServletRequest request ,HttpServletResponse response) { List<User> list = new ArrayList<User>(); User u1 = new User(); u1.setAge(18); u1.setName("tom"); User u2 = new User(); u2.setName("lucy"); u2.setAge(20); list.add(u1); list.add(u2); String result = JSON.toJSONString(list); try { response.getWriter().write(result); } catch (IOException e) { e.printStackTrace(); } }
002.Object類型
因爲返回Object數據,通常都是將數據轉化爲JSON對象後傳遞給瀏覽器頁面的。而這個由Object轉換爲Json,是有Json工具完成的。因此須要導入jar包(上述三個就是),將Object數據轉化爲json數據,須要Http消息轉換器HttpMessageConverter完成,而轉換的開啓,須要由<mvc:anntation-driven/>來完成,當spring容器進行初始化過程當中,在<mvc:anntation-driven/>處建立註解驅動是,默認建立了七個HttpMessageConverter對象。也就是說,咱們註冊<mvc:anntation-driven/>,就是爲了讓容器爲咱們建立HttpMessageConverter對象。
<!--註解驅動--> <mvc:annotation-driven/>
@RequestMapping("/jsonObject") @ResponseBody public Object doSecond(){ List<User> list = new ArrayList<User>(); User u1 = new User(); u1.setAge(18); u1.setName("tom"); User u2 = new User(); u2.setName("lucy"); u2.setAge(20); list.add(u1); list.add(u2); return list; }