Spring MVC系列:(2)視圖解析器、URL映射器、適配器



一、默認的URL映射器、適配器和視圖解析器java

SpringMVC提供了默認的URL映射器、適配器和視圖解析器。程序員

在上一文中,springmvc-helloworld.xml內容以下:web

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 
    <bean name="/helloworld.action" class="com.rk.web.action.HelloWorldAction"></bean>
 
 
</beans>


上面的配置與下面的配置是同樣的:spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<!-- 控制器(程序員) -->
    <bean name="/helloworld.action" class="com.rk.web.action.HelloWorldAction"></bean>
	
    <!-- 映射器(框架) -->  
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>  
      
      
    <!-- 適配器(框架) -->  
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>  
      
      
    <!-- 視圖解析器(框架) -->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>  
      
</beans>



二、視圖解析器InternalResourceViewResolverspring-mvc

做用:解析視圖邏輯名對應的真實路徑mvc

ModelAndView對象中便可以封裝真實視圖路徑名,也能夠封裝視圖路徑的邏輯名。app

(1)修改Action類的代碼框架

HelloWorldAction類的代碼:
jsp

由原來的ide

modelAndView.setViewName("/jsp/success.jsp");

改爲

modelAndView.setViewName("success");


完整的HelloWorldAction.java

package com.rk.web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloWorldAction implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("message", "這是個人第一個SpringMVC應用");
		modelAndView.setViewName("success");
		return modelAndView;
	}

}


(2)在配置文件中進行修改

springmvc-helloworld.xml內容添加以下部分:

	<!-- 視圖解析器(框架) -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>



完整的springmvc-helloworld.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    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
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <bean name="/helloworld.action" class="com.rk.web.action.HelloWorldAction"></bean>
	
	<!-- 視圖解析器(框架) -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

</beans>


三、映射器Mapping

【什麼樣的請求交給Action】


3.一、BeanNameUrlHandlerMapping

org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping(核心)

將程序員定義的Action所對應的<bean>標籤的name屬性做爲請求路徑

<!-- 註冊控制器(程序員) -->
<bean name="/helloworld.action" class="com.rk.web.action.HelloWorldAction"></bean>
	
<!-- 註冊映射器(handler包)(框架) -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>


3.二、SimpleUrlHandlerMapping

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

/delete.action和/update.action和/find.action請求路徑都交由<bean>標籤爲id的Action,即

多個路徑對應同一個Action 

	<!-- 註冊控制器(程序員) -->
    <bean id="helloworldID" class="com.rk.web.action.HelloWorldAction"></bean>
	
	<!-- 註冊映射器(handler包)(框架) -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/delete.action">helloworldID</prop>
				<prop key="/update.action">helloworldID</prop>
				<prop key="/find.action">helloworldID</prop>
			</props>
		</property>
	</bean>

wKioL1fe9KXC4ghwAAMNGy1WFWQ684.gif



四、適配器Adapter


Action實現Controller接口


package com.rk.web.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloWorldAction implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("message", "這是個人第一個SpringMVC應用");
		modelAndView.setViewName("success");
		return modelAndView;
	}

}


org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter

<!-- 適配器(框架) -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
相關文章
相關標籤/搜索