idea創建基於maven的springMVC簡單項目

idea創建基於maven的springMVC簡單項目

springMVC執行流程

在這裏插入圖片描述

  • 客戶端發送請求到核心控制器(DispatchSerlet),核心控制器獲得請求後,根據請求得url在處理器映射器(handlerMapping)中查找對應的handler對象。
  • 處理器映射器將找到的handler對象返回給核心控制器
  • 核心控制器派遣處理器適配器(HandlerAdapter)執行Handler
  • 處理器適配器將請求轉給Handler對象執行具體業務
  • 處理器對象Handler,調用Model層(一般指dao,entity等)進行業務處理,最後將結果返回給處理器適配器,返回結果爲ModelAndView對象
  • 處理器適配器將ModelAndView對象返回給核心控制器
  • 核心控制器調用視圖解析器將對象View進行解析,視圖解析器根據核心控制器發送來的邏輯視圖解析爲一個物理視圖並將物理視圖返回給核心控制器
  • 核心控制器調用視圖渲染器將試圖渲染(將model數據加載到特定的對象如request)
  • 核心控制器向客戶端響應結果

idea創建簡單的springMVC

  • idea創建maven Web項目
    在這裏插入圖片描述

  • 之後點next,會出現groupId和ArtifactId,規範來講,其中groupId一般分爲兩段,第一段表示域名,第二段表示公司名,ArtifactId表示項目的名稱,若是作爲練習使用,可以隨意起,之後一直點擊next,next,Finish就可以了
    注意:創建Maven項目的時候也許會報錯,其可能是maven的配置環境問題,也可能是idea不支持maven3.6.2的緣故,如果是後者可降低版本,其餘這裏不做說明
    在這裏插入圖片描述

  • 完成之後會有如下顯示,點擊Enable Auto-Import,這樣是爲了以後的依賴jar包時自動導入。
    在這裏插入圖片描述

  • 同時在src目錄下創建java和resource目錄,並將java設爲Sources Root,將resources設爲Resources Root,目的是爲了將所有資源放置在resources包中,java代碼放置在java包中。
    在這裏插入圖片描述

  • 配置web.xml
    在src/main/webapp/WEB-INF目錄下打開web.xml,如下圖,由於maven生成的web.xml是2.3版本,改爲3.0版本,因爲以前版本有些功能不支持使用(如jstl)在這裏插入圖片描述

version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

將以上代碼複製到如下圖所示的位置,就OK了!
在這裏插入圖片描述

  • 配置Tomcat,打開右上角的Add Configurations,點擊+號,選擇Local就OK了在這裏插入圖片描述
    此時這會有警號,這是因爲還沒有把此項目添加進去,如果以前沒有配置過Tomcat,需要點擊Configure配置你本地Tomcat的路徑,然後做接下來的操作,如果配置過,則直接點擊Deployment,點擊+號,選擇Artifacts,選擇第二個,然後點擊OK,然後Apply,最後關閉,這樣Tomcat就配置好了。
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

  • 配置pom.xml,打開pom.xml在dependencies標籤中添加web項目需要的servlet和spring項目需要的spring的jar包依賴,以及spring MVC 的依賴包,以及一會使用的EL表達式jstl的依賴包

  • 示例代碼如下:

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.2.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>

