Spring MVC 學習總結(八)——Spring MVC概要與環境配置(IDEA+Maven+Tomcat7+JDK八、示例與視頻)

Spring MVC 學習總結(八)——Spring MVC概要與環境配置(IDEA+Maven+Tomcat7+JDK八、示例與視頻)

 

1、MVC概要

MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟件設計規範,用一種將業務邏輯、數據、顯示分離的方法組織代碼,MVC主要做用是下降了視圖與業務邏輯間的雙向偶合。MVC不是一種設計模式,MVC是一種架構模式。固然不一樣的MVC存在差別。html

在web早期的開發中,一般採用的都是Model1。Model1中,如圖所示主要分爲兩層,視圖層和模型層。Model2把一個項目分紅三部分,包括視圖、控制、模型。這樣不只提升的代碼的複用率與項目的擴展性,且大大下降了項目的維護成本。Model 1模式的實現比較簡單,適用於快速開發小規模項目,Model1中JSP頁面身兼View和Controller兩種角色,將控制邏輯和表現邏輯混雜在一塊兒,從而致使代碼的重用性很是低,增長了應用的擴展性和維護的難度。Model2消除了Model1的缺點。前端

Model1vue

Model2java

常見的服務器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常見前端MVC框架:angularjs、reactjs、vue.js;由MVC演化出了另一些模式如:MVP、MVVM。mysql

2、Spring MVC介紹

Spring MVC是Spring Framework的一部分,是基於Java實現MVC的輕量級Web框架。Spring MVC的特色:
一、輕量
二、高效
三、與Spring兼容性好
四、功能強大
RESTful、數據驗證、格式化、綁定機制、本地化、主題等
五、簡潔靈活react

Spring的web框架圍繞DispatcherServlet設計。 DispatcherServlet的做用是將請求分發到不一樣的處理器。從Spring 2.5開始,使用Java 5或者以上版本的用戶能夠採用基於註解的controller聲明方式。官網上說Spring的web模塊提供了大量獨特的功能,包括:
清晰的角色劃分:控制器(controller)、驗證器(validator)、 命令對象(command object)、表單對象(form object)、模型對象(model object)、 Servlet分發器(DispatcherServlet)、 處理器映射(handler mapping)、視圖解析器(view resolver)等等。 每個角色均可以由一個專門的對象來實現。linux

強大而直接的配置方式:將框架類和應用程序類都能做爲JavaBean配置,支持跨多個context的引用,例如,在web控制器中對業務對象和驗證器(validator)的引用。git

可適配、非侵入:能夠根據不一樣的應用場景,選擇合適的控制器子類 (simple型、command型、form型、wizard型、multi-action型或者自定義),而不是從單一控制器 (好比Action/ActionForm)繼承。angularjs

可重用的業務代碼:可使用現有的業務對象做爲命令或表單對象,而不須要去擴展某個特定框架的基類。

可定製的綁定(binding) 和驗證(validation):好比將類型不匹配做爲應用級的驗證錯誤, 這能夠保存錯誤的值。再好比本地化的日期和數字綁定等等。在其餘某些框架中,你只能使用字符串表單對象, 須要手動解析它並轉換到業務對象。

可定製的handler mapping和view resolution:Spring提供從最簡單的URL映射, 到複雜的、專用的定製策略。與某些web MVC框架強制開發人員使用單一特定技術相比,Spring顯得更加靈活。

靈活的model轉換:在Springweb框架中,使用基於Map的 鍵/值對來達到輕易地與各類視圖技術的集成。

可定製的本地化和主題(theme)解析:支持在JSP中可選擇地使用Spring標籤庫、支持JSTL、支持Velocity(不須要額外的中間層)等等。

簡單而強大的JSP標籤庫(Spring Tag Library):支持包括諸如數據綁定和主題(theme) 之類的許多功能。它提供在標記方面的最大靈活性。

JSP表單標籤庫:在Spring2.0中引入的表單標籤庫,使得在JSP中編寫 表單更加容易。

Spring Bean的生命週期能夠被限制在當前的HTTP Request或者HTTP Session。 準確的說,這並不是Spring MVC框架自己特性,而應歸屬於Sping MVC使用的WebApplicationContext容器。

2.一、學習資料

http://7xvpsh.com1.z0.glb.clouddn.com/ Spring MVC翻譯

http://spring.cndocs.tk/ Spring翻譯

http://blog.csdn.net/tangtong1/article/details/51326887 Spring 1-6章

https://github.com/linesh-simplicity/translation-spring-mvc-4-documentation 翻譯列表

