[SPRING]将请求映射到处理程序

104816_rTZy_2481244.png

spring中,

 

当dsipatcherServlet接收到请求时,它将会将请求分发给相应的处理程序处理请求。

因此,我们可以采用一种策略,用来映射请求到处理程序。

 

解决方案1(按bean名称映射请求,常规):(court-servlet.xml)

<beans 
    ......
	<bean name="/welcome.html" 
	    .....
	</bean>
	<bean name="/reservationQuery.html"
	    ....
	</bean>
</beans>

使用这个策略的时候,bean只能使用name属性,id中无法包含'/'。

 

解决方案2(按照控制器类名称映射请求):(court-servlet.xml)

使用spring提供的另一个请求映射工具[ControllerClassNameHandlerMapping],它会自动映射:

<beans>
	....
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
	    
	<bean class="org.cat.web.WelcomeController" />
	
	<bean class="org.cat.web.ReservationQueryController" >
	    ...
	</bean>
</beans>

映射的格式是:

将WelcomeController去掉Controller后缀,然后全部小写,变成/welcome*这个请求。

104607_9NDl_2481244.png

104619_ZwbE_2481244.png

104631_Dc9t_2481244.png

 

解决方案3(用定制的映射定义来映射请求):

使用SimpleUrlHandlerMapping


<beans>
	....
	
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	    <property name="mappings">
	        <props>
	            <prop key="/welcome.html">welcomeController</prop>
	            <prop key="/reservationQuery.html">reservationQueryController</prop>
	        </props>
	    </property>
	</bean>    
	
	<!--these are beans for every mapping request. -->
	<bean name="welcomeController" class="org.cat.web.WelcomeController" />
	
	<bean name="reservationQueryController" class="org.cat.web.ReservationQueryController" >
	   ...
	</bean>
</beans>

映射的结果:

110134_zAJa_2481244.png

110150_LiOZ_2481244.png

配置如下:

110226_Mq7U_2481244.png

110239_2WeE_2481244.png

 

解决方案4(按照多种策略映射请求):

有时,ControllerClassNameHandlerMapping就能满足应用,也有时必须使用SimpleUrlHandlerMapping来实现映射。

因此,在大型web应用中,如果有很多controller,那么就把他们结合起来使用:

<beans >
	.....
	<import resource="court-service.xml"/>
	
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	    <property name="mappings">
	        <props>
	            <prop key="/welcome.html">welcomeController</prop>
	            <prop key="/index.html">welcomeController</prop>
	        </props>
	    </property>
	    <property name="order" value="0" />
	</bean>    
	
	<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
	    <property name="caseSensitive" value="true" />
	    <property name="order" value="1" />
	</bean>
	
	
	<!--these are beans for every mapping request. -->
	<bean name="welcomeController" class="org.cat.web.WelcomeController" />
	
	<bean name="reservationQueryController" class="org.cat.web.ReservationQueryController" >
	    <property name="reservationService" ref="reservationService"/>
	    <property name="supportedMethods" value="GET" />
		<property name="cacheSeconds" value="60" />
	</bean>
</beans>

and you can see this:

这里的order是映射的优先级,0优先于1.

/index.html---->WelcomeController

/welcome.html----->WelcomeController

/welcome*------>WelcomeController

/reservationQuery*------>ReservationQueryController

运行结果:

112003_r1KH_2481244.png

(因为我在web.xml里面添加了pattern,所以后缀名不是.html的根本进不了court-servlet.xml,哈哈哈哈)

 

下面附上xml配置文件(放在应用程序上下文根目录中,也就是web-inf下面)

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Court Reservation System</display-name>
  
  <servlet>
      <servlet-name>court</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>court</servlet-name>
      <url-pattern>*.html</url-pattern>
      <url-pattern>*.htm</url-pattern>
  </servlet-mapping>
  
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/court-service.xml</param-value>
  </context-param>
  
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
</web-app>

court-service.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="prefix" value="/WEB-INF/jsp/" />
	    <property name="suffix" value=".jsp" />
	</bean>
	
	<bean id="reservationService"
	    class="org.cat.service.ReservationServiceImpl" />
	
</beans>

court-servlet.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<import resource="court-service.xml"/>
	
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	    <property name="mappings">
	        <props>
	            <prop key="/welcome.html">welcomeController</prop>
	            <prop key="/index.html">welcomeController</prop>
	        </props>
	    </property>
	    <property name="order" value="0" />
	</bean>    
	
	<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
	    <property name="caseSensitive" value="true" />
	    <property name="order" value="1" />
	</bean>
	
	
	<!--these are beans for every mapping request. -->
	<bean name="welcomeController" class="org.cat.web.WelcomeController" />
	
	<bean name="reservationQueryController" class="org.cat.web.ReservationQueryController" >
	    <property name="reservationService" ref="reservationService"/>
	    <property name="supportedMethods" value="GET" />
		<property name="cacheSeconds" value="60" />
	</bean>
</beans>

 

转载于:https://my.oschina.net/qkmc/blog/867080

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值