1. 程式人生 > >No.5 SpringMVC+Maven+Tomcat構建例項

No.5 SpringMVC+Maven+Tomcat構建例項

本篇文章,我們開始講解關於SpringMVC框架的內容。在此之前應該還有關於企業級Spring的一些內容,我決定放在後邊講解,或者如果在Spring boot中有較好的替代方案,我會直接講解Spring boot。在本文中,我會給大家展示什麼是SpringMVC以及使用我們的intellij構建一個Spring MVC的例項。

1.什麼是SpringMVC框架呢?簡單的說,就是我們在使用Spring編寫web專案時,使用MVC的架構。MVC框架大家應該並不陌生。寫過java的朋友應該都用過例如struts之類的框架。MVC顧名思義由三部分組成:M代表model,V代表view,C代表controller。


這就是我們的SpringMVC在處理一個請求時候的過程。DispatcherServlet會收集所有的請求,然後進行分發給各個Controller。Controller進行對映以後,返回相應的檢視。這就是最簡單的一個處理過程。SpringMVC的內容還有很多很多,在這裡我們來試著做一個最簡單的MVC專案感受一下。

2.什麼是maven?

      在我們寫java專案的時候,經常遇到的問題就是,我們需要手動匯入一些jar包。如果我們的專案遷移或者執行環境改變,必須要做出相應的改變,否則我們的專案依然會無法正常執行。所以,我們需要一個專案管理工具。我只需要告訴他我需要哪些依賴,如果他能夠按照我給的清單來每次都為我配置/下載依賴,會不會很方便呢?專案管理的工具很多,在這裡,我們使用maven。intellij中自帶maven。

3.建立一個我們的SpringMVC專案:

首先,在你的intellij中,新建一個Maven專案(為了方便配置maven,這裡我們沒有算則springMVC專案):

點選Next,填寫GroupId和ArtifactId

點選Next 填寫相關資訊

然後Next,填寫專案名稱。Finish!

接下來,我們要設定我們的專案結構。最後專案結構如圖所示:

main下設定java資料夾,並且按照如圖結構佈置資料夾。注意,此時我們在java資料夾下面不能新建包和Java類。我們需要設定java檔案為Source 資料夾。設定方法為:點選左上角File,點選Project Structure 如圖所示:

同理,設定resources為資原始檔夾。

接下來要配置我們的pom.xml這個XML檔案主要的目的就是我們所需要的依賴清單以及一些相關的配置。

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>maven-springmvc</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven-springmvc Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!--日誌包-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.21</version>
    </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>4.3.1.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.1.RELEASE</version>
    </dependency>

    <!--其他需要的包-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.4</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>
  </build>
</project>
由於maven版本問題,某些朋友的maven自動生成的maven pom.xml可能會出現無法識別某些子節點的問題。建議

直接複製我的pom.xml。

接下來,如圖所示點選你的maven project 的更新的按鈕。

如果你的intellij介面上(預設在右邊)沒有maven project,你可以在view-tool button中將其開啟。這樣,maven就

會開始下載你的依賴。另外,如何找到版本穩定的依賴呢?可以登陸maven倉庫,然後搜尋你需要的以來,點選檢視,

在下面會生成相應的以來code。具體操作很簡單,在這裡不展示了。至此,maven部分的以來就部署完了。我們開始

配置我們的Spring檔案。在這裡,我們依然採用的是web.xml的配置方式

1.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
         version="3.0">
  <!--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>
</web-app>
下面,我們來講解一下我們的程式碼。<welcome-file-list>標籤,定義了我們的主頁的位置。當我們專案部署完成後,在瀏覽器輸入http://localhost:8080,會自動跳轉到一個歡迎頁面,就是在這裡設定的。我們定義了一個servlet,名叫springMVC,也就是我們之前講到的DispatcherServlet。接下來,我們定義了一個contextConfiguration的變數,代表我們將這個servlet配置內容放置在了spring資料夾下的spring-mvc.xml中了。接下來我們就轉到spring-mvc.xml。配置我們的servlet。
<?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-3.2.xsd
                         http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.2.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--啟用spring的一些annotation -->
    <context:annotation-config/>

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

    <!--HandlerMapping 無需配置,springmvc可以預設啟動-->

    <!--靜態資源對映-->
    <!--本專案把靜態資源放在了WEB-INF的statics目錄下,資源對映如下-->
    <mvc:resources mapping="/css/**" location="/WEB-INF/static/css/"/>
    <mvc:resources mapping="/js/**" location="/WEB-INF/static/js/"/>
    <mvc:resources mapping="/image/**" location="/WEB-INF/static/image/"/>

    <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/view/"/><!--設定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>
Spring配置檔案的部分到此結束。接下來,我們來構建我們的MVC部分。

在Spring中新建HomeController,來作為一個簡單的Controller:

package com.example.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Created by YanMing on 2017/2/24.
 */

@Controller
public class HomeController {
    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @RequestMapping("/hello")
    public String hello(){
        logger.info("the first jsp page");
        return "home";
    }
}
在webapp/WEB-INF/view(之前在spring-mvc.xm中設定過的路徑)中,新建home.jsp。
<%--
  Created by IntelliJ IDEA.
  User: YanMing
  Date: 2017/2/25
  Time: 9:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <h1>hello nihao</h1>
    <p>This is the home page og this project</p>
</head>
<body>

</body>
</html>
頁面也寫好了呢,可以啟動了麼?NO!會不會發現你並沒有配置tomcat?點選右上角的Edit configuration,配置

tomcat。

應用你的設定,tomcat配置完畢。

最後還有一點點東西,就是log4j的日誌配置問題。在你的java資料夾下新建log4j.properties。

#配置根Logger 後面是若干個Appender
log4j.rootLogger=DEBUG,A1,R
#log4j.rootLogger=INFO,A1,R

# ConsoleAppender 輸出
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

# File 輸出 一天一個檔案,輸出路徑可以定製,一般在根路徑下
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\\apache-tomcat-8.0.0-RC1\\logs\\app.log
log4j.appender.R.MaxFileSize=500KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
注意更改你的log4j.appender.R.File=D:\\apache-tomcat-8.0.0-RC1\\logs\\app.log選項。注意如果把tomcat放在c

盤會導致許可權問題,log將無法寫入。

接下來,我們的SpringMVC就配置完成了。啟動你的tomcat,然後再瀏覽器輸入http://localhost:8080/hello,檢視

結果吧

忽視我的拼寫錯誤 QAQ

P.S.在我學習構建這個專案的時候,借鑑了很多網友的部落格,但是由於過去時間太久,無法找到他們的網址.

他們表示感謝!