https://docs.spring.io/spring-framework/docs/4.2.4.RELEASE/spring-framework-reference/html/mvc.html 官方幫助

3、第一個Spring MVC 項目:Hello World

3.一、IntelliJ IDEA中建立一個Maven項目

在IntelliJ IDEA中新建Maven項目,選擇「File->New->Project」,建立一個簡單項目,不選擇模板。

 

選擇「Maven」,不須要使用內置結構(模板)

填寫包名與項目名:

選擇項目位置,儘可能不要有中文、空格或特殊字符,點擊完成:

完成後點擊「Enable-Auto import」

3.二、添加Web項目支持

前面咱們建立好了一個普通的Java項目,如今須要將普通項目轉換成Web項目

選擇「Web Application」

 

點擊OK後項目就變成Web項目了,且根據Maven風格建立了不一樣類型的文件夾

若是使用內置架構建立則須要手動添加不一樣的文件夾類型

3.三、配置Tomcat Web容器

點擊右側下拉列表,選擇編輯配置文件

 在配置窗口中點中左上角的「加號」->Tomcat Server->"Local"

命名

添加部署包

 設置項目的虛擬目錄名稱(Application context應用上下文)

選擇修改項目後服務器動做

修改index.jsp文件後運行項目

啓動項目後的運行結果:

注意這裏的tomcat的日誌與eclipse整合後是不同的,分開在多個窗口中輸出。

3.四、將項目發佈到Git遠程倉庫(非必要)

點擊「VCS」->"Enable Version Control Integration",將項目集成到版本控制器中

選擇版本控制器類型爲Git

提交項目到本地倉庫

 選擇要提交的文件並填寫好日誌信息:

管理遠程倉庫地址

點擊加號添加

添加成功後

提交到遠程倉庫

點擊push

提交成功

查看結果

3.五、添加依賴的jar包

一、修改pom.xml文件、添加jar包的依賴,主要有:Spring框架核心庫、Spring MVC、JSTL等,具體信息以下:

複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zhangguo</groupId>
    <artifactId>springmvc08</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.3.0.RELEASE</spring.version>
    </properties>

    <!--項目依賴 -->
    <dependencies>
        <!--單元測試-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>

        <!--j2ee相關包 servlet、jsp、jstl-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!--mysql驅動包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>

        <!--spring相關包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!--其餘須要的包-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>maven-springmvc</finalName>
        <resources>
            <!--表示把java目錄下的有關xml文件,properties文件編譯/打包的時候放在resource目錄下-->
            <resource>
                <directory>${basedir}/src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
        </resources>
        <plugins>
            <!--servlet容器 jetty插件-->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.3.10.v20160621</version>
            </plugin>
        </plugins>
    </build>

</project>
複製代碼

若是須要其它的包能夠去中心倉庫搜索

若是下載太慢能夠將maven的遠程中心倉庫的地址換成國內倉庫。

默認會自動下載jar包,第一次下載會較慢,之後從本地引用就會快不少

當依賴成功時,會加載的jar包以下:

將maven依賴的包添加到項目中,發佈時一塊兒打包

3.六、將依賴的包添加到項目發佈文件中

點擊項目結構(ctrl+shift+alt+s)

 點擊「Artifacts」->"Output Layout"->雙擊要輸出的包

成功添加後在lib目錄下就能夠看到輸出的包了

3.七、修改web.xml註冊中心控制器DispatcherServlet

Spring MVC框架像許多其餘MVC框架同樣, 請求驅動,圍繞一箇中心Servlet分派請求及提供其餘功能,DispatcherServlet是一個實際的Servlet (它繼承自HttpServlet 基類)。以下圖所示當發起請求時被前置的控制器攔截到請求,根據請求參數生成代理請求,找到請求對應的實際控制器,控制器處理請求,建立數據模型,訪問數據庫,將模型響應給中心控制器,控制器使用模型與視圖渲染視圖結果,將結果返回給中心控制器,再將結果返回給請求者。

修改web.xml文件註冊該Servlet,修改後的web.xml文件以下:

複製代碼
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">


    <!--welcome pages-->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!--配置springmvc DispatcherServlet-->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <!--Sources標註的文件夾下須要新建一個spring文件夾-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:spring/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
複製代碼

3.八、添加Spring MVC配置文件

在src/main/resources源代碼目錄下添加spring目錄與spring-mvc.xml配置文件,配置的形式與Spring容器配置基本相似,爲了支持基於註解的IOC,設置了自動掃描包的功能,具體配置信息以下:

