一、默認的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>
四、適配器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>