在平时的Java web项目开发中为了便于后期的维护,我们一般会进行分模块开发,每个模块都对应着一个pom.xml。它们之间通过继承和聚合相互关联。这样各层之间的职责会比较明确,也方便后期的维护。
今天我们是使用 Maven 来构建以上的各个层。
文字内容只涉及工程搭建的基本流程,请主要参照文章末尾的源代码。
项目目录:
mavenweb-parent
|----pom.xml
mavenweb-service
|----pom.xml
mavenweb-web
|----pom.xml
创建主模块:mavenweb-parent
- 在 Eclipse 中新建工程:
New -> Other -> Maven Project -> 填写配置信息 -> Finish
- 在 Eclipse 中,设置 目标JDK 版本:
在工程中,点击右键 -> Build Path -> Configure Build Path -> Java Build Path -> 在 Libraries 选项卡中选择 JDK1.7 或以上版本
-
在硬盘上,删除 src 文件夹;并在 Eclpse 中刷新该工程。
设置 pom 文件:
务必设置 packaging 为 pom
<project ...>
...
<packaging>pom</packaging>
<properties>
<springversion>3.1.1.RELEASE</springversion>
<junitversion>4.10</junitversion>
</properties>
<dependencyManagement>
<dependencies>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junitversion}</version>
<scope>test</scope>
</dependency>
...
</dependencyManagement>
</project>
创建子模块:mavenweb-server
- 使用类似的方式创建 maven 工程
- 修改 pom:
设置 packaging 为 jar,并添加 parent 与 dependencies 节点。
<project>
...
<packaging>jar</packaging>
<parent>
...
<relativePath>../mavenweb-parent/pom.xml</relativePath>
</parent>
...
</project>
- 添加 spring 配置
设置 component-scan 以便令代码中注解能被读取与解析,并使用 propertyConfigurer 读取配置文件。
<beans>
<!-- 扫描包 -->
<context:component-scan base-package="com.stevexie" />
<bean id="propertyConfigurer" >
<property name="location">
<value>file:/.../configInfo.properties</value>
</property>
</bean>
<!-- 这个包负责读取配置文件信息 -->
<!-- 若使用注解初始化这个类,编译后的 jar 包无法正确地读取配置,原因未知 -->
<!-- 所以仅这个类实例需要在 xml 中定义 -->
<bean id="configInfo" class="com.stevexie.util.ConfigInfo">
<property name="name" value="${prop.name}"></property>
</bean>
</beans>
创建子模块:mavenweb-client
- 首先,同样使用类似的方式创建 maven 工程,但与 Server 工程相比多了以下几部
- 转换项目类型
项目右键 -> properties -> Project Facets -> 勾选 Dynamic Web Module 和 Java -> OK
-
修正编译设置与输出目录
项目右键 -> properties -> Deployment Assembly,如下图设置:
设置 JDK 1.8
设置 web.xml
因为我们的 url 会使用 restful 风格,所以需要改变两个文件:1) 在web.xml中,修改 servlet-mapping;2) 在client-spring-mvc.xml中,添加 <mvc:default-servlet-handler />
web.xml:
<web-app >
...
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<!-- 使用 resful 风格的 url 前 -->
<!-- <url-pattern>/</url-pattern> -->
<!-- 使用 resful 风格的 url 后 -->
<url-pattern>/login</url-pattern>
</servlet-mapping>
...
</web-app>
client-spring-mvc.xml:
<beans ">
...
<mvc:default-servlet-handler />
<!-- Enables the Spring MVC @Controller programming model -->
<mvc:annotation-driven />
...
</beans>
项目 mavenweb-client 中的表单验证:
- pom.xml 中添加 hibernate-validator.jar
<!-- spring mvc validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
</dependency>
- 在 UserVo.java 中添加验证条件
@NotEmpty(message = "用户名不能为空")
private String name;
@Size(min=6 ,max= 20 ,message = "密码长度不符合标准")
private String pwd;
- 修正 Controller
public class UserController {
@RequestMapping(value="/login", method = {RequestMethod.GET})
public String test(Model model) {
if(!model.containsAttribute("userVo")){
model.addAttribute("userVo", new UserVo());
}
return "login";
}
@RequestMapping(value="/login", method = {RequestMethod.POST})
public ModelAndView test(ModelMap model, @Valid @ModelAttribute("userVo") UserVo userVo, BindingResult result)
throws NoSuchAlgorithmException {
MsgVo msgVo = new MsgVo();
msgVo.setMsg("Hi " + userVo.getName() + ", " + helloService.sayHello());
if (result.hasErrors()) {
return new ModelAndView("/login", null);
}
model.addAttribute("msgVo", msgVo);
return new ModelAndView("/login_success", model);
}
}
再次配置 mavenweb-parent 项目
在 pom 文件中,添加两个子模块:
<modules>
<module>../mavenweb-client</module>
<module>../mavenweb-server</module>
</modules>
至此,工程基本设置完毕了。
编译
使用命令行:
cd ../mavenweb-proj/
mvn clean install -DskipTests=true
运行
可以使用命令把 war 包发布到 tomcat 中,并启动 tomcat 服务;或直接在 Eclipse 中运行。
为节省篇幅,这里只介绍后者;命令行的启动则会放到下一篇博文中讨论,
在 Eclipse 中运行:
- 编译后,刷新 Eclipse 工程
- 右键点击工程 -> Run as -> Run on Server -> 选择 Tomcat 9.0(注意 Tomcat 与 JDK 的兼容性问题)
- 浏览器中输入:http://localhost:8080/mavenweb-client/
完整源码下载:
请移步到百度网盘下载源码,并导入到 Eclipse 中。下载地址:
https://pan.baidu.com/s/1pLo0Ynx
下一篇预告
在本文基础上,添加并完善一些 web 项目的基本功能,包括:
- 完善 Login 页面,添加 css 与 js 事件。
- 添加日志功能及 hibernate 模块。
P.S. 如有介绍不准确之处或者在运行源代码遇到问题,请在请留下您评论留言。您的鼓励永远是我前进的动力。
参考资料
- 如何使用 Maven:
http://www.cnblogs.com/leiOOlei/p/3359561.html - 如何搭建 Maven Web 工程:
http://www.cnblogs.com/leiOOlei/p/3361633.html - Maven 依赖管理详解:
http://blog.csdn.net/liutengteng130/article/details/46991829 - Spring MVC 表单验证详解:
http://blog.csdn.net/miketom155/article/details/45058195