對于書中給出的Spittr例子,親自試驗過程中發(fā)現(xiàn)了很多問題,這里記錄一下。
首先給出pox.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>win.iot4yj</groupId>
<artifactId>spring-web</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringInAction Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- 指定Maven倉庫 -->
<repositories>
<!-- 這是maven中央倉庫 -->
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<!-- 下面兩個是阿里提供的私服 ,可能速度會快點 -->
<repository>
<id>alibaba-opensource</id>
<name>alibaba-opensource</name>
<url>http://code.alibabatech.com/mvn/releases/</url>
<layout>default</layout>
</repository>
<repository>
<id>alibaba-opensource-snapshot</id>
<name>alibaba-opensource-snapshot</name>
<url>http://code.alibabatech.com/mvn/snapshots/</url>
<layout>default</layout>
</repository>
</repositories>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- spring4 -->
<!-- aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<!-- spring核心包 -->
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<!-- spring上下文,必須 -->
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!-- 下面三個是基本web項目都需要的 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- 測試所需 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>2.0.2-beta</version>
</dependency>
</dependencies>
<build>
<finalName>spring-web</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warname>spring-web</warname>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
<!-- <path>/</path> -->
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
說明:
- 這里我們使用注解的方式進(jìn)行配置,所以將
web.xml刪除。但是刪除之后會出現(xiàn)一個問題,就是web.xml is missing and <failOnMissingWebXml> is set to true。這里需要配置maven-war-plugin這個插件來解決。 -
項目結(jié)構(gòu)如下:
1
相關(guān)代碼在之前已經(jīng)給出,只是報名有些變化,實際內(nèi)容基本不變。下面給出有變化的代碼
RootConfig.java
@Configuration
@ComponentScan(basePackageClasses = { SpitterWebInitializer.class }, excludeFilters = {
@Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })
public class RootConfig {
}
WebConfig.java
@Configuration
@EnableWebMvc // 啟用Spring MVC
@ComponentScan(basePackageClasses={HomeController.class}) // 啟用組件掃描
public class WebConfig extends WebMvcConfigurerAdapter {
......
}
- 剛開始在
webapp目錄下有一個index.jsp文件,而tomcat7-maven-plugin插件是這樣配置的:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
<path>/</path>
</configuration>
</plugin>
然后在使用地址localhost:8888/spring-web/訪問的時候就是訪問不到,這是因為配置了<path>屬性,所以應(yīng)該使用localhost:8888/直接訪問項目。于是這里我先將此屬性給注銷掉了,然后再次使用前面的地址訪問,但是原本應(yīng)該進(jìn)入到home.jsp頁面,但是卻默認(rèn)訪問到了index.jsp。當(dāng)我把index.jsp刪除掉時就能進(jìn)入到對應(yīng)的controller中了。一般我們是在web.xml中配置歡迎頁面為index.jsp的,但是這里我使用注解,并沒有配置此頁面,為什么還是默認(rèn)訪問此頁面?(不懂)可能是Tomcat默認(rèn)配置的?
- 最后在試驗的時候可能還需要將工程的
web容器版本改為3.0及以上。相關(guān)修改方法請查看開發(fā)工具文集中的相關(guān)筆記。
