本文主要講解SpringMVC的註解方面的應用,屬於SpringMVC的入門級內容,僅供學習分享使用,如有不足之處,還請指正。 ...
概述
SpringMVC不僅提供了Xml的配置方式,還提供了註解的方式來聲明一個Controller,本文屬於SpringMVC的入門級內容,僅供學習分享使用,如有不足之處,還請指正。
SpringMVC註解方式的優點
- XML配置起來有時候冗長,此時註解可能是更好的選擇。
- 註解最大的好處就是簡化了XML配置;其實大部分註解一定確定後很少會改變,在一些中小項目中使用註解反而提供了開發效率。
- 註解相對於XML的另一個好處是類型安全的,XML只能在運行期才能發現問題。
- 採用註解的方式,一個類可以有多個Action。
SpringMVC支持註解步驟
1. 配置dispatcher-servlet.xml文件
如下所示,主要配置註解的掃描,和支持MVC註解兩項內容
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 12 <!-- 配置註解的掃描 --> 13 <context:component-scan base-package="com.hex.second"></context:component-scan> 14 <!-- 支持MVC的註解 --> 15 <mvc:annotation-driven ></mvc:annotation-driven> 16 <!-- 靜態資源的支持 --> 17 <mvc:default-servlet-handler/> 18 </beans>
2. 新建一個類增加方法,併在方法上添加註解
如下所示,通過@Controller表示一個類,通過@RequestMapping("/Hello")標識一個訪問請求處理方法
1 @Controller 2 //@RequestMapping("/HC") 3 public class HelloController { 4 5 /** 6 * 通過註解的方式聲明Controller,不帶參數 7 * @return 8 */ 9 @RequestMapping("/Hello") 10 public ModelAndView HelloMvc(){ 11 ModelAndView mav=new ModelAndView(); 12 mav.addObject("msg", "HelloWorld,HelloSpringMVC!!!"); 13 mav.setViewName("WEB-INF/jsps/HelloWorld.jsp"); 14 return mav; 15 } 16 }
3. 新增一個Jsp頁面接收並顯示內容
如下所示:通過${msg} 接收後臺傳遞過來的參數
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>第一次接觸SpringMVC</title> 8 </head> 9 <body> 10 <h1>歡迎信息</h1> 11 <h1>${msg}</h1> 12 </body> 13 </html>
4. 訪問
打開瀏覽器,輸入網址即可訪問,如下所示:
SpringMVC接收頁面傳遞數據的方式(前端-->後端)
1. 通過方法的參數的方式
如下所示:SpringMVC能夠自動將頁面傳遞的數據和函數的參數匹配起來;
如果是日期格式的數據,需要進行格式化
1 /** 2 * 以參數的方式傳遞獲取頁面傳遞過來的值 3 * @param name 4 * @param age 5 * @param date 日期格式,由客戶端傳遞參數到服務端時,需要進行日期格式化,否則會報錯 6 * 註解如下:@DateTimeFormat(pattern="yyyy-MM-dd") 7 * @return 8 */ 9 @RequestMapping("/Hello2") 10 public ModelAndView HelloMvc2(String name,int age,@DateTimeFormat(pattern="yyyy-MM-dd")Date date){ 11 System.out.println("name:"+name); 12 System.out.println("age:"+age); 13 System.out.println("date"+date); 14 ModelAndView mav=new ModelAndView(); 15 mav.addObject("name", name); 16 mav.addObject("age", age); 17 mav.addObject("date", date); 18 mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp"); 19 return mav; 20 }
2. 通過對象的方式進行數據的傳遞
如下所示,先定義一個User類,來接收頁面傳遞的數據,SpringMVC能自動進行匹配
1 /** 2 * 通過對象的方式接收參數,SpringMVC可以自動匹配參數到對象的屬性中 3 * 方便擴展 4 * @param user 5 * @return 6 */ 7 @RequestMapping("/Hello3") 8 public ModelAndView HelloMvc3(User user){ 9 System.out.println("name:"+user.getName()); 10 System.out.println("age:"+user.getAge()); 11 System.out.println("date"+user.getDate()); 12 ModelAndView mav=new ModelAndView(); 13 mav.addObject("name", user.getName()); 14 mav.addObject("age", user.getAge()); 15 mav.addObject("date", user.getDate()); 16 mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp"); 17 return mav; 18 }
Jsp頁面接收如下所示:以key.property的方式獲取內容
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Hello world</title> 8 </head> 9 <body> 10 <h1>歡迎信息</h1> 11 <h1>ID:${user.id}</h1> 12 <h1>姓名:${user.name}</h1> 13 <h1>年齡:${user.age}</h1> 14 <h1>時間:${user.date}</h1> 15 </body> 16 </html>
3. 通過內置對象的方式進行數據的傳遞
1 /** 2 * 通過內置對象HttpServletRequest來獲取參數 3 * @param req 4 * @param resp 5 * @return 6 */ 7 @RequestMapping("/Hello4") 8 public ModelAndView HelloMvc4(HttpServletRequest req,HttpServletResponse resp){ 9 System.out.println("name:"+req.getParameter("name")); 10 System.out.println("age:"+req.getParameter("age")); 11 System.out.println("date"+req.getParameter("date")); 12 //往頁面傳遞參數的一種 13 ModelAndView mav=new ModelAndView(); 14 mav.addObject("name", req.getParameter("name")); 15 mav.addObject("age", req.getParameter("age")); 16 mav.addObject("date", req.getParameter("date")); 17 mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp"); 18 return mav; 19 }
SpringMVC頁面接收參數的方式(後端-->前端)
1. 採用ModelAndView進行傳值
如下所示:可以通過鍵值對的方式增加參數
1 /** 2 * 往頁面傳遞參數 3 * @return 4 */ 5 @RequestMapping("/Hello5") 6 public ModelAndView HelloMvc5(){ 7 //往頁面傳遞參數的一種 8 ModelAndView mav=new ModelAndView(); 9 mav.addObject("name", "張三"); 10 mav.addObject("age", 20); 11 mav.addObject("date",new Date()); 12 mav.setViewName("WEB-INF/jsps/HelloWorld2.jsp"); 13 return mav; 14 }
2. 通過Model的方式傳遞參數
如下所示:Model作為一個參數,可以直接新增鍵值對,返回一個字元串,表示頁面的路徑
1 /** 2 * 從後端往前端跳轉,使用Model的方式傳參 3 * @return 4 */ 5 @RequestMapping("/Hello6") 6 public String HelloMvc6(Model model){ 7 //往頁面傳遞參數的一種 8 model.addAttribute("name", "張三"); 9 model.addAttribute("age", 16); 10 model.addAttribute("date", new Date()); 11 return "WEB-INF/jsps/HelloWorld2.jsp"; 12 }
3. 通過對象的方式傳遞參數
如下所示:將對象通過屬性的方式進行傳遞,也需要一個key值作為標識
1 /** 2 * 採用對象的方式傳參到前臺 3 * @param model 4 * @return 5 */ 6 @RequestMapping("/Hello7") 7 public String HelloMvc7(Model model){ 8 //往頁面傳遞參數的一種 9 User user=new User(1L,"李四",20,new Date()); 10 model.addAttribute("user", user); 11 //model.addAttribute(user);//不建議用這種,會有一個預設的key,是類名的首字母小寫,和對象名無關 12 return "WEB-INF/jsps/HelloWorld3.jsp"; 13 }
4. 通過內置對象傳遞參數
如下所示:內置對象HttpServletRequest傳遞參數併進行跳轉
1 /** 2 * 通過內置對象往頁面傳參並跳轉,不常用 3 * @param req 4 * @param resp 5 * @throws ServletException 6 * @throws IOException 7 */ 8 @RequestMapping("/Hello8") 9 public void HelloMvc8(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{ 10 //往頁面傳遞參數的一種 11 req.setAttribute("name", "劉玲"); 12 req.setAttribute("age", 22); 13 req.getRequestDispatcher("WEB-INF/jsps/HelloWorld2.jsp").forward(req, resp); 14 }
備註
曾以為我是那崖畔的一枝花,後來才知道,不過是人海一粒沙。