基於Struts2的SpringMVC入門

1.SpringMVC概述

(1)SpringMVC爲表現層提供基礎的基於MVC設計理念的優秀Web框架,java

(2)SpringMVC經過一套mvc的註解,讓POJO成爲處理請求的控制器,而無需任何接口web

(3)採用了鬆散耦合可插拔組件結構,比其餘框架更具擴展性和靈活性spring

(4)Spring MVC 是一個web框架是mvc中的c,springmvc 處理請求的是控制器。瀏覽器

2.簡單的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文件便可顯示登錄成功

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; 
    }
相關文章
相關標籤/搜索