一、基础环境
1、Windows10、Java17、Maven3.8.8、Tomcat9.0.76、IDEA2022.3.3
2、已完成Maven项目的创建
2、已完成Struts2、Spring、Hibernate依赖配置
3、已完成实体类创建、Hibernate映射文件配置、第一种方法sessionFactory配置,并且以上配置已测试通过
4、已完成第二种方法数据源和会话工厂的配置、日志打印配置
5、已实现并配置DAO
6、已实现并配置SERVICE、事务管理配置
二、框架版本
struts2:2.5.31
spring:5.3.27
hibernate:5.6.15.Final
三、Struts的Action编写
1、创建action目录。
2、创建employeeAction类,定义类属性如:emp_no、cust_time、message,手动注入employeeService、employee,定义页面跳转方法queryInput、addInput,定义查询方法queryEmployeeByEmpNo,定义添加方法add。
3、创建属性的setter和getter,setter属性可从页面获取对象,getter属性可向页面传递对象。
4、手动注入setEmployeeService方法。
备注:
(1)、对象或属性的getter使其对view page提供有效的支持,属性的setter使得类可以自动接收view page传过来的值。
(2)、方法返回相应的字符串,字符串需与struts.xml中的name匹配,以跳转到对应的页面。
四、Struts.xml配置文件编写(指定URL、Java class、View page之间的关系)
1、为了方便IDEA创建struts.xml文件,在IDEA的插件中加载Struts2插件。
2、在resource包下使用快捷键“ALT+INSERT”创建struts.xml配置文件
3、配置文件中的参数
代码如下:
<struts>
<!-- 开启开发模式 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 字符编码 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 设置页面模式,控制struts标签不自动生成<tr><td>标签 -->
<constant name="struts.ui.theme" value="simple"></constant>
<!-- 动态方法调用,为true时,就可以在struts.xml配置“*”的通配符,来调用action里的方法 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="default" extends="struts-default">
<!-- 定义默认的action,在访问http://localhost:8081/时默认访问index,若不配置,则访问这个地址时会报错 -->
<default-action-ref name="index"></default-action-ref>
<!-- 开启全局动态方法支持的配置 -->
<global-allowed-methods>regex:*</global-allowed-methods>
<!-- specify the relationship between a URL, a Java class, and a view page -->
<!-- name:访问的action名称,不访问任何方法,直接跳转到index.jsp -->
<action name="index">
<result>/index.jsp</result>
</action>
<!-- name:访问的action名称,class:类路径和类名称,method:类中执行的方法 -->
<action name="query_input" class="demo.employee.action.EmployeeAction" method="queryInput">
<!-- 执行结果为query_input则跳转到query_input.jsp -->
<result name="query_input">/WEB-INF/page/query_input.jsp</result>
</action>
<action name="add_input" class="demo.employee.action.EmployeeAction" method="addInput">
<result name="add_input">/WEB-INF/page/add_input.jsp</result>
</action>
<action name="query" class="demo.employee.action.EmployeeAction" method="queryEmployeeByEmpNo">
<result name="query_success">/WEB-INF/page/employee_info.jsp</result>
</action>
<action name="add" class="demo.employee.action.EmployeeAction" method="add">
<result name="add_success">/WEB-INF/page/employee_info.jsp</result>
</action>
</package>
</struts>
五、web.xml文件中的配置
(1)、指定Spring配置文件的存放位置,若文件放置在/WEB-INF/目录下,且名称为applicationContext.xml,则可以不配置。
(2)、配置监听器。该监听器用于在web环境中启动Spring容器。
(3)、过滤器配置。该过滤器把一个Hibernate Session和一次完整的请求过程相绑定,解决了诸如延迟加载等问题。
注意:
(1)、该过滤器要配置在Struts2核心控制器之前。
(2)、若Spring中定义的SessionFactory Bean的id不是sessionFactory,则需要为该过滤器配置sessionFactoryBeanName参数。
1、Spring的配置
(1)、配置监听器。
(2)、Spring配置文件的存放位置。
参考官网的配置:
进入spring官网:https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-servlet.html
2、Hibernate的配置
(1)、openSessionInViewFilter过滤器配置。
3、Struts2的配置
官网参考地址:https://struts.apache.org/getting-started/how-to-create-a-struts2-web-application;
六、视图的整理
1、index.jsp页面改造
(1)要用到struts2的<s:>标签,需要在页面顶部page下引入标签库<%@ taglib prefix="s" uri="/struts-tags" %>。
(2)在页面增加“添加员工信息”、“员工信息查询”链接,以访问对应页面。
注:
(1)、直接使用action的name的方式时,需要在struts.xml中配置需要调用的方法。
(2)、使用actionName.method的方式时,不需要在struts.xml中配置需要调用的方法。
2、新增“添加员工信息”、“员工信息查询”页面。
3、新增employee_info.jsp页面
(1)、新增employee_info.jsp页面,通过<s:property>标签展示员工信息。
七、通过Maven使用jetty插件启动服务
1、通过Maven添加jetty插件
参考官网:https://www.eclipse.org/jetty/documentation/current/#jetty-maven-plugin
代码如下:
<!-- jetty插件 -->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.51.v20230217</version>
<configuration>
<httpConnector>
<port>8081</port>
</httpConnector>
</configuration>
</plugin>
2、配置IDEA的启动Configurations
3、启动服务
4、测试
4.1、主页
4.2、点击“员工查询”进入查询页面
4.3、输入员工编号查询信息
附1、Spring与Struts2集成步骤
附2、Spring与Struts集成的第二种方式
当struts.xml中class不使用路径加类名时,需要在spring的配置文件中配置对应的bean。
附3、基于SSH框架开发的步骤小结
1、导入相关的依赖
2、整合Spring与Hibernate
3、编写业务层、事务管理规则
4、整合Spring与Struts2
5、编写web.xml,测试