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; 
        }

     

  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/156005140qq/p/6760042.html
Copyright © 2011-2022 走看看