複製代碼
<?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.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
    <!--啓用spring的一些annotation -->
    <context:annotation-config/>

    <!-- 自動掃描該包,使SpringMVC認爲包下用了@controller註解的類是控制器 -->
    <context:component-scan base-package="com.zhangguo.springmvc08.controller">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--HandlerMapping 無需配置,springmvc能夠默認啓動-->

    <!--靜態資源映射-->
    <mvc:default-servlet-handler/>
    <!--若是發現是靜態資源的請求,就將該請求轉由Web應用服務器默認的Servlet處理,若是不是靜態資源的請求,才由DispatcherServlet繼續處-->
    <!--本項目把靜態資源放在了WEB-INF的statics目錄下,資源映射以下-->
    <!--<mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/"/>-->
    <!--<mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/"/>-->
    <!--<mvc:resources mapping="/image/**" location="/WEB-INF/statics/image/"/>-->

    <!--可是項目部署到linux下發現WEB-INF的靜態資源會出現沒法解析的狀況,可是本地tomcat訪問正常,所以建議仍是直接把靜態資源放在webapp的statics下,映射配置以下-->
    <!--<mvc:resources mapping="/css/**" location="/statics/css/"/>-->
    <!--<mvc:resources mapping="/js/**" location="/statics/js/"/>-->
    <!--<mvc:resources mapping="/image/**" location="/statics/images/"/>-->

    <!-- 配置註解驅動 能夠將request參數與綁定到controller參數上 -->
    <mvc:annotation-driven/>

    <!-- 對模型視圖名稱的解析,即在模型視圖名稱添加先後綴(若是最後一個仍是表示文件夾,則最後的斜槓不要漏了) 使用JSP-->
    <!-- 默認的視圖解析器 在上邊的解析錯誤時使用 (默認使用html)- -->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/views/"/><!--設置JSP文件的目錄位置-->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- springmvc文件上傳須要配置的節點-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="20971500"/>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="resolveLazily" value="true"/>
    </bean>
</beans>
複製代碼

在視圖解析中咱們把全部的視圖都存放在/WEB-INF/目錄下,這樣是爲了視圖安全,由於這個目錄客戶端不能直接訪問。

3.九、建立HelloWorld控制器

在src/main/java源代碼目錄下建立包com.zhangguo.springmvc08.controller,在包下建立一個普通的類:HomeController,具體代碼以下:

複製代碼
package com.zhangguo.springmvc08.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller  //聲明爲控制器
@RequestMapping(path = "/home")  //請求映射
public class HomeController {
    @RequestMapping(path = "/index")  //請求映射
    public String index(Model model){
        model.addAttribute("message","Hello Spring MVC!");
        return "home/index";
    }
}
複製代碼

 註解爲@Controller是爲了讓Spring IOC容器初始化時自動掃描到;@RequestMapping是爲了映射請求路徑,這裏由於類與方法上都有映射因此訪問時應該是/home/index;方法中聲明Model類型的參數是爲了把Action中的數據帶到視圖中;方法返回的結果是視圖的名稱index。

3.十、建立視圖

在WEB-INF/view目錄中建立視圖,視圖將從Action中帶回的信息展現,具體內容以下:

複製代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<h2>
    ${message}
</h2>
</body>
</html>
複製代碼

3.十一、測試運行

啓動Tomcat運行項目,請注意查看啓動信息,若是有異常應該先解決異常信息,運行成功後的結果以下所示:

4、用戶管理示例

使用Spring MVC實現一個簡單的用戶管理示例,項目結構以下

運行結果:

4.一、用戶Bean

用戶實體類user.java

複製代碼
package com.zhangguo.springmvc08.entity;

/***
 * 用戶
 */
public class User {
    public User(int id, String name, String address, String phone) {
        this.id = id;
        this.name = name;
        this.address = address;
        this.phone = phone;
    }

    public User() {
    }

    /**
     * 編號
     */
    private int id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 地址
     */
    private String address;
    /**
     * 電話
     */
    private String phone;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    /**
     * 姓名
     */
    public String getName() {
        return name;
    }

    /**
     * 姓名
     */
    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}
複製代碼

4.二、用戶數據訪問對象

用戶數據訪問接口 IUserDAO

複製代碼
package com.zhangguo.springmvc08.dao;

import com.zhangguo.springmvc08.entity.User;

import java.util.List;

/**
 * 用戶數據訪問接口
 */
