1. 程式人生 > >搭建最簡單的SpringMVC框架

搭建最簡單的SpringMVC框架

[html] view plain copy print?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.         xmlns="http://java.sun.com/xml/ns/javaee"
  4.         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5.         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  6.         version="3.0">
  7.   <display-name>Archetype Created Web Application</display-name>
  8.   <!-- spring MVC的核心就是DispatcherServlet,使用springMVC的第一步就是將下面的servlet放入web.xml  
  9.         servlet-name屬性非常重要,預設情況下,DispatchServlet會載入這個名字-servlet.xml的檔案,如下,就會載入  
  10.         dispather-servlet.xml,也是在WEN-INF目錄下。  
  11.    -->
  12.   <servlet>
  13.     <servlet-name>dispatcher</servlet-name>
  14.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  15.     <load-on-startup>1</load-on-startup>
  16.   </servlet>
  17.   <!-- 設定dispatchservlet的匹配模式,通過把dispatchservlet對映到/,預設servlet會處理所有的請求,包括靜態資源 -->
  18.   <servlet-mapping>
  19.     <servlet-name>dispatcher</servlet-name>
  20.     <url-pattern>/</url-pattern>
  21.   </servlet-mapping>
  22.     <!-- 字符集過濾器 -->
  23.     <filter>
  24.         <filter-name>encodingFilter</filter-name>
  25.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  26.         <init-param>
  27.             <param-name>encoding</param-name>
  28.             <param-value>UTF-8</param-value>
  29.         </init-param>
  30.         <init-param>
  31.             <param-name>forceEncoding</param-name>
  32.             <param-value>true</param-value>
  33.         </init-param>
  34.     </filter>
  35.     <filter-mapping>
  36.         <filter-name>encodingFilter</filter-name>
  37.         <url-pattern>/*</url-pattern>
  38.     </filter-mapping>
  39. </web-app>

說明:其中字符集過濾器部分不是必須的,但是如果要處理中文的話,最好還是加上。

3.在WEN-INF目錄下建立dispatcher-servlet.xml

內容如下,文中有註釋。

[html] view plain copy print?
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.     xmlns:context="http://www.springframework.org/schema/context"
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"
  6.     xmlns:p="http://www.springframework.org/schema/p"
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  8.             http://www.springframework.org/schema/beans/spring-beans.xsd  
  9.             http://www.springframework.org/schema/mvc  
  10.             http://www.springframework.org/schema/mvc/spring-mvc.xsd  
  11.             http://www.springframework.org/schema/context  
  12.             http://www.springframework.org/schema/context/spring-context.xsd"  
  13.     default-lazy-init="true">
  14.     <!-- 通過mvc:resources設定靜態資源,這樣servlet就會處理這些靜態資源,而不通過控制器 -->
  15.     <!-- 設定不過濾內容,比如:css,jquery,img 等資原始檔 -->
  16.     <mvc:resourceslocation="/*.html"mapping="/**.html"/>
  17.     <mvc:resourceslocation="/css/*"mapping="/css/**"/>
  18.     <mvc:resourceslocation="/js/*"mapping="/js/**"/>
  19.     <mvc:resourceslocation="/images/*"mapping="/images/**"/>
  20.     <!-- 添加註解驅動 -->
  21.     <mvc:annotation-driven/>
  22.     <!-- 預設掃描的包路徑 -->
  23.     <context:component-scanbase-package="com.my.web"/>
  24.     <!-- mvc:view-controller可以在不需要Controller處理request的情況,轉向到設定的View -->
  25.     <!-- 像下面這樣設定,如果請求為/,則不通過controller,而直接解析為/index.jsp -->
  26.     <mvc:view-controllerpath="/"view-name="index"/>
  27.     <beanclass="org.springframework.web.servlet.view.UrlBasedViewResolver">
  28.         <propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"></property>
  29.         <!-- 配置jsp路徑字首 -->
  30.         <propertyname="prefix"value="/"></property>
  31.         <!-- 配置URl字尾 -->
  32.         <propertyname="suffix"value=".jsp"></property>
  33.     </bean>
  34. </beans>
說明: 其中<!-- 預設掃描的包路徑 -->
<context:component-scan base-package="com.my.web" />中的路徑,com.my.web,是需要在src/main/java中建立的包,用來放Java程式碼。

4.使用maven引入SpringMVC所依賴的jar包。

修改pom.xml檔案

4.1新增屬性,在<project>標籤中

[html] view plain copy print?
  1. <properties>
  2.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  3.     <spring.version>3.1.2.RELEASE</spring.version>
  4. </properties>

4.2新增依賴,在<dependencies>標籤中 [html] view plain copy print?
  1. <!-- spring begin -->
  2. <dependency>
  3.     <groupId>org.springframework</groupId>
  4.     <artifactId>spring-webmvc</artifactId>
  5.     <version>${spring.version}</version>
  6. </dependency>
  7. <dependency>
  8.     <groupId>org.springframework</groupId>
  9.     <artifactId>spring-jdbc</artifactId>
  10.     <version>${spring.version}</version>
  11. </dependency>
  12. <dependency>
  13.     <groupId>org.springframework</groupId>
  14.     <artifactId>spring-context</artifactId>
  15.     <version>${spring.version}</version>
  16. </dependency>
  17. <dependency>
  18.     <groupId>org.springframework</groupId>
  19.     <artifactId>spring-aop</artifactId>
  20.     <version>${spring.version}</version>
  21. </dependency>
  22. <dependency>
  23.     <groupId>org.springframework</groupId>
  24.     <artifactId>spring-core</artifactId>
  25.     <version>${spring.version}</version>
  26. </dependency>
  27. <dependency>
  28.     <groupId>org.springframework</groupId>
  29.     <artifactId>spring-test</artifactId>
  30.     <version>${spring.version}</version>
  31. </dependency>
  32. <!-- spring end -->

新增完成之後,通過更新工程,就會自動引入所依賴的jar包。

做完上面的準備工作之後就可以寫程式碼了。

5.寫前臺頁面:

在maven工程中生成的有一個index.jsp,將其修改成一下內容,很簡單,只是一個登陸框,提交一個form表單,中的使用者名稱和密碼。

[html] view plain copy print?
  1. <%@ page language="java"contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <metahttp-equiv="Content-Type"content="text/html; charset=UTF-8">
  7. <title>歡迎</title>
  8. </head>
  9. <body>
  10. <h2>Hello World!</h2>
  11. <formaction="login">
  12.     使用者名稱:<inputid="username"name="username"type="text"></input><br>
  13.     密  碼:<inputid="username"name="password"type="password"></input><br>
  14.     <inputtype="submit">
  15. </form>
  16. <span>當前IP:<%=request.getRemoteAddr() %></span>
  17. </body>
  18. </html>
6.寫controller層程式碼,用來響應前臺請求。 [java] view plain copy print?
  1. package com.my.web.controller;  
  2. import org.springframework.stereotype.Controller;  
  3. import org.springframework.web.bind.annotation.RequestMapping;  
  4. import org.springframework.web.bind.annotation.RequestParam;  
  5. import org.springframework.web.bind.annotation.ResponseBody;  
  6. /** 
  7.  * TODO 控制層程式碼 
  8.  * @author 591791 
  9.  * @date 2014年11月27日 
  10.  */
  11. @Controller
  12. publicclass MyController {  
  13.     @RequestMapping("login"//用來處理前臺的login請求
  14.     private@ResponseBody String hello(  
  15.             @RequestParam(value = "username", required = false)String username,  
  16.             @RequestParam(value = "password", required = false)String password  
  17.             ){  
  18.         return"Hello "+username+",Your password is: "+password;  
  19.     }