(1)SpringMVC爲表現層提供基礎的基於MVC設計理念的優秀Web框架,java
(2)SpringMVC經過一套mvc的註解,讓POJO成爲處理請求的控制器,而無需任何接口web
(3)採用了鬆散耦合可插拔組件結構,比其餘框架更具擴展性和靈活性spring
(4)Spring MVC 是一個web框架是mvc中的c,springmvc 處理請求的是控制器。瀏覽器
(1)搭建springmvc框架,配置基本夾包31個jar包,複製springmvc的入口,spring-mvc
(2) spring的入口是一個servlet,這個servlet被稱爲分發器。在web.xml寫入cookie
配置入口session
<servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
配置成只處理.do的文件mvc
<servlet-mapping> <servlet-name>SpringMVC</servlet-name> <!-- 此處能夠能夠配置成*.do,對應struts的後綴習慣 --> <url-pattern>*.do</url-pattern> </servlet-mapping>
(3)建立SpringMVC配置文件,spring-servlet.xmlapp
配置代碼框架
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> </beans>
處理器所在包
<context:component-scan base-package="com.haina"/>
視圖解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" ></property>
<property name="suffix" value=".jsp" ></property>
</bean>
配置攔截器
<mvc:interceptors> <!-- 這個攔截器會攔截全部請求 --> <bean id="id" class="com.haina.mvc2.controller.FirstIntercepter"></bean> <!-- 攔截包含ma的全部 --> <mvc:interceptor> <mvc:mapping path="/ma/*"/> <bean id="second" class="com.haina.mvc2.controller.SecondIntercepter"></bean> </mvc:interceptor> <mvc:interceptor> <!-- 包括全部 --> <mvc:mapping path="/*/*"/> <!-- 不包括mv下的全部 --> <mvc:exclude-mapping path="/mv/*"/> <bean id="third" class="com.haina.mvc2.controller.ThirdIntercepter"></bean> </mvc:interceptor> </mvc:interceptors>
(4)建立控制器
建立一個com.haina.controller包
新建一個Controller類
添加@Controller註解。這個類就變成了一個處理器
package com.haina.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/user") //至關於struts2中的namespace public class UserController { @RequestMapping("/helloword") //至關於action的name屬性值 //此時的這個helloword這個方法處理的請求是 //http://localhost:8080/項目名/user/helloword.do public String helloword(){ //spring開發須要寫的代碼和jsp,不用配相似於struts.xml的配置文件 //返回webContent 下面的hello.jsp給用戶,其中的/表示webConen //jsp須要保存的web-INF下,經過代碼訪問,這樣瀏覽器就沒有辦法直接訪問 System.out.println("123"); return "hello"; } }
在web-INF下新建一個hello.jsp文件便可顯示登錄成功
(1)@PathVariable:經過@PathVariable能夠將URL中的佔位符參數綁定到控制器處理方法的入參中:
URL中的{XXX}佔位符能夠經過@PathVariable("xxx")綁定到操做方法中
//http://localhost:8080/mvc2/mvc2/pathTest/1/19/ruanjian @RequestMapping("/pathTest/{id}/{age}/{classes}") public String pathTest(@PathVariable(value="id")int id, @PathVariable(value="age")int age,@PathVariable(value="classes") String classes1) { System.out.println(classes1); System.out.println(id); System.out.println(age); return "success"; }
(2)但願在多個請求之間共用某個模型屬性數據用@SessionAttributes,
//把模型中的user1,user2和全部Users對象session中 @SessionAttributes(types={User.class},value={"user1","user2"}) public class SessionTestController { @RequestMapping("/s1") public ModelAndView test(HttpSession session)//這個session對象直接用 { //ModelAndView模型和視圖,能夠new,「success」只是視圖的名字 //視圖就是jsp的名字 ModelAndView mv=new ModelAndView("success"); Object o=session.getAttribute("user1"); System.out.println(o); o=session.getAttribute("user2"); System.out.println(o); o = session.getAttribute("s"); System.out.println(o); o = session.getAttribute("s1"); System.out.println(o); if(o==null){ //同包下不須要導包,java.long下不須要導報。 System.out.println("第一次請求s1此時沒有session值,爲null"); Users user =new Users(1,"gll","123"); mv.addObject("user1",user);//自動綁定到session中,key爲user mv.addObject("user2",user); mv.addObject("s",user); mv.addObject("s1",user);//把對象加入模型,模型中的數據都是key = value形式 }else{ System.out.println("第二次請求s1,此時session中有值"+session.getAttribute("s")); System.out.println("用戶信息"+session.getAttribute("user")); } return mv; }
(3)@CookieValue:從客戶端獲取值,只能用在方法上
@RequestMapping("/c1") public String testCookie(@CookieValue(value="username",required=false)String name,HttpServletResponse reponse) { if(name==null){ System.out.println("cookie爲空"); Cookie cookie=new Cookie("username","gll"); cookie.setMaxAge(14*24*60*60); reponse.addCookie(cookie); }else{ System.out.println("從客戶端獲取cookie值"+name); } return "hello"; }
(1)ModelAndView:處理方法返回值類型爲ModelAndView時方法體便可經過該對象添加數據。
@RequestMapping("/mv1") public ModelAndView test1(){ ModelAndView mv=new ModelAndView("testview");//指定視圖名字 mv.addObject("mvname","mvvale"); mv.setViewName("testview"); return mv; }
(2)Map及Model:處理方法返回時,Map中的數據會自動添加到模型中
//若是返回值是String,就必須入參是ModelMap,不能new ModelMap @RequestMapping("/mv2") public String test2(ModelMap mm){ mm.addAttribute("mmname","mmvalue"); return "testview"; }
(3)@SessionAttribute:將模型中的某個屬性暫存到HttpSession中,以便多個請求能夠共享這個屬性
@SessionAttributes(types={User.class},value={"user1","user2"}) public class SessionTestController { @RequestMapping("/s1") public ModelAndView test(HttpSession session)//這個session對象直接用 { //ModelAndView模型和視圖,能夠new,「success」只是視圖的名字 //視圖就是jsp的名字 ModelAndView mv=new ModelAndView("success"); Object o=session.getAttribute("user1"); System.out.println(o); o=session.getAttribute("user2"); System.out.println(o); o = session.getAttribute("s"); System.out.println(o); o = session.getAttribute("s1"); System.out.println(o); if(o==null){ //同包下不須要導包,java.long下不須要導報。 System.out.println("第一次請求s1此時沒有session值,爲null"); Users user =new Users(1,"gll","123"); mv.addObject("user1",user);//自動綁定到session中,key爲user mv.addObject("user2",user); mv.addObject("s",user); mv.addObject("s1",user);//把對象加入模型,模型中的數據都是key = value形式 }else{ System.out.println("第二次請求s1,此時session中有值"+session.getAttribute("s")); System.out.println("用戶信息"+session.getAttribute("user")); } return mv; }
(4)@ModelAttribute:方法入參標註該註解後,入參的對象就會放到數據模型
@ModelAttribute("user") //map.put("user",u ) public Users getUser(@RequestParam(value="id",required=false) Integer id,Model model){ System.out.println("我是一個加了@ModelAttribute方法"); Users u=null; model.addAttribute("id",0); if(id==null){ model.addAttribute("id",0); u=new Users(1,"gll","123"); } else{ u=new Users(); } return u; }