一:准備工作
將需要用到的spring包放進lib文件夾內,具體需要什么包自己網上查,或在我的例子里找。
二:配置文件:web.xml
主要是配置servlet路徑方式和指定上下文xml文件。
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 4 5 <display-name>springMvcTest</display-name> 6 7 8 9 <servlet> 10 11 <servlet-name>spmvc</servlet-name> 12 13 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 14 15 /* 16 17 <init-param> 18 19 <param-name>contextConfigLocation</param-name> 20 21 <param-value>classpath*:/springMVC.xml</param-value> 22 23 </init-param> 24 25 */ 26 27 <load-on-startup>1</load-on-startup> 28 29 </servlet> 30 31 32 33 <servlet-mapping> 34 35 <servlet-name>spmvc</servlet-name> 36 37 <url-pattern>*.do</url-pattern> 38 39 </servlet-mapping> 40 41 42 43 <!-- 字符集亂碼,添加字符集過濾器,只能攔截post請求,get請求中文需要手動轉換 --> 44 45 <filter> 46 47 <filter-name>encodingFilter</filter-name> 48 49 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 50 51 <init-param> 52 53 <param-name>encoding</param-name> 54 55 <param-value>UTF-8</param-value> 56 57 </init-param> 58 59 <init-param> 60 61 <param-name>forceEncoding</param-name> 62 63 <param-value>true</param-value> 64 65 </init-param> 66 67 </filter> 68 69 <filter-mapping> 70 71 <filter-name>encodingFilter</filter-name> 72 73 <url-pattern>/*</url-pattern> 74 75 </filter-mapping> 76 77 78 79 <welcome-file-list> 80 81 <welcome-file>index.html</welcome-file> 82 83 <welcome-file>index.htm</welcome-file> 84 85 <welcome-file>index.jsp</welcome-file> 86 87 <welcome-file>default.html</welcome-file> 88 89 <welcome-file>default.htm</welcome-file> 90 91 <welcome-file>default.jsp</welcome-file> 92 93 </welcome-file-list> 94 95 </web-app>
三:spring配置文件 spmvc-xml-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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd" > <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/index.do">startControl</prop> <prop key="/hello.do">startControl</prop> <prop key="/login.do">loginController</prop><!--直接跳轉方式 --> <!--//commandController方式 <prop key="/add_emp.do">loginController</prop> <prop key="/add.do">addEmpControl</prop> --> <!-- FormController方式 --> <prop key="/add_emp.do">addEmpFormController</prop> <prop key="/multi.do">bController</prop> <!-- 定義訪問multi路徑1 --> <prop key="/doSearch.do">bController</prop> <!-- 定義訪問multi路徑2 --> </props> </property> </bean> <bean id="startControl" class="com.zzk.Controller"></bean> <bean id="helloControl" class="com.zzk.helloController"></bean> <bean id="addEmpControl" class="com.zzk.EmpCommandController"> <property name="commandClass" value="com.zzk.EMP"></property> </bean> <bean id="addEmpFormController" class="com.zzk.EmpFormController"> <property name="commandClass" value="com.zzk.EMP"></property> <!-- 指定類 --> <property name="formView" value="add_emp"></property> <!-- 進行填寫表單的頁面 --> <property name="successView" value="success"></property><!-- 成功頁面 --> </bean> <!-- 定義Multicontroller --> <bean id="bController" class="com.zzk.EmpMultiController"> <property name="methodNameResolver"> <ref local="bMethodNameResolver"/> <!-- 使用這種解析方式 --> </property> </bean> <!-- 請求路徑:http://localhost:8080/springMvcTest/multi.do?method=doSearch --> <bean id="bMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName" value="method"></property> <property name="logicalMappings"> <props> <prop key="doSearch">doSearch</prop> </props> </property> </bean> <!-- 請求路徑:http://localhost:8080/springMvcTest/doSearch.do ;key值需要與方法名相同,不包括.do--> <bean id="cMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"></bean> <!-- 第三種很少用,不做解釋了 --> <bean id="dMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver"> <property name="mappings"> <value> /sb/page.html=doSearch </value> </property> </bean> <!-- 用於邏輯視圖到真正視圖的隱射 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <!-- 這里是用於直接跳轉的類UrlFilenameViewController --> <bean id="loginController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/> </beans>
四:配置文件解析
最簡單訪問形式:url:http://localhost:8080/springMvcTest/index.do
1.SimpleUrlHandlerMapping簡單路徑映射類,比較常用,接收路徑請求。
1 <bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 2 3 <property name="mappings"> 4 5 <props> 6 7 <prop key="/index.do">startControl</prop> //通過這里找到id為startControl的bean 8 9 </props> 10 11 </property> 12 13 </bean>
2.<bean id="startControl" class="com.zzk.Controller"></bean> //找到這個id,並指向這個類文件。
3.Controller.class
1 package com.zzk; 2 3 4 5 import javax.servlet.http.HttpServletRequest; 6 7 import javax.servlet.http.HttpServletResponse; 8 9 import org.springframework.web.servlet.ModelAndView; 10 11 12 13 public class Controller implements org.springframework.web.servlet.mvc.Controller{ 14 15 @Override 16 17 public ModelAndView handleRequest(HttpServletRequest arg0, 18 19 HttpServletResponse arg1) throws Exception { 20 21 // TODO Auto-generated method stub 22 23 ModelAndView mav = new ModelAndView("hello"); //這個類是用來保存view和返回信息的。 24 25 mav.addObject("message", "Hello World!"); 26 27 return mav; //返回給hello.jsp這個視圖 28 29 } 30 31 }
4. InternalResourceViewResolver
<!-- 用於邏輯視圖到真正視圖的隱射 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>
5.hello.jsp
<%@ page language="java" contentType="text/html;utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <script type="text/javascript" src="WebContent/js/text.js"></script> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> ddd${message } <img src="images/53.gif"/> </body> </html>
五:執行流程
url地址發送請求 –> 通過web.xml判斷是否為 .do結尾的路徑 -> 進入spring配置文件 -> 找到SimpleUrlHandlerMapping這個類的配置 -> 通過配置找到請求的key -> 再找到這個key 的值的對應id名的bean配置 -> 通過這個bean,進入controller類進行處理 -> 返回一個視圖(“hello”) -> 回到spring配置文件,找到InternalResourceViewResolver這個配置 –> 並按它的要求找到對應的jsp文件 -> 響應。
