本文將對應用springmvc實現HelloWorld打印,其步驟如下:
1、加入相關jar包,在maven項目里就是在pom.xml文件中引入相關實際依賴
2、在web.xml文件中配置DispatcherServlet
3、加入springmvc配置文件
4、編寫處理請求的請求處理器,並標識為處理器
5、編寫視圖
下面通過代碼具體實現:
1、配置pom.xml文件,相當於加入jar包
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.wn.third-ssmm</groupId> 8 <artifactId>third-ssmm</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 <packaging>war</packaging> 11 12 <properties> 13 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 14 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 15 <spring.version>4.2.4.RELEASE</spring.version> 16 <java.version>1.8</java.version><!-- 官方推薦 --> 17 </properties> 18 19 <!-- 引入實際依賴 --> 20 <dependencies> 21 <!-- spring --> 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-beans</artifactId> 30 <version>${spring.version}</version> 31 </dependency> 32 <dependency> 33 <groupId>org.springframework</groupId> 34 <artifactId>spring-context</artifactId> 35 <version>${spring.version}</version> 36 </dependency> 37 <dependency> 38 <groupId>org.springframework</groupId> 39 <artifactId>spring-web</artifactId> 40 <version>${spring.version}</version> 41 </dependency> 42 <dependency> 43 <groupId>org.springframework</groupId> 44 <artifactId>spring-webmvc</artifactId> 45 <version>${spring.version}</version> 46 </dependency> 47 <dependency> 48 <groupId>org.springframework</groupId> 49 <artifactId>spring-jdbc</artifactId> 50 <version>${spring.version}</version> 51 </dependency> 52 <!-- import lombok --> 53 <!-- 作用:在源碼中沒有getter和setter方法,但是在編譯生成的字節碼文件中有getter和setter方法 --> 54 <dependency> 55 <groupId>org.projectlombok</groupId> 56 <artifactId>lombok</artifactId> 57 <version>1.16.8</version> 58 <scope>provided</scope> 59 </dependency> 60 </dependencies> 61 62 <build> 63 <plugins> 64 <plugin> 65 <groupId>org.apache.maven.plugins</groupId> 66 <artifactId>maven-compiler-plugin</artifactId> 67 <configuration> 68 <source>1.8</source> 69 <target>1.8</target> 70 <encoding>utf-8</encoding> 71 </configuration> 72 </plugin> 73 </plugins> 74 </build> 75 </project>
2、在web.xml文件中配置DispatcherServlet
DispatcherServlet的作用:如果在某個方法上配置了@RequestMapping("/helloworld"), 當瀏覽器訪問helloworld時,DispatcherServlet會將這個請求發送給 @RequestMapping("/helloworld")所在的方法上,執行這個方法 。
1 <?xml version="1.0" encoding="utf-8"?> 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 5 <!-- 配置DispatcherServlet --> 6 <!-- 配置DispatcherServlet的作用是:如果在某個方法上配置了@RequestMapping("/helloworld"), 7 當瀏覽器訪問helloworld時,DispatcherServlet會將這個請求發送給@RequestMapping("/helloworld") 8 所在的方法上,執行這個方法 --> 9 <servlet> 10 <servlet-name>SpringDispatcherServlet</servlet-name> 11 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 12 <!-- 配置DispatcherServlet的一個初始化參數:配置springMVC配置文件的位置和名稱 --> 13 <init-param> 14 <param-name>contextConfigLocation</param-name> 15 <param-value>classpath*:springmvc.xml</param-value> 16 </init-param> 17 <!--SpringDispatcherServlet在當前web應用被加載的時候被創建,而不是等第一次請求的時候被創建 --> 18 <load-on-startup>1</load-on-startup> 19 </servlet> 20 <servlet-mapping> 21 <servlet-name>SpringDispatcherServlet</servlet-name> 22 <url-pattern>/</url-pattern> <!-- 可以應答所有請求 --> 23 </servlet-mapping> 24 <welcome-file-list> 25 <welcome-file>/index.jsp</welcome-file> 26 </welcome-file-list> 27 </web-app>
3、配置springmvc.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="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 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.2.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 12 <!-- 配置自動掃描的包 --> 13 <context:component-scan base-package="com.atguigu.springmvc"/> 14 <!-- 配置視圖解析器:如何把handler方法返回值解析為實際視圖 --> 15 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 16 <property name="prefix" value="/WEB-INF/views/"/> 17 <property name="suffix" value=".jsp"/> 18 </bean> 19 </beans>
4、編寫處理請求的請求處理器,並標識為處理器
1 package com.atguigu.springmvc.handlers; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 6 @Controller //這樣標識后HelloWorld成為控制器,在springmvc叫做handler處理器或請求處理器 7 public class HelloWorld { 8 /** 9 * 1、使用@RequestMapping注解來映射請求的URL 10 * 2、返回值會通過視圖解析器解析為實際的物理視圖:對於InternalResourceViewResolver視圖解析器,會做如下解析: 11 * 通過prefix+returnvel+后綴這樣的方式得到實際的物理視圖,然后轉發 12 * /WEB-INF/views/success.jsp 13 * @return 14 */ 15 @RequestMapping("/helloworld") 16 public String hello() { 17 System.out.println("HelloWorld"); 18 return "success"; 19 } 20 }
5、編寫請求文件index.jsp
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 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <!-- 超鏈接 --> 11 <a href="/helloworld">HelloWorld</a> 12 </body> 13 </html>
6、在WEB-IFN下新建views文件夾,在views文件夾下新建最終頁面success.jsp,如下
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 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <h4>Success Page</h4> 11 </body> 12 </html>
運行結果:
注:1、並不一定嚴格按照上述創建各個文件的先后順序完善各個文件內容,各個文件交叉配置
2、在web.xml文件中,我們也可以不適用contextConfigLocation來配置springmvc配置文件的位置和名稱,可以使用默認的,
默認的配置文件為:/WEB-IFN/<servlet-name>-servlet.xml ,即將springmvc.xml文件移至WEB-IFN文件夾下,並該名為
SpringDispatcherServlet-servlet.xml。
3、有關spring mvc訪問靜態資源的問題
關於使用spring mvc處理靜態資源,比如html(發現之前的springmvc.xml中<property name = "suffix" value = ".jsp"></property>定義為jsp結尾就可以成功跳轉,但是如果改為html並在web-inf下面新建了html文件后,並將suffix這里的".jsp"改為".html",無法跳轉到想要的html頁面,並且給出404錯誤,同時console給出錯誤信息為:No mapping found for HTTP request with URI [/springTest/WEB-INF/views/result.html] in DispatcherServ)
原因是:該 servlet 對應的 url-pattern 定義成 /,因此該 servlet 會匹配上諸如 /images/a.jpg, /css/hello.css 等這些靜態資源,甚至包括 /jsp/stock/index.jsp 這些 jsp 也會匹配。但是並沒有定義相應的 Controller 來處理這些資源,因此這些請求通常是無法完成的。
所以,在web.xml中加入
1 <servlet-mapping> 2 <servlet-name>default</servlet-name> 3 <url-pattern>*.css</url-pattern> 4 </servlet-mapping> 5 6 <servlet-mapping> 7 <servlet-name>default</servlet-name> 8 <url-pattern>*.gif</url-pattern> 9 </servlet-mapping> 10 11 <servlet-mapping> 12 <servlet-name>default</servlet-name> 13 <url-pattern>*.jpg</url-pattern> 14 </servlet-mapping> 15 16 <servlet-mapping> 17 <servlet-name>default</servlet-name> 18 <url-pattern>*.js</url-pattern> 19 </servlet-mapping> 20 21 <servlet-mapping> 22 <servlet-name>default</servlet-name> 23 <url-pattern>*.html</url-pattern> 24 </servlet-mapping>
將springmvc.xml改為:
1 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 2 <property name = "prefix" value="/WEB-INF/views/"></property> 3 <property name = "suffix" value = ".jpg"></property> 4 </bean> 5
就可以訪問靜態資源.jpg格式的圖片了。