引点科技私房菜专栏之spring集成struts和hibernate(代码片段)

「已注销」 「已注销」     2023-02-26     451

关键词:

Spring集成Struts和Hibernate


文章目录

Spring,Struts,Hiberbate基础已经学习完成。想自己把这三个框架集成一下,然后再写一个后台管理网站练练手。Spring的作用是依赖注入,而Struts是显示层的东西,这两个框架集成后是什么样子。一边学习,一边记录。上车。

Spring集成所需jar包

首先,Spring集成Struts,那么applicationContext.xmlstruts.xml,web.xml肯定是不能少的。前面两个是SpringStruts的配置文件,后面一个是整个web的全局配置文件。在每个配置文件中应该怎么配置,怎么相互关联呢。其实就是将Struts中指定的Action 类为Spring注入的类。

三大框架集成开发并不难,难的地方在于各个包的依赖要搞清楚,版本之间的差异也是一点。下面列出Spring集成Struts所依赖的包:

依赖包

此处所有依赖为Struts2.0Spring3.0。版本有点老,我用最新版的始终集成不正确。等搞好了再升级版本。

NumberPackagePlatformFunction
1commons-fileupload-1.2.2.jarcommon文件上传功能
2commons-io-2.0.1.jarcommon
3commons-lang-2.5.jarcommon
4commons-logging-1.1.1.jarcommon日志
5freemarker-2.3.16.jarStruts模版引擎
6javassist-3.11.0.GA.jarcommon动态编程
7ognl-3.0.1.jarcommon表达式语言,提供属性,方法调用
8org.springframework.asm-3.1.1.RELEASE.jarspringSpring独立的asm程序,Spring2.5.6的时候需要asmJar 包3.0.6开始提供他自己独立的asmJar。暂时我自己也不懂这事干嘛的。
9org.springframework.beans-3.1.1.RELEASE.jarspringSpring IOC实现
10org.springframework.context-3.1.1.RELEASE.jarspringSpring提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等
org.springframework.context.support-3.1.1.RELEASE.jarspringSpring-context的扩展支持,用于MVC方面
12org.springframework.core-3.1.1.RELEASE.jarspringSpring 核心工具包
13org.springframework.expression-3.1.1.RELEASE.jarspringSpring表达式语言
14org.springframework.web-3.1.1.RELEASE.jarspringSpring Web工具包
15org.springframework.web.servlet-3.1.1.RELEASE.jarspring基于servlet的MVC实现
16struts2-core-2.2.3.1.jarstrutsStruts核心库
17xwork-core-2.2.3.1.jarstrutsxwork核心库
18struts2-spring-plugin-2.2.3.1.jarstrutsSpring与Struts相互集成
19antlr-2.7.2.jarcommon语言语法分析器
20aopalliance-1.0.jarcommon面向切面编程接口
21commons-dbcp.jarcommonDBCP数据库连接池
22commons-pool.jarcommonDBCP数据库连接池
23dom4j-1.6.1.jarhibernate灵活的xml框架
24hibernate-jpa-2.0-api-1.0.1.Final.jarhibernate注解使用类
25hibernate3.jarhibernate数据库核心包
26jta-1.1.jarhibernate分布式事务处理
27mysql-connector-java-5.1.18-bin.jarhibernatejdbc连接器
28org.springframework.jdbc-3.1.1.RELEASE.jarhibernatespring与jdbc集成
29org.springframework.orm-3.1.1.RELEASE.jarhibernate数据库集成
30org.springframework.transaction-3.1.1.RELEASE.jarhibernate事务集成
31slf4j-api-1.6.1.jarcommon日志系统

集成

model层

  • 新建Usermodel,如下:
package com.action;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@javax.persistence.Table(name="user")
public class User implements Serializable

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name="id")
	public int id;
	@Column(name="name")
	public String name;
	@Column(name="password")
	public String password;
	
	public int getId() 
		return id;
	
	public void setId(int id) 
		this.id = id;
	

	public String getName() 
		return name;
	
	public void setName(String name) 
		this.name = name;
	
	public String getPassword() 
		return password;
	
	public void setPassword(String password) 
		this.password = password;
	
	@Override
	public String toString() 
		return "User [name=" + name + ", password=" + password + "]";
	

dao层

  • 新建dao接口:
package com.dao.impl;

import java.util.List;

import com.action.User;
import com.action.UserAction;

public interface UserDao 

	public void save(User action);
	
	public User getUser(int id);
	
	public void update(User action);
	
	public void delete(User userAction);
	
	public List<User> findByName(String name);

  • 实现dao接口
package com.dao.impl;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;

import com.action.User;
import com.action.UserAction;

