Spring mvcシリーズ二のコントローラマルチアクセス


Spring mvcデフォルトのプロファイルは/WEB-INF/ディレクトリの下に置いてあります。その名前も約束があります。Spring mvcのデフォルトの設定を変更すると言います。web.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>
 
ここで私達はDisplatServletを宣言する時にパラメータを指定しました。contextConfigLocationはパラメータ名が固定されています。
 
 
前の章では、コントローラはControllerインターフェースを実現して、その方法を実現しますが、もし一つの要求が一つの種類のSpringに対応すると田舎くさいので、他の方法があるのは当然です。
 
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") ;
	}
}
 
ここではMultiAction Controller類を継承します。Struts 2のように一つのコントローラは複数の要求に対応できます。これは方法の中にHttpServletRequestとHttpServletResonseを記入します。そうでなければいけません。もちろん他の簡単な書き方があります。今度紹介します。
 
コントローラを完成したら、私達のspring mvcファイルを配置します。
<?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> 
 
<bean id="parameterMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
		<property name="paramName" value="action"></property>
</bean>
 
この方法は、例えばコントローラのaddメソッドにアクセスしたときなど、属性値の中のactionが任意であることを容器に教える方法である。http://localhost/xxxx?action=add その方法を容器に呼び出すときのパラメータの名前を教えてあげるのが明らかです。
 
<bean name="/mvc/multi.html" class="gd.hz.springmvc.controller.MultiController">
	<!--      -->
	<property name="methodNameResolver">
		<!--          -->
		<ref bean="parameterMethodNameResolver"/>
	</property>
</bean>
 ここでは私達が書いたコントローラ類の解析器を声明します。はっきり言って注入します。urlのアクセス経路はmvc/multiです。
 
<mvc:resources location="/images/" mapping="/images/**"/>
 特に、この文を説明します。私達はweb.xmlでDispactch Servletのすべての要求を表明しました。つまり、私達の静的な資源は例えば、jsファイルの写真はブロックされます。これは私達が必要としているのではなく、そのカタログはDispactch Servletでブロックされないと宣言しました。
 
私たちのspring mvcの構成によって、私たちはurlを入力してhttp://localhost:88/SpringMVC1/mvc/multi.html?action=del http://localhost:88/SpringMVC1/mvc/multi.html?action=addをテストします。彼はそれぞれ私たちのdelとadd方法に訪問します。