第二阶段 ssh
同样使用 idea来创建,这次一样不引入 maven的概念,还是回顾为主,目的是了解spring的ioc机制
1)创建项目
File–>new project,然后左侧选择 Spring
勾选 create empty spring-config.xml,接着滚轮往下,选择struts2 和 hibernate
然后点击next,设置好项目名称后,结束
2)项目建好后,我们就开始来整合,先整合 hibernate吧,那我们先建个测试库
选择mysql
Create database demo;
Use demo;
CREATE TABLE userinfo (
id int(11) NOT NULL,
userName varchar(50) NOT NULL,
userPwd varchar(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后回到IDEA,选择最右侧的database(也可以从左下角的menu中进入)
进入database的界面后,选择+ ->database->MySQL
在弹出界面中输入内容
(其实,连接成功后,可以找到当前的mysql-connector.jar包)用以下方法:
在database面板上选中编辑,
在弹出界面上点击driver:mysql
然后点击右侧的加号
选择 customer jar,这时候,弹出的界面,就是jar包的位置,
当然,除了这个mysql-connector的jar包我们能这么找到,其他的jar,还要自己去找下,
本例子中,用到的jar包不多,但是spring-web.jar和strusts-spring-plugin.jar还是要下载的。
注意:看下 web.xml里面的StrutsPrepareAndExecuteFilter是不是路径错误,若是,去掉ng.
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
改为:
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
3)整合hibernate
选择左侧的persitence,右键选中项后选择 Generate persistence mapping->By Database Schema
在弹出界面配置好数据源和sessionFactory,但是这里会有选不中sessionFactory的问题,如图:
第4步中选择 session Factory Bean,无法选中,那么打开spring-coonfig.xml,手动建立一个SessionFactory的bean
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"/>
这样,再回到上图,就能选中sessionFactory了。好多bug
都配置好后,点击ok。
可以看到spring-config.xml中已经生成了相应的内容,但是 driver_class这里明显有错误,所以引入需要的jar包
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="annotatedClasses">
<list>
<value>com.hkjs.entity.UserinfoEntity</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/demo</prop>
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
</props>
</property>
</bean>
引入jar 包选择 File->project Structure,选择libraries
点击+号,选择 java,选择 找到的 my-connector-java.jar 还有 spring-web.jar以及struts2-spring-plugin.jar然后点击ok。
这样spring-config.xml中 jdbc driver class 就能找到了。接着补全sessionFactory的配置项,
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="annotatedClasses">
<list>
<value>com.hkjs.entity.UserinfoEntity</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.url">jdbc:mysql://localhost:3306/demo</prop>
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.username">root</prop>
<prop key="hibernate.connection.password">123456</prop>
<prop key="current_session_context_class">thread</prop>
<prop key="format_sql">true</prop>
<prop key="show_sql">true</prop>
<prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
接着改下entity中的错误(又是bug)
只需要 右键Persistence 就好
弹出界面中分配下数据源
这样 hibernate 就集成好了
4)集成struts
先修改web.xml 把spring 监听器和配置文件路径设置好
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-config.xml</param-value>
</context-param>
然后开始 添加 strutsAction,由于涉及到数据库,所以这里我们建立一套Action,Service 和 DAO,然后交给 Spring来做依赖注入
UserAction:
package com.hkjs.action;
import com.hkjs.entity.UserinfoEntity;
import com.hkjs.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<UserinfoEntity> {
private UserinfoEntity userinfoEntity=new UserinfoEntity();
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@Override
public UserinfoEntity getModel() {
return userinfoEntity;
}
public String register(){
if(userService.Register(userinfoEntity)){
return SUCCESS;
}else
return ERROR;
}
}
UserDao:
package com.hkjs.dao;
import com.hkjs.entity.UserinfoEntity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class UserDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public boolean register(UserinfoEntity user){
System.out.print("begin UserDao");
Session currentSession=sessionFactory.openSession();
Transaction transaction=currentSession.beginTransaction();
try{
currentSession.save(user);
transaction.commit();
return true;
}catch (Exception ex){
ex.printStackTrace();
transaction.rollback();
}finally {
currentSession.close();
sessionFactory.close();
}
return false;
}
}
UserinfoEntity:
package com.hkjs.entity;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name = "userinfo", schema = "demo")
public class UserinfoEntity {
private int id;
private String userName;
private String userPwd;
@Id
@Column(name = "id", nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Basic
@Column(name = "userName", nullable = false, length = 50)
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Basic
@Column(name = "userPwd", nullable = false, length = 50)
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserinfoEntity that = (UserinfoEntity) o;
return id == that.id &&
Objects.equals(userName, that.userName) &&
Objects.equals(userPwd, that.userPwd);
}
@Override
public int hashCode() {
return Objects.hash(id, userName, userPwd);
}
}
UserService:
package com.hkjs.service;
import com.hkjs.dao.UserDao;
import com.hkjs.entity.UserinfoEntity;
public class UserService {
UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public boolean Register(UserinfoEntity user){
System.out.println("begin UserService");
return userDao.register(user);
}
}
接下来配置srping-config.xml来实现依赖注入:
<bean class="com.hkjs.dao.UserDao" id="userDao">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean class="com.hkjs.service.UserService" id="userService">
<property name="userDao" ref="userDao"/>
</bean>
<bean class="com.hkjs.action.UserAction" id="userAction">
<property name="userService" ref="userService"/>
</bean>
然后在 web目录下添加 register.jsp 和 result.jsp
register.jsp
<%--
Created by IntelliJ IDEA.
User: XYZH
Date: 2019-07-02
Time: 18:10
To change this template use File | Settings | File Templates.
--%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Register</title>
</head>
<body>
<s:form namespace="/" theme="simple" method="POST" action="user_register">
请输入姓名:<input name="userName" type="text"><br>
请输入密码:<input name="userPwd" type="text"><br>
<input type="submit" value="提交 ">
</s:form>
</body>
</html>
</html>
result.jsp
<%--
Created by IntelliJ IDEA.
User: XYZH
Date: 2019-07-02
Time: 18:11
To change this template use File | Settings | File Templates.
--%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Result</title>
</head>
<body>
Result:<s:property value="result"/>
</body>
</html>
最后配置下 struts.xml 完成跳转配置。
<struts>
<package name="default" namespace="/" extends="struts-default">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="*_*" class="{1}Action" method="{2}">
<result name="success">result.jsp</result>
<result name="error">result.jsp</result>
</action>
</package>
</struts>
5)配置tomcat
Tomcat配置和上篇一致,就不再赘述了。