SpringMVC注解及实现页面跳转详解

本文详细介绍了SpringMVC的基本配置和使用方法,包括搭建环境、请求映射、参数传递、表单提交等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring MVC 

第一讲:SpringMVC 页面跳转实例,通过请求访问start.jsp页面 

1.1 加包 

1.2 web.xml 

  1. <servlet>   
  2.   
  3.           <servlet-name>springMVC</servlet-name>   
  4.   
  5.           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
  6.   
  7.           <load-on-startup>1</load-on-startup>   
  8.   
  9.       </servlet>   
  10.   
  11.       <servlet-mapping>   
  12.   
  13.           <servlet-name>springMVC</servlet-name>   
  14.   
  15.           <url-pattern>*.do</url-pattern>   
  16.   
  17.       </servlet-mapping>   

1.3 建springMVC-servlet.xml(注:spring默认要求建立在WEB-INF目录下,并且名称为servlet-name_servlet.xml 

    
  1. <beans xmlns="http://www.springframework.org/schema/beans"   
  2.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"   
  3.         xmlns:context="http://www.springframework.org/schema/context"   
  4.         xsi:schemaLocation="   
  5.     http://www.springframework.org/schema/beans   
  6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  7.     http://www.springframework.org/schema/context   
  8.     http://www.springframework.org/schema/context/spring-context-3.0.xsd">   
  9.         <context:component-scan base-package="com.wdl.cn.controllers" />   
  10.         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">   
  11.             <property name="prefix" value="/WEB-INF/page/"/>   
  12.             <property name="suffix" value=".jsp"/>   
  13.         </bean>   
  14.     </beans>   


1.4 StartController.java 

  1. package com.wdl.cn.controllers;   
  2.   
  3.     import org.springframework.stereotype.Controller;   
  4.     import org.springframework.web.bind.annotation.RequestMapping;   
  5.   
  6.     @Controller   
  7.     public class StartController {   
  8.   
  9.         @RequestMapping(value="/start")   
  10.         public String start(){   
  11.             System.out.println("start method invoked...");   
  12.             return "start";   
  13.         }   
  14.     }   



1.5 新建 WEB-INF/page/start.jsp 

1.6 访问:http://localhost:8080/springMVC_001/start.do 
总结:本例子搭建一个简单的spingmvc实例,通过本例学习springMVC最简单的流程及搭建元素。 
第二讲 灵活指定springmvc映射文件及路径 
    更多情况下,对于第一讲中的springMVC-servlet.xml 文件,我们并不想去放在WEB-INF,或者说我们可能在一个项目中并不是只有这一个文件,所以本节我们来讲述如何灵活配置此文件及文件名。 
2.1 修改web.xml 

  1. <servlet>   
  2.           <servlet-name>springMVC</servlet-name>   
  3.           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
  4.           <init-param>   
  5.               <param-name>contextConfigLocation</param-name>   
  6.               <param-value>classpath*:/com/wdl/cn/config/mvc/*.xml</param-value>   
  7.           </init-param>   
  8.           <load-on-startup>1</load-on-startup>   
  9.       </servlet>   
  10.       <servlet-mapping>   
  11.           <servlet-name>springMVC</servlet-name>   
  12.           <url-pattern>*.do</url-pattern>   
  13.       </servlet-mapping>   

2.2 将WEB-INF下面的springMVC-servlet.xml 移动到com.wdl.cn.config.mvc包下并将其修改名称为springMVC-first.xml 

2.3 测试原来的路径 : http://localhost:8080/springMVC_002/start.do 

总结:本讲主要学习了如何灵活配置springMVC配置文件。下节将重点讲述@RequestMapping的使用。 

第三讲 springMVC_003  @RequestMapping的使用 

3.1 @RequestMapping 使用位置 
    a.使用于方法,此方法则可以被请求访问; 
    b.使用于类,则可以将请求分(又叫分路径,分模块)包处理 
3.2 将controller类上加@RequestMapping,修改StartController.java 

  1. package com.wdl.cn.controllers;   
  2.   
  3.     import org.springframework.stereotype.Controller;   
  4.     import org.springframework.web.bind.annotation.RequestMapping;   
  5.   
  6.     @Controller   
  7.     @RequestMapping(value="/test")   
  8.     public class StartController {   
  9.   
  10.         @RequestMapping(value="/start")   
  11.         public String start(){   
  12.             System.out.println("start method invoked...");   
  13.             return "start";   
  14.         }   
  15.     }   


3.3 访问:http://localhost:8080/springMVC_003/test/start.do ,由此可见,可以通过在类上加@RequestMapping将请求分路径。 

3.4 @RequestMapping 参数详解 
    a.value表示访问的路径 
    b.method 表示请求的方式 GET | POST 
    step1:修改StartController.java 

  1. import org.springframework.stereotype.Controller;   
  2.    import org.springframework.web.bind.annotation.RequestMapping;   
  3.    import org.springframework.web.bind.annotation.RequestMethod;   
  4.   
  5.    @Controller   
  6.    @RequestMapping(value="/test")   
  7.    public class StartController {   
  8.   
  9.        @RequestMapping(value="/start",method=RequestMethod.GET)   
  10.        public String start(){   
  11.            System.out.println("start method invoked...");   
  12.            return "start";   
  13.        }   
  14.        @RequestMapping(value="/start",method=RequestMethod.POST)   
  15.        public String start2(){   
  16.            System.out.println("start2 method invoked...");   
  17.            return "start";   
  18.        }   
  19.    }            

step2:修改start.jsp模拟POST请求 
3.5 访问http://localhost:8080/springMVC_003/test/start.do,接着转到start.jsp页面,接着点击页面的中按钮,发送POST请求,则可以看出不同的请求方式可以调用不同的方法。 
3.6 参数传递(常用参数传递,restful风格参数传递) 

      a.httpservletreqeust方式参数传递 
        step1:修改StartController.java 
      
  1. package com.wdl.cn.controllers;   
  2.   
  3.     import javax.servlet.http.HttpServletRequest;   
  4.   
  5.     import org.springframework.stereotype.Controller;   
  6.     import org.springframework.web.bind.annotation.RequestMapping;   
  7.     import org.springframework.web.bind.annotation.RequestMethod;   
  8.   
  9.     @Controller   
  10.     @RequestMapping(value="/test")   
  11.     public class StartController {   
  12.   
  13.         @RequestMapping(value="/start",method=RequestMethod.GET)   
  14.         public String start(HttpServletRequest request){   
  15.             System.out.println("start method invoked...");   
  16.             String name = request.getParameter("name");   
  17.             int age = Integer.parseInt(request.getParameter("age"));   
  18.             System.out.println("name=" + name + " age = " + age);   
  19.             return "start";   
  20.         }   
  21.         @RequestMapping(value="/start",method=RequestMethod.POST)   
  22.         public String start2(){   
  23.             System.out.println("start2 method invoked...");   
  24.             return "start";   
  25.         }   
  26.     }   

    step2:访问:http://localhost:8080/springMVC_003/test/start.do?name=zhangsan&age=45 

      b.restfull风格参数传递 
        step1:修改StartController.java 
 
  1. package com.wdl.cn.controllers;   
  2.   
  3.     import org.springframework.stereotype.Controller;   
  4.     import org.springframework.web.bind.annotation.PathVariable;   
  5.     import org.springframework.web.bind.annotation.RequestMapping;   
  6.     import org.springframework.web.bind.annotation.RequestMethod;   
  7.   
  8.     @Controller   
  9.     @RequestMapping(value="/test")   
  10.     public class StartController {   
  11.   
  12.         @RequestMapping(value="/start/{name}/{age}",method=RequestMethod.GET)   
  13.         public String start(@PathVariable("name") String name,@PathVariable("age"int age){   
  14.             System.out.println("start method invoked...");   
  15.             System.out.println("name="+name+" age="+age);   
  16.             return "start";   
  17.         }   
  18.         @RequestMapping(value="/start",method=RequestMethod.POST)   
  19.         public String start2(){   
  20.             System.out.println("start2 method invoked...");   
  21.             return "start";   
  22.         }   
  23.     }   

    step2:访问时,将参数值加入请求路径 http://localhost:8080/springMVC_003/test/start/zhangsan/45.do 
总结:本讲主要讲述请求参数传递,主要掌握HttpServletRequest方式与restfull风格参数传递,下讲主要讲述form表单提交 

第四讲 form表单提交 
    使用struts2后,我们习惯将form表单的数据封装成一个对象,这也是面向对象编程的一个思维,本节讲述form表单提交。 
    具体代码见UserController.java 
 
  1. package com.wdl.cn.controllers;   
  2.   
  3.    import java.text.SimpleDateFormat;   
  4.    import java.util.Date;   
  5.   
  6.    import javax.servlet.http.HttpSession;   
  7.   
  8.    import org.springframework.beans.propertyeditors.CustomDateEditor;   
  9.    import org.springframework.stereotype.Controller;   
  10.    import org.springframework.web.bind.WebDataBinder;   
  11.    import org.springframework.web.bind.annotation.InitBinder;   
  12.    import org.springframework.web.bind.annotation.RequestMapping;   
  13.    import org.springframework.web.bind.annotation.RequestMethod;   
  14.    import org.springframework.web.servlet.ModelAndView;   
  15.   
  16.    import com.wdl.cn.entity.User;   
  17.   
  18.    @Controller   
  19.    @RequestMapping(value="/form")   
  20.    public class UserController {   
  21.   
  22.        @RequestMapping(value="/add",method=RequestMethod.GET)   
  23.        public String toUserAddPage(){   
  24.            System.out.println("toUserAddPage method invoked...");   
  25.            return "useradd";   
  26.        }   
  27.         
  28.        @RequestMapping(value="/add",method=RequestMethod.POST)   
  29.        public ModelAndView addUser(HttpSession session,User user){   
  30.            System.out.println("addUser method invoked...");   
  31.            System.out.println(user);   
  32.            ModelAndView mav = new ModelAndView();   
  33.            session.setAttribute("abc", user);   
  34.            mav.setViewName("redirect:/form/add.do");   
  35.            mav.addObject("abc", user);   
  36.            //return "useradd";   
  37.            return mav;   
  38.        }   
  39.         
  40.        @InitBinder   
  41.        public void initBinder(WebDataBinder binder){   
  42.            binder.registerCustomEditor(Date.classnew CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), false));   
  43.        }   
  44.    }   

     注:addUser方法中参数User则是接收请求发过来的参数;initBinder方法则是用来绑定用户提交的数据,前台提交过来的日期,在这里后面并不知情,则由这个方法来处理。 
总结:本讲主要讲述如何来提交表单数据,并将其封装成一个对象。 

第五节 一个Controller处理多个请求 
      很多情况下,我们都想把有关联的请求放在一个controller中,比如,对于一个用户的增删改查,都可以放在一个controller类中。对于springMVC注解的方式有两种方式可以实现。 
    1.一个controller类中每个处理请求的方法的@requestMapping的param中可以带参数,比如:@RequestMapping(param="method=method1"),在类级别的@RequestMapping上面指定请求路径。 
  1. package com.wdl.cn.controllers;   
  2.   
  3.     import org.springframework.stereotype.Controller;   
  4.     import org.springframework.web.bind.annotation.RequestMapping;   
  5.     import org.springframework.web.servlet.ModelAndView;   
  6.   
  7.     @Controller   
  8.     @RequestMapping(value="/manyRequest")   
  9.     public class ReceiveManyRequestController {   
  10.         @RequestMapping(params="method=method1")   
  11.         public ModelAndView methodOne(){   
  12.             System.out.println("method methodOne invoked...");   
  13.             ModelAndView mav = new ModelAndView("ReceiveManyRequest");   
  14.             mav.addObject("msg""请求第一个方法");   
  15.             return mav;   
  16.         }   
  17.         @RequestMapping(params="method=method2")   
  18.         public ModelAndView methodTwo(){   
  19.             System.out.println("method methodTwo invoked...");   
  20.             ModelAndView mav = new ModelAndView("ReceiveManyRequest");   
  21.             mav.addObject("msg""请求第二个方法");   
  22.             return mav;   
  23.         }   
  24.          
  25.     }   

      2.每个接收请求的方法的@RequestMapping的value中指定请求路径,看ReceveManyRequestController2.java 

    
  1. package com.wdl.cn.controllers;   
  2.   
  3.     import org.springframework.stereotype.Controller;   
  4.     import org.springframework.web.bind.annotation.RequestMapping;   
  5.     import org.springframework.web.servlet.ModelAndView;   
  6.   
  7.     @Controller   
  8.     @RequestMapping(value="/manyRequest")   
  9.     public class ReceiveManyRequestController2 {   
  10.         @RequestMapping(value="/request1")   
  11.         public ModelAndView methodOne(){   
  12.             System.out.println("method methodOne invoked...");   
  13.             ModelAndView mav = new ModelAndView("ReceiveManyRequest");   
  14.             mav.addObject("msg""请求第一个方法");   
  15.             return mav;   
  16.         }   
  17.         @RequestMapping(value="/request2")   
  18.         public ModelAndView methodTwo(){   
  19.             System.out.println("method methodTwo invoked...");   
  20.             ModelAndView mav = new ModelAndView("ReceiveManyRequest");   
  21.             mav.addObject("msg""请求第二个方法");   
  22.             return mav;   
  23.         }   
  24.     }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值