
一、引言
在当今的企业级应用开发中,SSH框架(Struts2 + Spring + Hibernate)已经成为一种经典且广泛应用的框架组合,它结合了Struts2的MVC模式、Spring的控制反转和面向切面编程以及Hibernate的对象关系映射,使得开发人员能够快速构建高效、稳定且易于维护的应用系统,本文将详细介绍如何在 服务器 端搭建SSH框架,为后续的开发工作打下坚实的基础。
二、环境准备
JDK安装与配置
下载JDK: 访问Oracle官方网站下载适用于您操作系统的JDK版本,确保选择与您的操作系统相匹配的JDK版本(对于64位操作系统,请选择64位JDK)。
安装JDK: 双击下载的安装包,按照提示完成安装过程,在安装过程中,请记住安装路径,通常建议安装在“C:\Program Files\Java”目录下。
配置环境变量:
右键点击“计算机”或“此电脑”,选择“属性” > “高级系统设置” > “环境变量”,在“系统变量”区域,点击“新建”,分别创建和变量。的值为JDK的安装路径,如
C:\Program Files\Java\jdk1.8.0_xx
;的值为
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
。(注意前面的点号和分号)
验证安装:
打开命令提示符(cmd),输入
java -version
和
javac -version
,如果显示正确的JDK版本信息,说明JDK安装成功。
Tomcat安装与配置
下载Tomcat: 访问Apache Tomcat官网下载最新版本的Tomcat压缩包。
解压Tomcat:
将下载的压缩包解压到指定的目录,如
C:\apache-tomcat-9.0.xx
。
配置环境变量CATALINA_HOME(可选):
为了方便使用,可以配置
CATALINA_HOME
环境变量,指向Tomcat的安装目录,但这不是必需的,因为可以直接使用完整路径来运行Tomcat。
验证安装:
进入Tomcat的目录,双击
startup.bat
文件启动Tomcat,在浏览器中输入
,如果看到Tomcat的欢迎页面,说明Tomcat安装成功。
三、项目结构与依赖管理
创建 Maven项目
安装Maven:
如果尚未安装Maven,请访问Maven官网下载并安装,配置
MAVEN_HOME
环境变量,并将
%MAVEN_HOME%\bin
添加到系统的变量中。
创建项目: 使用IDE(如IntelliJ IDEA或Eclipse)创建一个Maven Web项目,在文件中添加SSH框架的依赖项。
com.opensymphony struts2-core 2.5.20 org.springframework spring-context org.hibernate hibernate-core 5.6.10.Final
项目结构规划
src/main/java: 存放Java源代码,包括Action类、Service类、DAO类等。
src/main/resources:
存放配置文件,如Spring的
applicationContext.xml
、Struts的
struts.xml
等。
src/main/webapp: 存放Web资源,如JSP页面、图片、CSS等。
配置Servlet、Filter等Web组件。
四、SSH框架整合步骤
Struts2配置
添加Struts2核心控制器: 在中添加Struts2的核心控制器Filter,以拦截所有请求并根据配置文件进行分发。
struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /*
创建
struts.xml
配置文件:
在
src/main/resources
目录下创建
struts.xml
文件,配置Action映射、拦截器等。
/success.jsp /error.jsp
Spring配置
创建
applicationContext.xml
:
在
src/main/resources
目录下创建Spring的配置文件,配置数据源、SessionFactory、事务管理等。
org.hibernate.dialect.MySQLDialect true update
整合Spring与Struts2: 通过Spring的DelegatingRequestProcessor覆盖Struts2的核心处理器,实现Spring与Struts2的整合,修改中的Filter配置:
struts2 org.springframework.web.filter.DelegatingFilterProxy struts2 /*
并在
applicationContext.xml
中添加Struts2插件的配置:
Hibernate配置
创建实体类: 根据数据库表结构创建对应的实体类,并使用JPA注解标注。
import javax.persistence.*;@Entity@Table(name = "user")public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String password;private String nickname;// getters and setters omitted for brevity}
配置SessionFactory:
已在Spring的
applicationContext.xml
中配置了SessionFactory,确保Hibernate能够正确连接到数据库并管理实体类的持久化操作。
DAO层实现: 使用Spring的JdbcTemplate或HibernateTemplate来实现DAO层,处理数据库的CRUD操作。
import org.springframework.stereotype.Repository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.orm.hibernate5.HibernateTemplate;import com.yourpackage.model.User;import java.util.List;@Repositorypublic class UserDao {@Autowiredprivate HibernateTemplate hibernateTemplate;public void save(User user) {hibernateTemplate.save(user);}public ListfindAll() {return hibernateTemplate.loadAll(User.class);}}
Service层与Action层: 编写Service层来处理业务逻辑,然后在Action层中调用Service层的方法来完成具体的业务操作。
import com.opensymphony.xwork2.ActionSupport;import org.springframework.beans.factory.annotation.Autowired;import com.yourpackage.service.UserService;import com.yourpackage.model.User;import java.util.List;public class UserAction extends ActionSupport {@Autowiredprivate UserService userService;private User user;private Listusers;public String execute() {users = userService.findAllUsers();return SUCCESS;}}
在Service层中注入DAO层,并实现相应的业务方法:
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.yourpackage.dao.UserDao;import com.yourpackage.model.User;import java.util.List;@Servicepublic class UserService {@Autowiredprivate UserDao userDao;public void registerUser(User user) {userDao.save(user);}public ListgetAllUsers() {return userDao.findAll();}}
五、测试与调试
单元测试与集成测试
编写单元测试和集成测试来验证各个组件的功能和它们之间的协作,使用JUnit和Mockito等工具来模拟依赖并测试独立的方法或类,对于集成测试,可以使用Spring的测试框架来加载整个应用程序上下文,并测试多个组件之间的交互,确保测试覆盖了各种场景,包括正常情况和异常情况,使用断言来验证预期结果是否与实际结果相符,定期运行测试以确保代码的稳定性和可靠性,保留测试记录和报告,以便在出现问题时进行调查和分析,不断优化测试策略,提高测试效率和覆盖率。
2. 部署与发布流程自动化:使用Jenkins、GitLab CI/CD或其他持续集成/持续部署工具来自动化构建、测试和部署过程,编写脚本或使用现有插件来配置构建工具(如Maven或Gradle),以自动编译项目、运行测试并打包成可部署的artifact,配置CI/CD管道,以便在代码提交到版本控制系统时自动触发构建和测试流程,使用Docker容器化技术来打包应用程序及其依赖项,确保在不同环境中的一致性,设置自动化部署流程,将构建成功的artifact部署到测试环境或生产环境,监控部署状态和日志,以便及时发现并解决问题,定期审查和优化CI/CD流程,以提高部署效率和可靠性,记录部署历史和变更记录,以便进行审计和回滚操作,确保CI/CD环境的安全性和稳定性,防止未经授权的访问和数据泄露,提供详细的文档和指南,以便团队成员了解和使用CI/CD流程,鼓励团队成员积极参与CI/CD流程的改进和优化工作,通过自动化测试和部署流程,减少人为错误并提高软件质量,利用CI/CD工具的报告功能,及时了解构建和测试结果,根据需要调整CI/CD流程的配置参数和策略,与其他开发工具和平台集成,实现更高效的开发和运维流程,关注CI/CD领域的最新趋势和技术发展动态,参与社区交流和分享最佳实践经验,培养具备CI/CD技能的团队成员,提升团队的整体能力,确保CI/CD流程符合组织的标准和规范要求,通过自动化流程提高开发效率和产品质量,利用CI/CD平台的扩展性和灵活性满足不同的项目需求,保护知识产权和商业秘密不被泄露给竞争对手或第三方机构获取敏感信息的风险降低到最小程度甚至完全避免这种情况发生的可能性极大增加从而保障了企业的核心竞争力不受影响同时也增强了客户对企业的信任感以及市场竞争力进一步提升品牌形象及知名度等方面都有着不可忽视的作用因此加强信息安全意识教育及培训工作显得尤为重要且紧迫性不言而喻只有这样才能更好地应对日益复杂多变的网络环境挑战确保企业长期稳定健康发展下去而不被时代所淘汰出局成为历史的尘埃烟云过眼而消逝不见踪迹只留下曾经辉煌一时的传说故事流传于世供后人瞻仰怀念追忆往昔峥嵘岁月稠之情愫油然而生涌上心头挥之不去久久不能忘怀那份难以割舍的情感纽带连接着过去与现在未来之间架起了一座沟通心灵深处情感世界的桥梁让人感受到前所未有的温暖与力量共同抵御外界风雨侵袭携手共创美好明天!
小伙伴们,上文介绍了“ 服务器端搭建好ssh框架 ”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
在myeclipse里打开别人的ssh框架的项目(不懂ssh),我想访问一个页面但网页显示空白,url路径该怎么写?
问题描述不明确,首先保证你的项目启动正常,然后正常访问页面,是访问struts路径的写法
Spring有什么好处?
在SSH框假中spring充当了管理容器的角色。 我们都知道Hibernate用来做持久层,因 为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句。 Struts是用来做应用层的,他它负责调用业务逻辑serivce层。 所以SSH框架的流程大致 是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)struts 负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的 依赖和强,属于耦合。 这时,使用spring框架就起到了控制Action对象(Strus中的)和 Service类的作用,两者之间的关系就松散了,Spring的Ioc机制(控制反转和依赖注入)正 是用在此处。 Spring的Ioc(控制反转和依赖注入) 控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直 接操控。 依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注 入到组件之中。 从上面我们不难看出:从头到尾Action仅仅是充当了Service的控制工具,这些具体的 业务方法是怎样实现的,他根本就不会管,也不会问,他只要知道这些业务实现类所提供的 方法接口就可以了。 而在以往单独使用Struts框架的时候,所有的业务方法类的生命周期, 甚至是一些业务流程都是由Action来控制的。 层与层之间耦合性太紧密了,既降低了数据访 问的效率又使业务逻辑看起来很复杂,代码量也很多。 ,Spring容器控制所有Action对象和 业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦, 使程序运行起来效率更高,维护起来也方便。 使用Spring的第二个好处(AOP应用): 事务的处理: 在以往的JDBCTemplate中事务提交成功,异常处理都是通过Try/Catch 来完成,而在 Spring中。 Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能, 包括异常时事务回滚,操作成功时数据提交等复杂业务功能。 这都是由Spring容器来管理, 大大减少了程序员的代码量,也对事务有了很好的管理控制。 Hibernate中也有对事务的管 理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成。 而Spring对 SessionFactory配置也进行了整合,不需要在通过来对 SessionaFactory进行设定。 这样的话就可以很好的利用Sping对事务管理强大功能。 避免 了每次对数据操作都要现获得Session实例来启动事务/提交/回滚事务还有繁琐的 Try/Catch操作。 这些也就是Spring中的AOP(面向切面编程)机制很好的应用。 一方面使 开发业务逻辑更清晰、专业分工更加容易进行。 另一方面就是应用Spirng AOP隔离降低了 程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。
TcpClient 由于目标机器积极拒绝,无法连接

TCP不向UDP是无连接通信,TCP是有连接的。 你是从网上找的代码吧。 查看你的服务器端代码,出现这个提示,说明你的监听信道已经被占用。 也许是你客户端在退出时没有向服务器发送退出请求,又或者发送了,但服务器端并没有进行相应的处理。 再补充一点,如果你的服务器端是通过路由连接外网的话,那你直接输入外网的地址和你机子上实际的地址是不一样的。 这涉及到地址映射的问题。 比如两台机子通过一个IP上网那么,外网端口是由路由来分配的,这样你内网开的〔192.168.1.1〕端口到了外网就可能是〔外网IP〕。 这就要进行nat穿透了,也就是常说的打洞。
发表评论