public class UserDaoImpl implements UserDao 
	
	private SessionFactory sessionFactory;
	private HibernateTemplate mHibernateTemplate;
	
	public SessionFactory getSessionFactory() 
		return sessionFactory;
	

	public void setSessionFactory(SessionFactory sessionFactory) 
		this.sessionFactory = sessionFactory;
	

	public HibernateTemplate getHbernateTemplate() 
		if (mHibernateTemplate==null) 
			mHibernateTemplate = new HibernateTemplate(sessionFactory);
		
		return mHibernateTemplate;
	
	
	public void save(User action) 
		// TODO Auto-generated method stub
		getHbernateTemplate().save(action);
	

	public User getUser(int id) 
		// TODO Auto-generated method stub
		User userAction = getHbernateTemplate().get(User.class, new Integer(id));
		return userAction;
	

	public void update(User action) 
		// TODO Auto-generated method stub
		getHbernateTemplate().update(action);
	

	public void delete(User userAction) 
		// TODO Auto-generated method stub
		getHbernateTemplate().delete(userAction);
	

	@SuppressWarnings("unchecked")
	public List<User> findByName(String name) 
		// TODO Auto-generated method stub
		String queryString = "from User u where u.name like ?";
		return getHbernateTemplate().find(queryString);
	

	

view层

  • 显示以及action
/**
 * 
 */
package com.action;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.dao.impl.UserDaoImpl;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author kevin
 *
 */
public class UserAction extends ActionSupport 
		public String name;
		public String password;
		private UserDaoImpl userDao;
		
		public String getName() 
			return name;
		
		
		public void setUserDao(UserDaoImpl userDao) 
			this.userDao = userDao;
		
		
		public UserDaoImpl getUserDao() 
			return userDao;
		

		public void setName(String name) 
			this.name = name;
		
		
		
		public String getPassword() 
			return password;
		

		public void setPassword(String password) 
			this.password = password;
		

		@Override
		public String execute() throws Exception 
			// 不能直接new 得从applicationContext中获取
			HttpServletResponse response = ServletActionContext.getResponse();
			response.setContentType("text/xml;charset=UTF-8");
			User user = new User();
			user.name = name;
			user.password = password;
			userDao.save(user);
			response.getWriter().write(user.toString());
		return "success";
		

  • 第一个页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!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>Insert title here</title>
</head>
<body>
<h1>测试</h1>
<s:form action="user">
<s:textfield name="name" label="username"></s:textfield>
<s:textfield name="password" label="password"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
  • 第二个页面
<%@ 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>Insert title here</title>
</head>
<body>
<h1>妈的智障</h1>
$name 
$password 
</body>
</html>

配置文件

  • 添加全局web配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SpringSS</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>

  <listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>	
  </filter-mapping>
</web-app>
  • 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"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
		
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
		<property name="driverClassName">
			<value>com.mysql.jdbc.Driver</value>
		</property>
		<property name="url">
			<value>jdbc:mysql://localhost/spring</value>
		</property>
		<property name="username">
			<value>root</value>
		</property>
		<property name="password">
			<value>123456</value>
		</property>
	</bean>
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource">
			<ref local="dataSource"/>
		</property>
		<property name="annotatedClasses">
			<list>
				<value>com.action.User</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="show_sql">true</prop>
			</props>
		</property>
	</bean>
	<bean id="userDao" class="com.dao.impl.UserDaoImpl">
		<property name="sessionFactory">
			<ref local="sessionFactory"/>
		</property>
	</bean>
</beans>
  • Struts配置文件
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constant name="struts.objectFactory" value="spring" />
    <package name="default" extends="struts-default">
        <action name="user" class="userAction">
            <result name="success">/user.jsp</result>
        </action>
    </package>
</struts>

