Spring mvc 控制器多方法访问Spring mvc默认配置文件放在/WEB-INF/目录下的,而且其名字的也是有约定的,讲
Spring mvc 控制器多方法访问
Spring mvc默认配置文件放在/WEB-INF/目录下的,而且其名字的也是有约定的,讲一下修改Spring mvc的默认配置.修改web.xml配置文件即可.其配置如下:
Xml代码??

- <?xml?version="1.0"?encoding="UTF-8"?>??
- <web-app?version="2.5"???
- ????xmlns="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">??
- ??????
- ??????<servlet>??
- ????????<servlet-name>springmvc</servlet-name>?????
- ????????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>???
- ????????<init-param>????
- ????????????<param-name>contextConfigLocation</param-name>????
- ????????????<param-value>classpath*:/springmvc.xml</param-value>????
- ????????</init-param>??
- ????????<!--?设置servlet的启动级别?-->??
- ????????<load-on-startup>1</load-on-startup>??
- ??????</servlet>??
- ??????<servlet-mapping>??
- ????????<servlet-name>springmvc</servlet-name>??
- ????????<url-pattern>/</url-pattern>??
- ??????</servlet-mapping>??
- ????
- </web-app>??
?
这里我们在声明DispatcherServlet时给它指定了一个参数,contextConfigLocation是参数名称名字固定,classpath*:/springmvc.xml是指定Spring mvc的配置文件在classpath下.即src下.
?
?
上一章我们说到,控制器要实现Controller接口并实现它的方法,但是如果一个请求对应一个类那Spring就太土了,所以理所当然有其它方法.
?
Java代码??

- package?gd.hz.springmvc.controller;??
- ??
- import?javax.servlet.http.HttpServletRequest;??
- import?javax.servlet.http.HttpServletResponse;??
- ??
- import?org.springframework.web.servlet.ModelAndView;??
- import?org.springframework.web.servlet.mvc.multiaction.MultiActionController;??
- ??
- //继承MultiActionController实现多方法??
- public?class?MultiController?extends?MultiActionController?{??
- ??????
- ????public?ModelAndView?add(HttpServletRequest?request?,?HttpServletResponse?response)??
- ????{??
- ????????System.out.println("-------->add")?;??
- ????????return?new?ModelAndView("add")?;??
- ????}??
- ??????
- ????public?ModelAndView?del(HttpServletRequest?request?,?HttpServletResponse?response)??
- ????{??
- ????????System.out.println("-------->del")?;??
- ????????return?new?ModelAndView("del")?;??
- ????}??
- }??
?
这里我们继承MultiActionController类,就可以像Struts2那样一个控制器可以对应多个请求.这个我们要在方法中写上HttpServletRequest和HttpServletResponse要不然是不行的.当然有其它更简单的写法,下次再介绍.
?
写完控制器之后,配置我们的spring mvc文件,如下图:
Xml代码??

- <?xml?version="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"??
- ????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.0.xsd????????
- ???????????http://www.springframework.org/schema/context????????
- ???????????http://www.springframework.org/schema/context/spring-context-3.0.xsd???????
- ???????????http://www.springframework.org/schema/mvc????????
- ???????????http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">??
- ???????????
- ????<bean??
- ????????class="org.springframework.web.servlet.view.InternalResourceViewResolver">??
- ????????<property?name="prefix"?value="/"?/>??
- ????????<property?name="suffix"?value=".jsp"?/>??
- ????</bean>??
- ??????
- ????<!--?声明一个Controller中使用多个方法?-->??
- ????<bean?id="parameterMethodNameResolver"?class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">??
- ????????<!--?传参数时用这个作为名称?-->??
- ????????<property?name="paramName"?value="action"></property>??
- ????</bean>??
- ??????
- ????<!--?声明DispatcherServlet不要拦截下面声明的目录?-->??
- ????<mvc:resources?location="/images/"?mapping="/images/**"/>??
- ??????
- ????<bean?name="/mvc/multi.html"?class="gd.hz.springmvc.controller.MultiController">??
- ????????<!--?名字固定?-->??
- ????????<property?name="methodNameResolver">??
- ????????????<!--?指定使用的解析器?-->??
- ????????????<ref?bean="parameterMethodNameResolver"/>??
- ????????</property>??
- ????</bean>??
- </beans>???
?
Xml代码??

- <bean?id="parameterMethodNameResolver"?class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">??
- ????????<property?name="paramName"?value="action"></property>??
- </bean>??
?
这个方法是告诉容器使用多方法解析,其中的属性值中的action是随意的,例如当我们访问控制器的add方法时,
我们可以这样写:http://localhost/xxxx?action=add ,很明显它的作用就是告诉容器调用那个方法时的参数名称.
?
Xml代码??

- <bean?name="/mvc/multi.html"?class="gd.hz.springmvc.controller.MultiController">??
- ????<!--?名字固定?-->??
- ????<property?name="methodNameResolver">??
- ????????<!--?指定使用的解析器?-->??
- ????????<ref?bean="parameterMethodNameResolver"/>??
- ????</property>??
- </bean>??
?这里声明我们写的控制器类要使用的解析器.说白了就是注入,url的访问路径是mvc/multi.html
?
Xml代码??

- <mvc:resources?location="/images/"?mapping="/images/**"/>??
?特别说明一下这句说,记得我们在web.xml中声明DispatcherServlet拦截所有的请求,也就是说我们的静态资源,比如js文件 图片都会被拦截.这不是我们需要的,而上面这句说是声明那个目录是不用DispatcherServlet拦截的.
?
根据我们spring mvc 中的配置,我们输入url进行测试
http://localhost:88/SpringMVC1/mvc/multi.html?action=del
http://localhost:88/SpringMVC1/mvc/multi.html?action=add
这样他分别访问我们的del 和add 方法