在IDEA中配置SSH环境
新建项目
在新建项目中选择
Spring
中的
Spring
、
Web
和
Hibernate
,设置为
稍后设置库
。
-
如果web中有
struts
选项直接选择,没有的话可以稍后设置。 -
如果左侧没有spring,可以按住
Ctrl
+
Alt
+
Shift
+
/
,选择弹出界面的第一个选项,找到
javaee.legacy.project.wizard
选中即可。
导入jar包
在项目中新建
lib
文件夹导入如图46个jar包,并添加为库。
配置数据库环境
创建一个数据库,添加一个person表如图的数据库环境。
配置Struts环境
配置 Struts 核心过滤器
在
web.xml
中配置struts核心过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置Struts2核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
添加 struts.xml 配置文件
在
src
中添加
struts.xml
文件,然后为struts添加文件集。
添加 log4j.properties 文件
在 Hibernate 解压包中的 project\etc 路径下找到 log4j.properties 的文件,并复制到 src 源文件夹中。打开并编辑后,如下所示。
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file myLog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=E:/myLog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout
配置Spring环境
添加 applicationContext.xml 文件
在
src
中添加
applicationContext.xml
文件,然后为spring添加应用程序上下文。
配置 Spring 的监听器和过滤器
在
web.xml
中配置Spring的监听器和过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置Struts2核心过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 添加过滤器,延迟session关闭 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate5.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
配置 Hibernate 环境
在
src
中添加
hibernate.cfg.xml
文件。
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">
jdbc:mysql://localhost:3306/filmsystem?serverTimezone=UTC
</property>
<property name="connection.driver_class">
com.mysql.cj.jdbc.Driver
</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
</session-factory>
</hibernate-configuration>
Spring 和 Hibernate 整合
创建实体类
package POJO;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = -3541561917509006050L;
private String id;
private String name;
public Person() {
}
public Person(String id,String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
创建映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="POJO.Person" table="person">
<id name="id" type="java.lang.String">
<column name="id" length="32" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="50" not-null="true" />
</property>
</class>
</hibernate-mapping>
编写 Spring 的配置信息
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 1.1确定文件位置 -->
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
<!-- 1.2配置hbm.xml映射文件,mappingDirectoryLocationd表示本地映射文件的目录 -->
<property name="mappingDirectoryLocations" value="classpath:POJO"/>
</bean>
</beans>
编写测试类
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import POJO.Person;
public class TestMerge {
ClassPathXmlApplicationContext ctx;
@Before
public void loadCtx() {
// 加载配置文件
ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
}
@Test
public void testHibernate() {
SessionFactory sf = (SessionFactory) ctx.getBean("sessionFactory");
Session session = sf.openSession();
Transaction transaction = session.beginTransaction();
session.save(new Person("1","用户1"));
transaction.commit();
session.close();
sf.close();
}
}
运行测试类
如图,测试成功!
Spring 与 Struts2 整合
实现 Service 的配置
创建接口
package service;
public interface PersonService {
public void say();
}
创建接口实现类
package service;
public class PersonServiceImpl implements PersonService{
@Override
public void say() {
System.out.println("Service say hello");
}
}
配置 Spring
在
applicationContext.xml
中配置
<bean id="PersonService" class="service.PersonServiceImpl"></bean>
验证配置
为了验证 Spring 的加载是否正确,可以在测试类 TestMerge.java 中创建一个名称为 testSpring 的方法进行测试。该方法代码如下所示
@Test
public void testSpring(){
PersonService ts = (PersonService)ctx.getBean("personService");
ts.say();
}
如图配置成功!
实现 Action 的配置
创建 Action
package action;
import com.opensymphony.xwork2.ActionSupport;
import service.PersonService;
public class PersonAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private PersonService personService;
public PersonService getPersonService() {
return personService;
}
public void setPersonService(PersonService personService) {
this.personService = personService;
}
public String execute() {
personService.say();
return SUCCESS;
}
}
配置 Struts2
<struts>
<package name="test-package" namespace="/" extends="struts-default">
<action name="person_*" class="action.PersonAction" method="{1}">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
配置 Action 的 Bean 信息
<bean id="personAction" class="action.PersonAction"></bean>
查看测试结果
启动项目后,运行jsp页面,如下图:
此时控制台输出
说明配置成功!
项目结构