结果显示

  • 输入页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPrWb9Zw-1607859556037)(http://7xk0q3.com1.z0.glb.clouddn.com/2017012052053Screen Shot 2017-01-20 at 4.43.13 PM.png)]

  • 结果页面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4iYASCB6-1607859556047)(http://7xk0q3.com1.z0.glb.clouddn.com/2017012041414Screen Shot 2017-01-20 at 4.44.46 PM.png)]

  • 数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-878NsfVS-1607859556059)(http://7xk0q3.com1.z0.glb.clouddn.com/2017012082110Screen Shot 2017-01-20 at 4.45.07 PM.png)]

最后看起来,还是不难的嘛。其实UserDao可以抽象出来,只需要单次注入,等以后再完善。

引点科技私房菜专栏之spring-cloud服务治理

Spring-Cloud服务治理文章目录Spring-Cloud服务治理客户端搭建maven依赖配置注册中心搭建加入依赖创建服务中心和配置运行结果高可用注册中心服务的发现和消费添加消费者添加依赖配置添加主函数编写Controller启动< 查看详情

引点科技私房菜专栏之spring-boot学习

Spring-boot学习文章目录Spring-boot学习创建项目加入maven依赖创建Application创建接口试试看Mybatis支持添加依赖配置application.properties加入扫描器扫描mapper开发Controller开发Service结果Redis支持 查看详情

引点科技私房菜专栏之spring-bean生命周期和作用域以及实现方式

SpringBean生命周期和作用域以及实现方式文章目录SpringBean生命周期和作用域以及实现方式生命周期初始化实例化前指定初始化方法实现`InitializingBean`接口销毁使用`destroy-method`方法实现`DisposableBean`接口`SpringBean`的作用域配置示例 查看详情

引点科技私房菜专栏之第一个python小爬虫(代码片段)

文章目录第一个Python小爬虫分析网页编写爬虫结果第一个Python小爬虫分析网页打开网站猫眼电影TOP100,打开开发者工具,查看网页源代码,找到列表代码,也可以直接看下边的代码。<dd><iclass 查看详情

引点科技私房菜专栏之tigase开发环境搭建(代码片段)

文章目录Tigase开发环境搭建环境搭建源码下载数据库创建环境配置运行调试测试Tigase开发环境搭建[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L0NrHrGg-1607859695831)(http://7xk0q3.com1.z0.glb.clouddn.com/20170314... 查看详情

java私房菜专栏之设计模式

文章目录创建型模式:创建型模式概述:创建型模式系列文章推荐:结构型模式:结构型模式概述:结构型模式系列文章推荐:行为型模式行为型模式概述:下面是自己学习设计模式的时候做的总结,有些是自己的原创文章,有... 查看详情

java私房菜专栏之aqs

文章目录1AQS简单介绍2AQS原理2.1AQS原理概览2.2AQS对资源的共享方式2.3AQS底层使用了模板方法模式3Semaphore(信号量)-允许多个线程同时访问4CountDownLatch(倒计时器)4.1CountDownLatch的两种典型用法4.2CountDownLatch的使用示例4.3CountDownLatch的... 查看详情

java私房菜专栏之atomic原子类总结

文章目录1Atomic原子类介绍2基本类型原子类2.1基本类型原子类介绍2.2AtomicInteger常见方法使用2.3基本数据类型原子类的优势2.4AtomicInteger线程安全原理简单分析3数组类型原子类3.1数组类型原子类介绍3.2AtomicIntegerArray常见方法使用4引... 查看详情

java私房菜专栏之batj都爱问的多线程面试题(代码片段)

文章目录一面试中关于synchronized关键字的5连击1.1说一说自己对于synchronized关键字的了解1.2说说自己是怎么使用synchronized关键字,在项目中用到了吗1.3讲一下synchronized关键字的底层原理1.4说说JDK1.6之后的synchronized关键字底层做... 查看详情

鸟哥的linux私房菜之学习shellscript

运行程序的时候一般都是创建一个子程序来执行,所以子程序中的变量什么的在当前的shell下没法使用,但是如果使用source来执行就可以在当前shell下执行程序  查看详情

live555峰哥的私房菜-----计划任务(taskscheduler)探讨

计划任务(TaskScheduler)探讨 上一篇谈到SingleStep()函数会找到三种任务类型并执行之。这三种任务是:sockethandler,eventhandler,delaytask。 1、sockethandler保存在队列BasicTaskScheduler0::HandlerSet*fHandlers中;2、eventhandler保存在数组BasicTas 查看详情

数通面试私房菜之isis专题第一期:isis报文详解

前言华为HCIE-R&S认证是目前业界含金量很高的一门认证。整个考试包含3个部分,笔试、实验和面试。面试是其中最具挑战的部分,因为面试不仅仅考察知识点的掌握,也考察考生现场分析问题的能力和反应能力。所以大家在... 查看详情

如何集成 Spring Security 和 Struts2

】如何集成SpringSecurity和Struts2【英文标题】:HowtointegrateSpringSecurityandStruts2【发布时间】:2012-12-2907:56:43【问题描述】:我已经在谷歌上搜索了很多关于这个问题的内容,但到目前为止,我找不到任何关于集成Struts2和SpringSecurity... 查看详情

Struts + Spring + Hibernate 集成

】Struts+Spring+Hibernate集成【英文标题】:Struts+Spring+Hibernateintegration【发布时间】:2012-01-0105:53:23【问题描述】:例如,我们有下一组:Struts、Spring、Hibernate。你能帮我理解每个元素所扮演的角色吗?我知道Hibernate负责数据库上的... 查看详情

别人的linux私房菜(19)认识与分析日志文件

日志文件通常只有root可以读取,解决系统和网络方面的问题。/var/log/boot.log本次开机系统检测和启动硬件,和内核支持的相关功能的信息记录。/var/log/cron计划任务有没有被执行,是否正确编写等/var/log/dmesg开机时内核检测过程产... 查看详情

鸟哥的私房菜第0章

(1)计算机硬件的五大单元:输入单元、输出单元、CPU内部的控制单元、算术逻辑单元和内存五大部分。(2)CPU的种类:CPU的种类有两种,根据指令的执行时间和操作的复杂度分为精简指令集合复杂指令集。(3)一般的,文件... 查看详情

鸟哥的linux私房菜-----12学习使用shellscripts

查看详情

Spring security + Struts 1.2 集成

】Springsecurity+Struts1.2集成【英文标题】:Springsecurity+Struts1.2integration【发布时间】:2012-01-1806:53:54【问题描述】:我有一个使用struts1.2和ejb2.1的应用程序,现在我想在其中使用LDAP服务器添加spring安全性。SpringSecurity如何与struts1.2... 查看详情