非注解處理器映射器
1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
url 到bean name的映射
2. org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
url 到bean id的映射
非注解適配器
1. org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求編寫的Handler實現Controller接口
2. org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.class
要求編寫的Handler實現HttpRequestHandler接口
處理器Handler
1. implements org.springframework.web.servlet.mvc.Controller
2. implements org.springframework.web.HttpRequestHandler
處理器代碼:
ItemsController1因為和SimpleControllerHandlerAdapter適配,因此實現Controller接口
package wzd.pkg.ssm.controller; 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 ItemsController1 implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //調用service查找數據庫,查詢商品列表。 //返回ModelAndView ModelAndView modelAndView=new ModelAndView(); //相當於request的setAttribute,在jsp頁面中通過itemsList取數據 modelAndView.addObject("itemsList", "controller1 content"); modelAndView.setViewName("/WEB-INF/jsp/items.jsp"); return modelAndView; } }
ItemsController2因為和SimpleControllerHandlerAdapter適配,因此實現Controller接口
package wzd.pkg.ssm.controller; 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 ItemsController2 implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //調用service查找數據庫,查詢商品列表。 //返回ModelAndView ModelAndView modelAndView=new ModelAndView(); //相當於request的setAttribute,在jsp頁面中通過itemsList取數據 modelAndView.addObject("itemsList", "controller2 content"); modelAndView.setViewName("/WEB-INF/jsp/items.jsp"); return modelAndView; } }
ItemsController3因為和HttpRequestHandlerAdapter適配,因此實現RequestHandler接口
package wzd.pkg.ssm.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.HttpRequestHandler; public class ItemsController3 implements HttpRequestHandler { @Override public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("itemsList", "controller3 content"); request.getRequestDispatcher("/WEB-INF/jsp/items.jsp").forward(request, response); } }
對應的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>GoodsFind</display-name> <!-- 配置前段控制器 --> <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> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 第一種:*.action,訪問以.action結尾由DispathcerServlet進行解析 第二種:/,所有訪問的地址都由DispathcerServlet進行解析,對於靜態文件的解析需要配置不讓DispathcerServlet進行解析。 使用此種方法可以實現RESTful風格的url。 第三種:/*,這樣配置不對 --> <url-pattern>*.action</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
springMVC的配置文件
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- 配置handler --> <bean id="queryItems1" name="/queryItems1s.action" class="wzd.pkg.ssm.controller.ItemsController1"/> <bean id="queryItems2" name="/queryItems2s.action" class="wzd.pkg.ssm.controller.ItemsController2"/> <bean id="queryItems3" name="/queryItems3s.action" class="wzd.pkg.ssm.controller.ItemsController3"/> <!-- 處理器映射器 將bean的name作為url進行查找,需要在配置Handler時指定beanname(就是url)這是默認的處理器映射器 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <!-- 對queryItems1進行url映射,url是 queryItems1.action和queryItems2.action --> <prop key="/queryItems1.action">queryItems1</prop> <prop key="/queryItems2.action">queryItems2</prop> <prop key="/queryItems3.action">queryItems3</prop> </props> </property> </bean> <!-- 處理器適配器 所有的處理器適配器都實現HandlerAdapter接口 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/> <!-- 視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> </bean> </beans>
試圖文件,一個jsp頁面(items.jsp)。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>items jsp</title> </head> <body> 這個是jsp頁面。<br> 獲取值: <%=request.getAttribute("itemsList") %><br> </body> </html>
通過在瀏覽器中輸入以下地址,將會正常訪問items.jsp頁面。
http://localhost:8080/GoodsFind/queryItems1.action
http://localhost:8080/GoodsFind/queryItems1s.action
http://localhost:8080/GoodsFind/queryItems2.action
http://localhost:8080/GoodsFind/queryItems2s.action
http://localhost:8080/GoodsFind/queryItems3.action
http://localhost:8080/GoodsFind/queryItems3s.action
其中:http://localhost:8080/GoodsFind/queryItems1.action http://localhost:8080/GoodsFind/queryItems2.action http://localhost:8080/GoodsFind/queryItems3.action都是通過BeanNameUrlHandlerMapping進行映射。
http://localhost:8080/GoodsFind/queryItems1s.action http://localhost:8080/GoodsFind/queryItems2s.action http://localhost:8080/GoodsFind/queryItems3s.action是通過SimpleUrlHandlerMapping進行映射。
http://localhost:8080/GoodsFind/queryItems1.action http://localhost:8080/GoodsFind/queryItems1s.action http://localhost:8080/GoodsFind/queryItems2.action http://localhost:8080/GoodsFind/queryItems2s.action對應的處理器是繼承自Contrller。
http://localhost:8080/GoodsFind/queryItems3.action http://localhost:8080/GoodsFind/queryItems3s.action對應的處理器是繼承自HttpRequestHandler。
