SSH(Struts、Spring、Hibernate)三大框架整合
1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增)

2. 导入jar包(struts、hibernate 和 spring)

3. 注册页面reg.jsp,将表单的 action 属性设置为 handleAction,input 元素的 name 属性值加上前缀“user.”,如user.username
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding= "UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org
/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>账号注册</title>
</head>
<body>
<form action="handleAction" method="post">
账    号:<input name="user.username"/><br/> <br/>
密    码:<input type="password" name="user.password"/><br/> <br/>
<input type="submit" value="注册"/> <input type="submit" value="登录">
</form>
</body>
</html>
4.数据处理及输出页面handledata.jsp,当Action中返回的user对象为空时,页面输出“注册失败”,不为空时输出注册信息
<%@page import="java.sql.*"%>
<%@page import="indi.wt.ssh.pojo.*"%>
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>数据处理</title>
</head>
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
<%
User user = (User) request.getAttribute("user");
if (user != null) {
out.print("<p>恭喜你,注册成功!以下是你的注册信息:</>");
out.print("<p>账号:" + user.getUsername() + "</>");
out.print("<p>密码:" + user.getPassword() + "</>");
} else {
out.print("<p>注册失败!</>");
}
%>
</body>
</html>
5.实体层:根据数据库表结构生成 User 类,并生成对应字段的 set 和 get 方法(id为主键,生成策略为自动增长,username和password为属性)-> 加hibernate注解如下
package indi.wt.ssh.pojo; import javax.persistence.*;
import org.hibernate.annotations.Where; @Entity
@Table(name="user_tb")
@Where(clause = "")
public class User {
@Column(name="username")
private String username;
@Column(name="password")
private String password;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //主键生成策略
private int id; public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
6. 数据访问层,加入insertUser和getUser方法
package indi.wt.ssh.dao; import indi.wt.ssh.pojo.User; import org.hibernate.*;
import org.hibernate.cfg.*; public class UserDao {
public int insertUser(User user) {
//System.out.println("insertUser");
Configuration config = new Configuration().configure();
SessionFactory sf = config.buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
sf.close();
return user.getId();
} public User getUser(int id) { User user = null;
Configuration config = new Configuration().configure();
SessionFactory sf = config.buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction(); Object obj = session.createQuery("from User u where u.id=" + id).uniqueResult();
tx.commit();
user = (User) obj; session.close();
sf.close();
return user;
}
}
7. Action层:注入User和UserDao对象 -> 生成相应地get和set方法 -> 重写execute方法
package indi.wt.ssh.action; import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport; import indi.wt.ssh.dao.UserDao;
import indi.wt.ssh.pojo.User; public class HandleDataAction extends ActionSupport { User user = null;
UserDao userDao = null; public UserDao getUserDao() {
return userDao;
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public String execute() {
if(userDao == null) System.out.println("userdao = null");
int id = userDao.insertUser(user);
System.out.println("id = "+id);
if (id > 0) {
ServletActionContext.getRequest().setAttribute("user",user);
return SUCCESS;
} else {
return "error";
} } }
8. 配置web.xml,加入Spring监听器和Struts过滤器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SSHIntegrationPrj</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<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>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
9. 配置struts文件struts.xml,放在src目录下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</global-results> <global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings> <action name="RegAction" >
<result>/reg.jsp</result>
</action> <action name="handleAction" class="indi.wt.ssh.action.HandleDataAction">
<result name="success">/handledata.jsp</result>
</action> </package> </struts>
10. 配置hibernate文件hibernate.cfg.xml,放在src目录下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库JDBC驱动类名 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/ssh_db</property>
<property name="connection.username">wt</property>
<property name="connection.password">123456</property> <!-- 数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- ddl语句自动建表 -->
<property name="hbm2ddl.auto">none</property>
<!--输出sql语句 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- 连接池配置 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="automaticTestTable">Test</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="c3p0.testConnectionOnCheckout">true</property>
<property name="c3p0.idleConnectionTestPeriod">18000</property>
<property name="c3p0.maxIdleTime">25000</property>
<property name="c3p0.idle_test_period">120</property> <!-- 注册ORM映射文件 -->
<mapping class="indi.wt.ssh.pojo.User"/>
</session-factory>
</hibernate-configuration>
11. 配置spring文件applicationContext.xml,放在web-inf目录下 (因UserDao和HandleDataAction之间存在依赖关系,故将到 dao 对象的配置放在前面。特别要注意的是,系统默认采用的自动装配策略是 byName 方式,所以此处 dao 的 id 值必须和 action 中的属性名一致,action 的 id 值要和 Struts.xml 文件中配置的 action 名一致)
<?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:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 配置一个 bean -->
<bean id="userDao" class="indi.wt.ssh.dao.UserDao"></bean>
<bean id="handleAction" class="indi.wt.ssh.action.HandleDataAction"></bean>
</beans>
SSH(Struts、Spring、Hibernate)三大框架整合的更多相关文章
- 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
		
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提 ...
 - [转] 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
		
hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6 ...
 - Struts,spring,hibernate三大框架的面试
		
Struts,spring,hibernate三大框架的面试 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3 ...
 - Struts,Spring,Hibernate三大框架的
		
1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持 ...
 - Struts2+Spring+Hibernate 三大框架的合并集成
		
这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样. 首先看一 ...
 - 用eclipse搭建SSH(struts+spring+hibernate)框架
		
声明: 本文是个人对ssh框架的学习.理解而编辑出来的,可能有不足之处,请大家谅解,但希望能帮助到大家,一起探讨,一起学习! Struts + Spring + Hibernate三者各自的特点都是什 ...
 - Struts2,Spring, Hibernate三大框架SSH的整合步骤
		
整合步骤 创建web工程 引入相应的jar包 整合spring和hibernate框架 编写实体类pojo和hbm.xml文件 编写bean-base.xml文件 <!-- 1) 连接池实例 - ...
 - ssh整合思想初步 structs2 Spring Hibernate三大框架各自要点
		
Web层用Structs2的action Service层用Spring的IoC和aop以及JdbcTemplate或者Transaction事务(创建对象及维护对象间的关系) Dao层用Hibern ...
 - java 的 struts2  Spring Hibernate 三大框架的整合
		
原理就不说了,直接上配置文件及代码,用来备用 首先,将三大框架所需要的jar包导入项目中 导入 struts2-spring-plugin-2.3.3.jar包 此包的作用是作为struts2 与 ...
 
随机推荐
- array_column 函数, 以及在PHP5.5之下的替代方法
			
array_column 函数, 是能够根据多维数组中共有的一个键值来提取多维数组中属于这个键的值 例如下面的数组: $test = array( 0 => array( 'id' => ...
 - The Two Routes CodeForces - 601A(水最短路)
			
一个完全图 1和n肯定有一条路 不是公路就是铁路 另= 另一个跑遍最短路即可 #include <bits/stdc++.h> #define mem(a, b) memset(a, ...
 - 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器
			
前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...
 - 【BZOJ2178】圆的面积并(辛普森积分)
			
[BZOJ2178]圆的面积并(辛普森积分) 题面 BZOJ 权限题 题解 把\(f(x)\)设为\(x\)和所有圆交的线段的并的和. 然后直接上自适应辛普森积分. 我精度死活一个点过不去,不要在意我 ...
 - 导致 KEIL error #20 的一种情况
			
> 描述 <+> 环境为 KEIL5.20 & STM32F429工程,平台为 win10 <+> 结构体原形如下 @File <A.h> #incl ...
 - CJB的大作
			
Description 给你一个长度不超过100的字符串.一共进行\(N\)次操作,第\(i\)次操作是将当前字符串复制一份接到后面,并将新的一份循环移位\(k_i\)(\(1 \le k_i \le ...
 - Mysql(三)约束
			
一.视图 视图是虚拟的数据表,本身不存储数据,而是提供数据的逻辑 展示. 1.创建视图 create view stu_view as select s1.id, s1.name, s2. ...
 - (转)丢掉鼠标吧,使用最好用的eclipse快捷键
			
背景:eclipse作为自己经常使用的一款开发工具,熟练运用,能够达到事半功倍的效果.下面这篇文章总结了一些平时经常要使用的快捷键,十分的方便. 介绍Eclipse快捷键的文章很多,但大多都不详细,且 ...
 - kubernetes 的pod控制器
			
转载于网络 pod是kubernetes的最小单元,自主式创建的pod删除就没有了,但是通过资源控制器创建的pod如果删除还会重建.pod控制器就是用于实现代替我们去管理pod的中间层,并帮我们确 ...
 - centos7+mysql5.7.11实现主从复制
			
1 首先检测当前的系统是否已经安装了MySQL yum list installed | grep mysql 如果有的话,删除 2 下载rpm库资源,在网页 https://dev.mysql. ...