Maven搭建SSH(Struts2+Spring+Hibernate)框架入门教程(二)_2
2)Action
① Message.java 代码如下所示:
package cn.com.mvn.ssh.demo.web.vo;public class Message {private String code;private String message;public Message(String message) {super();this.message = message;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}
UserAction.java
package cn.com.mvn.ssh.demo.web.action;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Controller;import cn.com.mvn.ssh.demo.entity.MvnUser;import cn.com.mvn.ssh.demo.service.IUserService;import cn.com.mvn.ssh.demo.web.vo.Message;("userAction")public class UserAction {("userService")private IUserService userService;private MvnUser user;private int id;private String userName;private String type;private String status;private int age;private Message message;// 新增用户的执行方法public String addUser() {String result = "addSuccess";message = new Message("添加成功");try {// 调用service,创建用户userService.createUser(user);} catch (Exception e) {e.printStackTrace();message.setMessage("添加失败:" + e.getMessage());}return result;}// 删除用户的执行方法public String deleteUser() {String result = "deleteSuccess";message = new Message("删除成功");try {userService.deleteUser(id);} catch (Exception e) {e.printStackTrace();message.setMessage("删除失败:" + e.getMessage());}return result;}// 修改用户的执行方法public String editUser() {String result = "editSuccess";this.message = new Message("修改成功!");try {userService.editUser(age, status, id);} catch (Exception e) {e.printStackTrace();message.setMessage("修改失败:" + e.getMessage());}return result;}// 根据id或用户名查找单个用户的执行方法public String searchUser() {String result = "searchUserSeuccess";if ("byId".equals(type)) {user = this.userService.searchUser(id);} else {user = this.userService.searchUser(userName);}return result;}private List<MvnUser> userList;// 查询所有用户列表的执行方法public String searchUsers() {String result = "searchUsersSuccess";this.userList = this.userService.searchUsers();return result;}public List<MvnUser> getUserList() {return userList;}public void setUserList(List<MvnUser> userList) {this.userList = userList;}public MvnUser getUser() {return user;}public void setUser(MvnUser user) {this.user = user;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Message getMessage() {return message;}public void setMessage(Message message) {this.message = message;}}
3)applicationContext.xml。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd"><context:component-scanbase-package="cn.com.mvn.ssh.demo" /></beans>
4)struts.xml。
<struts><include file="struts-default.xml"></include><include file="struts-plugin.xml"></include><!-- 从Spring容器中获取Action对象 --><constant name="struts.objectFactory" value="spring"></constant><!-- 请求和Action方法的动态对应 --><constant name="struts.enable.DynamicMethodInvocation"value="true" /><package name="t" namespace="/" extends="json-default"><action name="userAction" class="userAction"><result name="searchUsersSuccess">/userList.jsp</result><result name="searchUserSeuccess" type="json"><param name="root">user</param></result><result name="editSuccess" type="json"><param name="root">message</param></result><result name="deleteSuccess" type="json"><param name="root">message</param></result><result name="addSuccess" type="json"><param name="root">message</param></result></action></package></struts>
5)web.xml。
<web-app version="2.5" 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"><display-name>MvnSSHDemo.Struts</display-name><!-- 启动Spring 容器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/classes/applicationContext.xml</param-value></context-param><!-- struts2的总入口过滤器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><session-config><session-timeout>30</session-timeout></session-config><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>
4. 安装发布测试
右击“工程”,选择 Run As→Maven install 命令。
Maven 会自动编译、测试代码,并且打成 war 包,将 war 包发布到指定的 Web 服务器的发布目录。接着就可以启动 Tomcat 服务器用浏览器进行测试了。浏览器操作过程同前面基于 Jsp/Servlet 开发的 Demo 一样。
整合成 SSH
按前面的操作,用户已经独立地实现了各自模块的功能,并且能将各自的功能封装成构件安装到本地仓库、发布到公司搭建的私服上面,供需要的地方当依赖构件使用。
这体现了模块化的思想,同时考虑到框架的依赖配置的共性,用户可以独立创建工程(POM),将每个独立框架的依赖配置都在公共 POM 工程中设置好。
其他要使用的工程只需继承它们就行了,不需要重复配置。比如,MvnSSHDemo.Struts 就是继承自 StrutsPOM。这体现了 Maven 开发过程中的继承运用思想。
但是,当测试 MvnSSHDemo.Struts 模块功能的时候,发现前面的依赖模块的实现需要修改,这时候就要对修改的模块工程进行独立的编译、测试、打包、安装和发布,然后再测试 MvnSSHDemo.Struts。
如果依赖的第三方模块很多,这样每次改动都需要对每个模块进行重复操作,很麻烦。
为了解决这个问题,Maven 里面有个“聚合”的概念。它能将一个个依赖的模块聚合成一个大项目(工程)。
下面创建一个项目,将 MvnSSHDemo 的相关模块都聚合到一起,同时操作,具体步骤如下。
1. 创建一个普通工程
聚合工程结构如图 3 所示。
图 3 聚合工程结构
2. 在 pom.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/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.com.mvn.ssh.demo</groupId><artifactId>MvnSSHDemo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>MvnSSHDemo</name><url>http://maven.apache.org</url><modules><module>../MvnSSHDemo.DAO</module><module>../MvnSSHDemo.DAO.Hibernate</module><module>../MvnSSHDemo.Service</module><module>../MvnSSHDemo.Service.impl</module><module>../MvnSSHDemo.Struts</module></modules><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies></dependencies><build><plugins></plugins></build><distributionManagement><repository><id>archivaServer</id><url>http://localhost:8080/repository/internal</url></repository><snapshotRepository><id>archivaServer</id><url>http://localhost:8080/repository/snapshots</url></snapshotRepository></distributionManagement></project>
注:这个 pom.xml 中没有太多信息,注意第 13、15、17 和 19 行的配置,就是将相关的依赖工程以模块的形式聚合进来。
这些工程都需要在同一个工作空间下,才能用“../”类似的相对路径进行定位应用。
3. 构建
要对所有模块进行编译、测试、安装、发布的话,都可以直接右击 MvnSSHDemo 工程,选择 Run As→Maven clean→test→install→build.→build 等命令。
当选择 Maven install 命令后,Maven 会自动把整个工程打成 MvnSSHDemo.war 包,发布到 Tomcat 的 webapps 目录中。
同样,如果选择 Maven build… 命令,输入 deploy,单击 Run 按钮,在安装的 Archiva 私服上就可以浏览到所有的构件。
4.测试
启动 Tomcat,就可以开始测试操作了,只是请注意:前面有搭建 Archiva 私服的,如果这个私服在开发的时候启动着,并且私服就搭建在自己的计算机上,请将它关闭后再启动测试应用的 Tomcat,或者修改测试应用 Tomcat 的端口,否则会出现端口冲突异常。因为 Archiva 也用 Tomcat 服务器,默认端口就是 8080 系列的。
至此,我们在 Maven 上面基于 SSH 完成了一个用户的 CRUD 功能,中间还体现了项目的模块思想、面向接口编程思想和 Maven 的继承、聚合思想。
