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.在我學習構建這個專案的時候,借鑑了很多網友的部落格,但是由於過去時間太久,無法找到他們的網址.
對他們表示感謝!