public interface IUserDAO {
    /**得到全部*/
    List<User> getAll();
    /**根據用戶編號得到用戶對象*/
    User getUserById(int id);
    /**新增*/
    boolean add(User user);
    /**刪除*/
    boolean delete(int id);
    /**更新*/
    boolean update(User user);
}
複製代碼

UserDAO.java

複製代碼
package com.zhangguo.springmvc08.dao;

import com.zhangguo.springmvc08.entity.User;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;

/**
 * 用戶數據訪問對象
 */
@Repository
public class UserDAO implements IUserDAO {
    private static List<User> users = new ArrayList<User>();

    static {
        users.add(new User(1, "劉德華", "中國香港", "13767890098"));
        users.add(new User(2, "張學友", "中國廣東", "18989890767"));
        users.add(new User(3, "張國立", "中國北京", "13345672345"));
        users.add(new User(4, "張靚因", "中國上海", "15890908679"));
        users.add(new User(5, "齊萍萍", "中國珠海", "13246712235"));
    }

    /**
     * 得到全部
     */
    public List<User> getAll() {
        return users;
    }

    /**
     * 單個用戶
     */
    public User getUserById(int id) {
        for (User user : users) {
            if (user.getId() == id) {
                return user;
            }
        }
        return null;
    }

    /**
     * 添加
     */
    public boolean add(User user) {
        if(user.getId()<=0)
        {
            user.setId(users.get(users.size()-1).getId()+1);
        }
        users.add(user);
        return true;
    }

    /**
     * 刪除
     */
    public boolean delete(int id) {
        users.remove(getUserById(id));
        return true;
    }

    /**
     * 更新
     */
    public boolean update(User user) {
        User oldUser = getUserById(user.getId());
        oldUser.setName(user.getName());
        oldUser.setAddress(user.getAddress());
        oldUser.setPhone(user.getPhone());
        return true;
    }
}
複製代碼

4.三、用戶業務對象

用戶業務類UserService.java

複製代碼
package com.zhangguo.springmvc08.service;

import com.zhangguo.springmvc08.dao.IUserDAO;
import com.zhangguo.springmvc08.dao.UserDAO;
import com.zhangguo.springmvc08.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**用戶業務*/
@Service
public class UserService {

    @Autowired
    IUserDAO userdao;

    public List<User> queryAllUsers(){
        return userdao.getAll();
    }

    public User getUserById(int id){
        return userdao.getUserById(id);
    }

    public boolean deleteUser(int id){
        return userdao.delete(id);
    }

    public  boolean addUser(User user){
        return userdao.add(user);
    }

    public boolean editUser(User user){
        return userdao.update(user);
    }

}
複製代碼

4.四、控制器

用戶控制器UserController.java

複製代碼
package com.zhangguo.springmvc08.controller;

import com.zhangguo.springmvc08.entity.User;
import com.zhangguo.springmvc08.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller  //聲明爲控制器
@RequestMapping(path = "/user")  //請求映射
public class UserController {

    @Autowired
    UserService userService;

    @RequestMapping(path = "/index")  //請求映射
    public String index(Model model){
        model.addAttribute("list",userService.queryAllUsers());
        return "user/index";
    }

    @RequestMapping("/delete/{id}")
    public String delete(@PathVariable int id){
        userService.deleteUser(id);
        return "redirect:/user/index";
    }

    @RequestMapping("/add")
    public String add(){
        return "user/add";
    }

    @RequestMapping(value = "/add",method = RequestMethod.POST)
    public String add(User user){
        userService.addUser(user);
        return "redirect:/user/index";
    }

    @RequestMapping("/edit/{id}")
    public String edit(@PathVariable int id,Model model){
        model.addAttribute("user",userService.getUserById(id));
        return "user/edit";
    }

    @RequestMapping(value = "/edit",method = RequestMethod.POST)
    public String edit(User user){
        userService.editUser(user);
        return "redirect:/user/index";
    }

}
複製代碼

4.五、用戶視圖

列表:user/index.jsp

複製代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>用戶管理</title>
</head>
<body>
<h2>
    用戶管理
</h2>
<table width="100%" border="1">
    <tr>
        <th>編號</th>
        <th>姓名</th>
        <th>地址</th>
        <th>電話</th>
        <th>操做</th>
    </tr>
    <c:forEach items="${list}" var="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.address}</td>
            <td>${user.phone}</td>
            <td>
                <a href="delete/${user.id}" class="del">刪除</a> |
                <a href="edit/${user.id}">修改</a></td>
        </tr>
    </c:forEach>
</table>
<p>
    <a href="add">新增</a>
