vlambda博客
学习文章列表

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;@Controller("userAction")public class UserAction { @Autowired @Qualifier("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。

<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package="cn.com.mvn.ssh.demo" /></beans>

4)struts.xml。

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><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。

<?xml version="1.0" encoding="UTF-8"?><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 的继承、聚合思想。