也可以在mvnrepository中下載依賴包(https://mvnrepository.com/)
search框中輸入servlet或者jstl或者spring或者spring MVC(要把該包有關的依賴包都下載到,如web)可下載相應的依賴包。
在這裏插入圖片描述

  • 然後選中項目,點擊Add Framework Support 添加spring MVC 框架,如果列表中沒有spring 項目的話,可能是該項目已經添加了spring項目,可點擊file-> Project Structure->Facets,刪除spring,然後Apply之後重新操作。
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 當操作成功後,再次打開web.xml,會發現idea自動配置了核心控制器,然後將url-pattern標籤中的值改爲 / ,如下圖:
    在這裏插入圖片描述
  • 然後配置spring.xml,在resource中創建一個文件,名字叫spring-config.xml,是用來配置spring的,配置代碼如下所示:
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

</beans>

在這裏插入圖片描述
這是基於註解的配置,點擊這裏,可以從這裏找到這段代碼,

由於這是基於springMVC項目,需要添加MVC的配置,可將一下紅框中的單詞替換爲mvc就可以了,代碼如下:

<?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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

</beans>

在這裏插入圖片描述
在這裏插入圖片描述

  • spring-config.xml雖然配置好了,但是並沒有通知web.xml,需要在web.xml中的servlet初始化操作,如圖:
    在這裏插入圖片描述
  • 然後在java包中建立User.java,一個簡單的javaBean對象,代碼如下:


public class User {
    private String name;
    private String password;
    public User(){}
    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

  • 創建UserController.java,該類爲處理器類,主要是處理業務功能,並將結果封裝到ModelAndView對象中去,然後返回給處理器適配器。
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

/**
 * 處理器對象,需要實現org.springframework.web.servlet.mvc.Controller接口,
 * 功能是:簡單的創建三個User對象,存入list集合中,在showUser.jsp中顯示
 */
public class UserController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //創建3個對象
        User user1 = new User("張三","123");
        User user2 = new User("李四","456");
        User user3 = new User("王五","789");
        //封裝到list集合中去
        List<User> users = new ArrayList<>();
        users.add(user1);
        users.add(user2);
        users.add(user3);
        //將集合封裝到ModelAndView對象中去,返回給處理器適配器
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("users",users );
        modelAndView.setViewName("showUser.jsp");
        return modelAndView;
    }
}

  • 然後在webapp目錄下創建相應的showUser.jsp頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <table align="center" border="1">
        <tr>
            <th>姓名</th>
            <th>密碼</th>
        </tr>
        <c:forEach items="${users}" var="user">
            <tr>
                <td>${user.name}</td>
                <td>${user.password}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

  • spring項目中,需要將對象交由spring管理,所以需要在spring-config.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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--
        id屬性和name屬性用法差不多,但是id屬性是唯一的,但是name屬性不唯一
        這裏訪問路徑即爲name屬性值,但是屬性裏面必須加 /
    -->
    <bean name="/user" class="UserController"/>
</beans>

這樣子簡單的一個功能就實現了,當訪問http://localhost:8080/user是,核心控制器(DispatchServlet)將會把url通知到默認的處理器映射器(HandlerMapping)中,HandlerMapping收到並返回給handle對象給DispatchServlet,DispatchServlet又將委派默認適配器(HandlerAdapter),HandlerAdapter將請求轉給UserController類,執行創建3個User對象,並將其封裝成list集合,又將list集合封裝成ModelAndView對象,並設置返回頁面,此時的頁面知識頁面名字而已,即邏輯名字,然後返回給HandlerAdapter,HandlerAdapter又返回給DispatchServlet,DispatchServlet又請求視圖解析器和視圖渲染器對將該頁面名字找到對應的頁面,並修飾美化頁面,最後DispatchServlet響應給客戶。
效果如下:
在這裏插入圖片描述
此過程中,如果不想使用默認的HandMapping,需要在spring-config.xml中通過類org.springframework.web.servlet.handler.SimpleUrlHandlerMapping.java進行配置,代碼如下:

<?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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--
        id屬性和name屬性用法差不多,但是id屬性是唯一的,但是name屬性不唯一
        這裏訪問路徑即爲name屬性值,但是屬性裏面必須加 /
    -->
    <bean id="userController" name="/user" class="UserController"/>

    <!--
     配置指定的url的Mapping地址
    -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <!--
                設置url與控制器之間的映射關係
                key值表示標籤體爲controller的url路徑,標籤體爲controller的id
             -->
            <props>
                <prop key="users">userController</prop>
            </props>
        </property>
    </bean>
</beans>

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章