</p>
<script>
    var items = document.querySelectorAll(".del");
    for (var i = 0; i < items.length; i++) {
        items[i].onclick = function () {
            return confirm("您確認要刪除嗎?");
        }
    }
</script>
</body>
</html>
複製代碼

 

新增:user/add.jsp

複製代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>用戶管理</title>
</head>
<body>
<h2>
    添加用戶
</h2>
<form method="post" action="add">
    <fieldset>
        <legend>用戶信息</legend>
        <p>
            <label for="name">姓名:</label>
            <input name="name" id="name" type="text" required="required" maxlength="32"/>
        </p>
        <p>
            <label for="address">地址:</label>
            <input name="address" id="address" type="text" required="required" maxlength="128"/>
        </p>
        <p>
            <label for="phone">電話:</label>
            <input name="phone" id="phone" type="text" required="required" maxlength="11"/>
        </p>
        <p>
            <button>提交</button>
        </p>
    </fieldset>
</form>
<a href="index">列表</a>
</body>
</html>
複製代碼

 

編輯:user/edit.jsp

複製代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>用戶管理</title>
</head>
<body>
<h2>
    修改用戶
</h2>
<form method="post" action="../edit">
    <fieldset>
        <legend>用戶信息</legend>
        <p>
            <label for="id">編號:</label>
            <input name="id" id="id" type="text" required="required" readonly="readonly" maxlength="32" value="${user.id}"/>
        </p>
        <p>
            <label for="name">姓名:</label>
            <input name="name" id="name" type="text" required="required" maxlength="32" value="${user.name}"/>
        </p>
        <p>
            <label for="address">地址:</label>
            <input name="address" id="address" type="text" required="required" maxlength="128" value="${user.address}"/>
        </p>
        <p>
            <label for="phone">電話:</label>
            <input name="phone" id="phone" type="text" required="required" maxlength="11" value="${user.phone}"/>
        </p>
        <p>
            <button>提交</button>
        </p>
    </fieldset>
</form>
<a href="index">列表</a>
</body>
</html>
複製代碼

 

4.六、Spring-MVC配置文件

resources/spring/spring-mvc.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: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.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!--啓用spring的一些annotation -->
    <context:annotation-config/>

    <!-- 自動掃描該包,使SpringMVC認爲包下用了@controller註解的類是控制器 -->
    <context:component-scan base-package="com.zhangguo.springmvc08">
    </context:component-scan>

    <!--HandlerMapping 無需配置,springmvc能夠默認啓動-->

    <!--靜態資源映射-->
    <mvc:default-servlet-handler/>
    <!--若是發現是靜態資源的請求,就將該請求轉由Web應用服務器默認的Servlet處理,若是不是靜態資源的請求,才由DispatcherServlet繼續處-->
    <!--本項目把靜態資源放在了WEB-INF的statics目錄下,資源映射以下-->
    <!--<mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/"/>-->
    <!--<mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/"/>-->
    <!--<mvc:resources mapping="/image/**" location="/WEB-INF/statics/image/"/>-->

    <!--可是項目部署到linux下發現WEB-INF的靜態資源會出現沒法解析的狀況,可是本地tomcat訪問正常,所以建議仍是直接把靜態資源放在webapp的statics下,映射配置以下-->
    <!--<mvc:resources mapping="/css/**" location="/statics/css/"/>-->
    <!--<mvc:resources mapping="/js/**" location="/statics/js/"/>-->
    <!--<mvc:resources mapping="/image/**" location="/statics/images/"/>-->

    <!-- 配置註解驅動 能夠將request參數與綁定到controller參數上 -->
    <mvc:annotation-driven/>

    <!-- 對模型視圖名稱的解析,即在模型視圖名稱添加先後綴(若是最後一個仍是表示文件夾,則最後的斜槓不要漏了) 使用JSP-->
    <!-- 默認的視圖解析器 在上邊的解析錯誤時使用 (默認使用html)- -->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/views/"/><!--設置JSP文件的目錄位置-->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- springmvc文件上傳須要配置的節點-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="20971500"/>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="resolveLazily" value="true"/>
    </bean>
</beans>
複製代碼

5、示例下載

https://git.coding.net/zhangguo5/SpringMVC08.git

點擊下載示例

6、視頻

https://www.bilibili.com/video/av16991874/

7、做業

6.一、請使用Spring MVC在頁面上顯示當前日期

6.二、請使用Spring MVC完成以下功能(三選一),能夠不使用數據庫,直接使用集合就能夠了

相關文章
相關標籤/搜索