本篇文章,我们会教你通过maven和spring mvc创建一个Java web项目。关于maven如何创建普通的Java项目,上一篇文章已经作了说明。
开发环境:
1.jdk 1.7
2.Maven 3.3.9
3.Eclipse Mars.1
4.Spring 4.2.1.RELEASE
5.Logback 1.0.13
1.通过maven模板创建一个Java web项目
通过命令行进入eclipse所在的workspace文件夹,输入如下命令:
mvn archetype:generate -DgroupId=org.thinkingingis -DartifactId=MavenSpringWebApp -DarchetypeArtifactId=maven-archetype-webapp
-DgroupId 表示你的组织或企业的名称
-DartifactId 表示你本项目的名词
-DarchetypeArtifactId 表示maven所提供的模板,maven-archetype-webapp是maven所提供众多模板中创建webapp的模板。
一段时间以后,出现“BUILD SUCCESS”后,一个名为“MavenSpringWebApp”的Java Web的项目就构建好了。(这一步可能会出现一些问题,反复几次即可成功。)
2.项目的目录结构
通过maven构建的Java web项目,其目录结构如下:
maven自动生成的文件目录中,包括部署描述信息文件:web.xml, pom.xml 和 index.jsp
将web.xml文件中servelt 2.3 改为2.5,如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_5.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
3.将该项目转换为eclipse工程
首先
cd MavenSpringWebApp 进入该项目文件夹下,输入
mvn eclipse:eclipse -Dwtpversion=2.0
-Dwtversion=2.0 是告诉Maven将该工程转换为一个eclipse web project(WAR),而不是JAR包。wtp表示 web tool platform
将项目导入到eclipse中:File-import-Existing Projects into Workspace
4.更新POM文件,添加项目所依赖的jar包
<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>org.thinkingingis</groupId>
<artifactId>MavenSpringWebApp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>MavenSpringWebApp Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<jdk.version>1.7</jdk.version>
<spring.version>4.2.1.RELEASE</spring.version>
<jstl.version>1.2</jstl.version>
<junit.version>4.11</junit.version>
<logback.version>1.0.13</logback.version>
<jcl-over-slf4j.version>1.7.5</jcl-over-slf4j.version>
</properties>
<dependencies>
<!-- Junit Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${jcl-over-slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<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>
<!-- jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
</dependencies>
<build>
<finalName>MavenSpringWebApp</finalName>
<plugins>
<!-- Eclipse project -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<!-- Always download and attach dependencies source code -->
<downloadSources>true</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
<!-- Avoid type mvn eclipse:eclipse -Dwtpversion=2.0 -->
<wtpversion>2.0</wtpversion>
</configuration>
</plugin>
<!-- Set JDK Compiler Level -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
5.完成务逻辑代码
5.1 最终的目录结构如下:
如果没有的文件夹, 如src/main/java需要手动创建。然后右击该文件夹选择 Build Path-Use as a source folder
5.2 BaseController.java 代码
package org.thinkingingis.controller;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class BaseController {
private static int counter = 0;
private static final String VIEW_INDEX = "index";
private final static org.slf4j.Logger logger = LoggerFactory.getLogger(BaseController.class);
@RequestMapping(value = "/", method = RequestMethod.GET)
public String welcome(ModelMap model) {
model.addAttribute("message", "Welcome");
model.addAttribute("counter", ++counter);
logger.debug("[welcome] counter : {}", counter);
// Spring uses InternalResourceViewResolver and return back index.jsp
return VIEW_INDEX;
}
@RequestMapping(value = "/{name}", method = RequestMethod.GET)
public String welcomeName(@PathVariable String name, ModelMap model) {
model.addAttribute("message", "Welcome " + name);
model.addAttribute("counter", ++counter);
logger.debug("[welcomeName] counter : {}", counter);
return VIEW_INDEX;
}
}
5.3 Spring配置文件 mvc-dispatcher-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.xsd">
<context:component-scan base-package="org.thinkingingis.controller" />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
5.4 部署描述文件 web.xml
<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_2_5.xsd"
version="2.5">
<display-name>Spring webapp</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
5.5 将index.jsp文件移动至webapp/WEB-INF/pages下,index.jsp
<html>
<body>
<html>
<body>
<h2>Hello World!</h2>
<h1>Maven + Spring MVC Web Project Example</h1>
<h2 style="color:#069">Message : ${message}</h2>
<h2>Counter : ${counter}</h2>
</body>
</html>
</body>
</html>
5.6 在src/main/resources下新建一个logback.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<logger name="org.thinkingingis.controller" level="debug"
additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
</configuration>
6.将项目打包,并部署
在MavenSpringWebApp文件夹下,通过命令行输入: mvn package
一个WAR包文件会出现在target下
将MavenSpringWebApp.war复制到你的tomcat根目录下的webapps文件夹下即可(我的是D:\apache-tomcat-7.0.69\webapps )
7. 启动tomcat
输入
看看会发生什么吧...
至此,一个通过maven创建的java web程序就完成啦。