Posted on 2006-08-31 13:39
zeroblue 閱讀(10052)
評論(3) 編輯 收藏 所屬分類:
Spring
Step 1:配置web.xml
<?xml?version="1.0"?encoding="UTF-8"?>
<web-app?version="2.4"?xmlns="http://java.sun.com/xml/ns/j2ee"
????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee?
????http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

????<display-name>springapp</display-name>
????????
????<servlet>
????????<servlet-name>springMVC</servlet-name>
????????<servlet-class>
????????????org.springframework.web.servlet.DispatcherServlet
????????</servlet-class>
????????<load-on-startup>1</load-on-startup>
????</servlet>

????<servlet-mapping>
????????<servlet-name>springMVC</servlet-name>
????????<url-pattern>/page/*</url-pattern>
????</servlet-mapping>

</web-app>

servlet-mapping定義所有以/page/開頭的url請求都會被spring 的DispatcherServlet處理轉發。默認情況下DispatcherServlet會讀取<servlet-name>-servlet.xml文件的配置信息初始化,該文件中urlMapping的定義決定當前請求轉發給哪個controller來處理。
Step2:
定義/WEB-INF/springMVC-servlet.xml
?
<?xml?version="1.0"?encoding="UTF-8"?>
<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
????<!--?方法名解析器?-->
????<bean?id="InternalPathMethodNameResolver"
????????class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"?/>
????????
????<!--?視圖解析器?-->
????<bean?id="viewResolver"
????????class="org.springframework.web.servlet.view.InternalResourceViewResolver">
????????<property?name="viewClass">
????????????<value>org.springframework.web.servlet.view.JstlView</value>
????????</property>
????</bean>
????
????<bean?id="controller"?class="com.controller.IndexController">
????????<property?name="methodNameResolver">
????????????<ref?bean="InternalPathMethodNameResolver"?/>
????????</property>
????</bean>

????<bean?id="urlMapping"
????????class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
????????<property?name="mappings">
????????????<props>
????????????????<prop?key="/controller/*">controller</prop>
????????????</props>
????????</property>
????</bean>
</beans>

urlMapping定義/controller/開頭的url請求由名字為controller的控制器來處理,因為是多動作處理器,所以要定義MethodNameResolver來告訴springMVC應該調用controller的哪個方法,這里用的是InternalPathMethodNameResolver,該方法名解釋器會把整個URL中最后一個"/"和最后一個"."之間的部分作為要調用的方法名。
Step3:
定義controller類并繼承MultiActionController?
package?com.controller;

import?java.io.IOException;
import?java.util.HashMap;
import?java.util.Map;

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

import?org.springframework.web.servlet.ModelAndView;
import?org.springframework.web.servlet.mvc.multiaction.MultiActionController;


public?class?IndexController?extends?MultiActionController?
{
????
????public?ModelAndView?method1(HttpServletRequest?request,

????????????HttpServletResponse?respnose)?throws?ServletException,?IOException?
{
????????Map?model?=?new?HashMap();
????????model.put("message",?"你調用的是方法1");
????????return?new?ModelAndView("/index.jsp",?"model",?model);
????}
????
????public?ModelAndView?method2(HttpServletRequest?request,

????????????HttpServletResponse?respnose)?throws?ServletException,?IOException?
{
????????Map?model?=?new?HashMap();
????????model.put("message",?"你調用的是方法2");
????????return?new?ModelAndView("/index.jsp",?"model",?model);
????}
}

通過配置文件,訪問上面這個controller中某個方法的url即為:localhost:8080/page/controller/方法名
Step4:/index.jsp
<%@?page?language="java"?pageEncoding="UTF-8"%>
<%@?taglib?prefix="c"?uri="http://java.sun.com/jstl/core_rt"?%>
<%@?taglib?prefix="fmt"?uri="http://java.sun.com/jstl/fmt"%>?
<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
<html>
<head></head>??
<body>
????<c:out?value="${model.message}"/>
</body>
</html>
因為InternalPathMethodNameResolver方法名解釋器會把整個URL中最后一個"/"和最后一個"."之間的部分作為要調用的方法名,所以你可以在這個URL后面加任意文件格式的后綴,比如:
localhost:8080/page/controller/method1.jsp
或
localhost:8080/page/controller/method2.html
很爽吧,和真實的URL地址一樣。另:開發環境:MyEclipse5.0M2+tomcat5.5
需要用到spring.jar和jstl.jar兩個包。
附:源代碼下載