zoukankan      html  css  js  c++  java
  • 基于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; 
        }

     

  • 相关阅读:
    坑爹的A标签 href
    JS 遍历 json key ,获取设置可变的key
    js to json字符串
    js eval深入
    Js 省市联动
    JS with用法
    JS
    js 内置对象常用方法
    django-pure-pagination 分页插件
    OpenStack 网络服务 Neutron 私有网络构建(十九)
  • 原文地址:https://www.cnblogs.com/156005140qq/p/6760042.html
Copyright © 2011-2022 走看看