首页 文章资讯内容详情

SpringMVC_使用

2026-06-01 4 花语

本文内容纲要:

1.@RequestMapping用法

SpringMVC中,@RequestMapping用来处理请求,比如XXX.do

@RequestMapping("/aaa")//类级别,可以不需要,如果要了,下面所有的请求路径前都需要加入/aaa publicclassccccontroller{ @RequestMapping("/bbb") //方法级别,必须有,决定这个方法处理哪个请求,如果有类级别/aaa/bbb publicStringxxx() { //如果没有类级别的就直接请求/bbb return; } }

2:接收带参数的请求,接收用户请求参数值

请求1:/test/start.do?name=zhangsan

请求2:/test/start/zhangsan.do

采用URL模板@RequestMapping("/start/{name}")//这个name随便啥都可以

包含多个@RequestMapping("/start/{name}/{age}")

3:不同请求方法,用不同处理方法getpost

@RequestMapping(value="/start",method=RequestMethod.GET)//处理post就换成POST

另外,如果Servlet想要做到/test/start/zhangsan.do这种请求的话需要URL重写才能做到,或者用/start/*作为Servlet请求控制器,在其中进行截取和判断。

第二种方法:自己写一个URL重写的Filter

第三种方法:使用现成的urlrewriter工具

第四种方法:使用Web服务器的URL重写功能 publicStringstart(@PathVariable("name")stringname){//和上面的对应 return;//方法体里面就可以直接获得参数 }

Servlet中用Filter重写示例

web.xml中: <?xmlversion="1.0"encoding="UTF-8"?> <web-appversion="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>Action</servlet-name> <servlet-class>com.bao.servlet.Action</servlet-class> </servlet> <servlet-mapping> <servlet-name>Action</servlet-name> <url-pattern>/Action</url-pattern> </servlet-mapping> <filter> <filter-name>action_name</filter-name> <filter-class>com.bao.filter.ActionNameFilter</filter-class> <init-param> <param-name>pattern</param-name> <param-value>/action/[^/]+</param-value> </init-param> </filter> <filter-mapping> <filter-name>action_name</filter-name> <url-pattern>/action/*</url-pattern> </filter-mapping> </web-app>

controller接收参数的使用

springmvc提供了@RequestParam注释帮助我们获取参数。

用法@RequestParam("接收的参数名")

例如:

@RequestMapping(params="servlet=login") publicStringlogin(@RequestParam("username")Stringusername,@RequestParam("password")Stringpassword,HttpServletRequestrequest,ModelMapmap){ //处理登录逻辑,省略 return"success"; }

当客户端的URL提交了username参数,password参数,那么我们的Controller就可以接收并处理了。

要注意,提交的username参数和password参数不可以是null,即一定要传这两个参数,不然会抛异常。

另外,@RequestParam可以省略参数名,那么就会以它注释的变量名作为参数名。

视图名的确定。

springmvc可以通过可以通过多种方式确定视图名,在前面的例子中,方法无返回值,视图名根据请求参数确定。Controller方法还是返回一个String类型的值作为视图名,如:

@RequestMapping("edit")

publicvoidedit(@RequestParamintid){...}

则返回的视图为../edit.jsp

使用过低版本SpringMVC的读者都知道:当创建一个Controller时,我们需要直接或间接地实现org.springframework.web.servlet.mvc.Controller接口。一般情况下,我们是通过继承SimpleFormController或MultiActionController来定义自己的Controller的。在定义Controller后,一个重要的事件是在SpringMVC的配置文件中通过HandlerMapping定义请求和控制器的映射关系,以便将两者关联起来。

来看一下基于注解的Controller是如何定义做到这一点的,下面是使用注解的BbtForumController:

packagecom.baobaotao.web; importcom.baobaotao.service.BbtForumService; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.ModelAttribute; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RequestMethod; importjava.util.Collection; @Controller//<——① @RequestMapping("/forum.do") publicclassBbtForumController{ @Autowired privateBbtForumServicebbtForumService; @RequestMapping//<——② publicStringlistAllBoard(){ bbtForumService.getAllBoard(); System.out.println("calllistAllBoardmethod."); return"listBoard"; } }

从上面代码中,我们可以看出BbtForumController和一般的类并没有区别,它没有实现任何特殊的接口,因而是一个地道的POJO。让这个POJO与众不同的魔棒就是SpringMVC的注解!

在①处使用了两个注解,分别是@Controller和@RequestMapping。在“使用Spring2.5基于注解驱动的IoC”这篇文章里,笔者曾经指出过@Controller、@Service以及@Repository和@Component注解的作用是等价的:将一个类成为Spring容器的Bean。由于SpringMVC的Controller必须事先是一个Bean,所以@Controller注解是不可缺少的。

真正让BbtForumController具备SpringMVCController功能的是@RequestMapping这个注解。@RequestMapping可以标注在类定义处,将Controller和特定请求关联起来;还可以标注在方法签名处,以便进一步对请求进行分流。在①处,我们让BbtForumController关联“/forum.do”的请求,而②处,我们具体地指定listAllBoard()方法来处理请求。所以在类声明处标注的@RequestMapping相当于让POJO实现了Controller接口,而在方法定义处的@RequestMapping相当于让POJO扩展Spring预定义的Controller(如SimpleFormController等)。

为了让基于注解的SpringMVC真正工作起来,需要在SpringMVC对应的xxx-servlet.xml配置文件中做一些手脚。在此之前,还是先来看一下web.xml的配置吧:

<?xmlversion="1.0"encoding="UTF-8"?> <web-appxmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"> <display-name>SpringAnnotationMVCSample</display-name> <!--Spring服务层的配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!--Spring容器启动监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <!--SpringMVC的Servlet,它将加载WEB-INF/annomvc-servlet.xml的 配置文件,以启动SpringMVC模块--> <servlet> <servlet-name>annomvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>annomvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>

web.xml中定义了一个名为annomvc的SpringMVC模块,按照SpringMVC的契约,需要在WEB-INF/annomvc-servlet.xml配置文件中定义SpringMVC模块的具体配置。annomvc-servlet.xml的配置内容如下所示:

<?xmlversion="1.0"encoding="UTF-8"?> <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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!--①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能--> <context:component-scanbase-package="com.baobaotao.web"/> <!--②:启动SpringMVC的注解功能,完成请求和注解POJO的映射--> <beanclass="org.springframework.web.servlet.mvc.annotation. AnnotationMethodHandlerAdapter"/> <!--③:对模型视图名称的解析,即在模型视图名称添加前后缀--> <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/"p:suffix=".jsp"/> </beans>

因为Spring所有功能都在Bean的基础上演化而来,所以必须事先将Controller变成Bean,这是通过在类中标注@Controller并在annomvc-servlet.xml中启用组件扫描机制来完成的,如①所示。

在②处,配置了一个AnnotationMethodHandlerAdapter,它负责根据Bean中的SpringMVC注解对Bean进行加工处理,使这些Bean变成控制器并映射特定的URL请求。

而③处的工作是定义模型视图名称的解析规则,这里我们使用了Spring2.5的特殊命名空间,即p命名空间,它将原先需要通过元素配置的内容转化为属性配置,在一定程度上简化了的配置。

启动Tomcat,发送http://localhost/forum.doURL请求,BbtForumController的listAllBoard()方法将响应这个请求,并转向WEB-INF/jsp/listBoard.jsp的视图页面。

在controller中,如果在某方法中需要重定向则return"redirect:xx.html"(与类的RequestMapping的值在同一个路径下)

本文内容总结:

原文链接:https://www.cnblogs.com/penguin-panda/archive/2011/07/08/2100871.html