一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - 基于Spring MVC 簡介及入門小例子(推薦)

基于Spring MVC 簡介及入門小例子(推薦)

2020-11-10 16:39Java教程網 JAVA教程

下面小編就為大家帶來一篇基于Spring MVC 簡介及入門小例子(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、什么是 Spring MVC

Spring MVC 屬于 SpringFrameWork 的后續產品,已經融合在 Spring Web Flow 里面,是一個強大靈活的 Web 框架。Spring MVC 提供了一個 DispatcherServlet 作為前端控制器來分配請求。通過策略接口,Spring 框架是高度可配置的。Spring MVC 還包含多種視圖技術,如 Java Server Pages(JSP)、Velocity、Tiles、iText 和 POI 等。Spring MVC 分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。

Spring MVC 框架主要由 DispatcherServlet、處理器映射器、處理器適配器、處理器(控制器)、視圖解析器、視圖組成。

二、Spring MVC 執行流程

Spring MVC 高層次的請求處理工作流程如下(圖來自 Spring 官網):

 基于Spring MVC 簡介及入門小例子(推薦)

細分后,Spring MVC 執行流程如下,共包括八步:

基于Spring MVC 簡介及入門小例子(推薦)

Spring MVC 相關接口解釋:

(1)DispatcherServlet

前端控制器,所有的請求都有經過它來統一分發,請求會被分發給對應的 Handler。

(2)HandlerMapping(處理器映射器)

解析請求鏈接,然后根據請求鏈接找到執行這個請求的類(HandlerMapping 所說的 handler)。

(3)HandlerAdapter(處理器適配器)

調用具體的方法對用戶發來的請求來進行處理。

(4)Controller

Controller 將處理用戶請求,Controller 處理完用戶請求,則返回 ModelAndView 對象給 DispatcherServlet 前端控制器。

從宏觀角度考慮,DispatcherServlet 是整個 Web 應用的控制器;從微觀考慮,Controller 是單個 Http 請求處理過程中的控制器。

(5)ViewResolver(視圖解析器)

解析 MdoelAndView,將 MdoelAndView 中的邏輯視圖名變為一個真正的 View 對象,并將 MdoelAndView 中的 Model 取出。

前面簡單的介紹了 Spring MVC ,下面以簡單的用戶注冊為例,來了解 Spring MVC 的一些基本原理和運用。

三、項目文件結構

 基于Spring MVC 簡介及入門小例子(推薦)

 四、開發準備

Spring MVC 的相關文件放在實驗樓的服務器中,請打開實驗環境桌面上的 Xfce ,輸入下面的代碼獲取:

wget http://labfile.oss.aliyuncs.com/courses/810/Spring-jars.zip

輸入下面的命令解壓 .zip 文件:

unzip Spring-jars.zip

五、實驗步驟

1 新建項目工程

在 Eclipse 里新建一個 Web 工程(Dynamic Web Project),命名為 SpringMVCTest 。

注意勾選 “自動生成 web.xml” 這個選項。

將 /home/shiyanlou/Spring-jars/ 路徑下的全部 jar 包拷貝到項目的 WebContent/WEB-INF/lib/ 目錄下。

基于Spring MVC 簡介及入門小例子(推薦)

 

 

 

2 配置 web.xml 文件

修改 web.xml 文件內容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
  id="WebApp_ID" version="3.0">
  <display-name>SpringMVCTest</display-name>
 
  <!-- 配置 Spring MVC DispatchcerServlet 前端控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <!-- contextConfigLocation 是參數名稱,該參數的值包含 Spring MVC 的配置文件路徑 -->
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/springmvc-config.xml</param-value>
    </init-param>
    <!-- 在 Web 應用啟動時立即加載 Servlet -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <!-- Servlet 映射聲明 -->
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!-- 監聽當前域的所有請求 -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <!-- 添加 register.jsp 為首頁 -->
  <welcome-file-list>
    <welcome-file>register.jsp</welcome-file>
  </welcome-file-list>
</web-app>

在 web.xml 中配置了 DispatchcerServlet,DispatchcerServlet 加載時需要一個 Spring MVC 的配置文件,默認會去 WEB-INF 下查找對應的 [servlet-name]-servlet.xml 文件,如本例中默認查找的是 springmvc-servlet.xml。

Spring MVC 的配置文件可以放在任何地方,用 servlet 的子元素 init-param 描述即可,見上述示例代碼,這時 DispatchcerServlet 就會去查找 /WEB-INF/springmvc-config.xml。

3 springmvc-config.xml 文件

在 WebContent/WEB-INF/ 目錄下新建 Spring MVC 配置文件 springmvc-config.xml,配置 Spring MVC 的 Controller,添加如下代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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:context="http://www.springframework.org/schema/context"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
 
  <context:annotation-config />
  <!-- 配置自動掃描的包,完成 Bean 的創建和自動依賴注入的功能 -->
  <context:component-scan base-package="com.shiyanlou.springmvc.controller" />
   <!-- 這兩個類用來配置 annotation 類型的處理器映射器和處理器適配器 -->
  <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
  <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
 
  <!-- 配置視圖解析器 -->
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"></property>
    <property name="suffix" value=".jsp"></property>
  </bean>
 
</beans>

上述配置文件中, Spring 使用了掃描機制查找應用程序所有基于注解的控制器類,在本例中,掃描的是 com.shiyanlou.springmvc.controller 包及其子包下的所有 Java 文件。

同時配置了 annatation 類型的處理器映射器 DefaultAnnotationHandlerMapping 和處理器適配器 AnnotationMethodHandlerAdapter,DefaultAnnotationHandlerMapping 根據請求查找映射,AnnotationMethodHandlerAdapter 完成對控制器類的 @RequestMapping 標注方法(下面會介紹)的調用。

最后配置的視圖解析器 InternalResourceViewResolver 用來解析視圖,將 View 呈現給用戶。視圖解析器中配置的 prefix表示視圖的前綴, suffix表示視圖的后綴。

注:在 Spring4.0 之后,如果不配置處理映射器、處理器適配器和視圖解析器,會使用默認的。

4 實體類 User

在項目目錄 /Java Resources/src 的包 com.shiyanlou.springmvc.entity 下新建類 User.java,包含 id、username、password 和 age 屬性,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.shiyanlou.springmvc.entity;
 
import java.io.Serializable;
 
public class User implements Serializable {
 
  private static final long serialVersionUID = 1L;
  private Integer id;
  private String username;
  private String password;
  private Integer age;
 
  public Integer getId() {
    return id;
  }
 
  public void setId(Integer id) {
    this.id = id;
  }
 
  public String getUsername() {
    return username;
  }
 
  public void setUsername(String username) {
    this.username = username;
  }
 
  public String getPassword() {
    return password;
  }
 
  public void setPassword(String password) {
    this.password = password;
  }
 
  public Integer getAge() {
    return age;
  }
 
  public void setAge(Integer age) {
    this.age = age;
  }
 
}

5 Controller 類的實現

在包 com.shiyanlou.springmvc.controller 下新建 Controller 類 UserController.java,具體解釋注釋已經給出,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.shiyanlou.springmvc.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
 
import com.shiyanlou.springmvc.entity.User;
 
/**
 * UserController 是一個基于注解的控制器
 * 可以同時處理多個請求動作
 */
@Controller
public class UserController {
  
  /**
  * RequestMapping 用來映射一個請求和請求的方法
  * value="/register" 表示請求由 register 方法進行處理
  */
  @RequestMapping(value="/register")
  public String Register(@ModelAttribute("form") User user, Model model) { // user:視圖層傳給控制層的表單對象;model:控制層返回給視圖層的對象
    // 在 model 中添加一個名為 "user" 的 user 對象
    model.addAttribute("user", user);
    // 返回一個字符串 " success" 作為視圖名稱
    return "success";
  }
}

6 JSP 頁面

(1)register.jsp

在 WebContent 目錄下新建一個 JSP 頁面命名為 register.jsp,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>register page</title>
</head>
<body>
  <form action="register" method="post">
    <h5>User registration</h5>
    <p>
      <label>name </label> <input type="text" id="username" name="username"
        tabindex="1">
    </p>
 
    <p>
      <label>password </label> <input type="text" id="password" name="password"
        tabindex="2">
    </p>
 
    <p>
      <label>age </label> <input type="text" id="age" name="age"
        tabindex="3">
    </p>
    <p id="buttons">
      <input id="submit" type="submit" tabindex="4" value="register">
      <input id="reset" type="reset" tabindex="5" value="reset">
    </p>
  </form>
</body>
</html>

(2)success.jsp

在 WebContent/WEB-INF 目錄下新建文件夾 views,并在該路徑下新建一個 JSP 頁面命名為 success.jsp,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>success page</title>
</head>
<body>
  <h5>login was successful</h5>
  <p>
    name:${requestScope.user.username}<br /> password:${requestScope.user.password}<br /> age:${requestScope.user.age}<br />
  </p>
</body>
</html>

7 運行測試

注:由于在線環境的資源問題,這里啟動 tomcat 比較慢,需要大家耐心等待幾分鐘。如果遇到 Tomcat 啟動超時的問題,請按照下圖的方法延長 Tomcat 的啟動時間。

基于Spring MVC 簡介及入門小例子(推薦)

右擊 SpringMVCTest 工程,Run As->Run on Server,保持默認選項不變,點擊 Finish,一會兒即可看到結果:

基于Spring MVC 簡介及入門小例子(推薦)

輸入注冊信息,點擊注冊按鈕,結果如下:

基于Spring MVC 簡介及入門小例子(推薦)

以上這篇基于Spring MVC 簡介及入門小例子(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 调教女帝 | ai换脸杨幂被c在线观看 | 小兰被扒开内裤露出p | 欧美最猛性xxxxx短视频 | 国产成人欧美视频在线 | 国产一区二区免费福利片 | 日韩欧美一级大片 | 99网站在线观看 | 国产成人精品系列在线观看 | 国产高清视频在线 | 亚洲第一综合天堂另类专 | 欧洲久久 | 色婷婷狠狠 | 日本高清在线观看天码888 | 久久久乱码精品亚洲日韩 | 亚洲2017久无码 | 国产精品xxxav免费视频 | 日本道色综合久久影院 | 日本mv精品中文字幕 | 欧美女孩videos | 513热点网深夜影院影院诶 | 欧美成人精品福利在线视频 | 调教处男 | 国产亚洲高清国产拍精品 | 免费观看视频在线播放 | 门房秦大爷小说 | 亚洲国产精品自在现线让你爽 | 精品欧美一区二区三区在线观看 | 色老汉| 97影视| 韩国最新三级网站在线播放 | 亚洲日本va午夜中文字幕 | 青青99| 公翁的舌尖研磨她的花蒂小说 | crdy在线看亚洲 | 无套暴躁白丝秘书 | 日本午夜大片免费观看视频 | 高h巨肉play 高h短篇辣肉各种姿势bl | 国自产精品手机在线视频 | 国产小情侣自拍 | 日本欧美不卡一区二区三区在线 |