HelloWorld實例(springmvc版)


本文將對應用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格式的圖片了。

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM