基于Struts2的SpringMVC入门
1.SpringMVC概述
(1)SpringMVC为表现层提供基础的基于MVC设计理念的优秀Web框架,
(2)SpringMVC通过一套mvc的注解,让POJO成为处理请求的控制器,而无需任何接口
(3)采用了松散耦合可插拔组件结构,比其他框架更具扩展性和灵活性
(4)Spring MVC 是一个web框架是mvc中的c,springmvc 处理请求的是控制器。
2.简单的SpringMVC程序
(1)搭建springmvc框架,配置基本夹包31个jar包,复制springmvc的入口,
(2) spring的入口是一个servlet,这个servlet被称为分发器。在web.xml写入
配置入口
<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的文件
<servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
(3)创建SpringMVC配置文件,spring-servlet.xml
配置代码
<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文件即可显示登陆成功
3.SpringMVC常用注解详解
(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";
        
    }
4.SpringMVC处理模型数据
(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; 
    }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号