`
太阳神喻
  • 浏览: 106745 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

s2sh整合的登陆

阅读更多

此次整合的版本是:struts2.1.8 + spring2.5.6 + hibernate3.3.2

一.先整合hibernate和spring:

hibernate所需要jar包:antlr-2.7.6.jar、commons-collections-3.1.jar、dom4j-1.6.1.jar、hibernate3.jar、javassist-3.9.0.GA.jar、jta-1.1.jar、slf4j-api-1.5.8.jar、log4j.jar、slf4j-log4j12-1.5.8.jar (slf4j接口以log4j形式实现),因为采用了注解的方式所以还需(annotation3.4的包):ejb3-persistence.jar、hibernate-annotations.jar、hibernate-commons-annotations.jar、hibernate-entitymanager.jar ,采用了c3p0连接池,还需要:c3p0-0.9.1.2.jar

spring所需要jar包:spring.jar、commons-logging.jar ,spring注解需要:common-annotations.jar ,aop需要:aspectjrt.jar、aspectjweaver.jar、cglib-nodep-2.1_3.jar

 

hibernate.cfg.xml配置:

<?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>
		<property name="dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
		<property name="connection.url">
			jdbc:mysql://localhost:3306/oa
		</property>
		<property name="connection.username">root</property>
		<property name="connection.password">root</property>
		<property name="connection.driver_class">
			com.mysql.jdbc.Driver
		</property>
		<property name="myeclipse.connection.profile">mysql5</property>
		<property name="show_sql">true</property>
		<property name="current_session_context_class">thread</property>
		<property name="hbm2ddl.auto">update</property>

		<!-- 首先说明我是使用c3p0连接池的方式 -->
		<property name="connection.provider_class">
			org.hibernate.connection.C3P0ConnectionProvider
		</property>
		<!-- 最大连接数 -->
		<property name="hibernate.c3p0.max_size">20</property>
		<!-- 最小连接数 -->
		<property name="hibernate.c3p0.min_size">2</property>
		<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
		<property name="hibernate.c3p0.timeout">5000</property>
		<!-- 最大的PreparedStatement的数量 -->
		<property name="hibernate.c3p0.max_statements">100</property>
		<!-- 每隔1000秒检查连接池里的空闲连接 ,单位是秒-->
		<property name="hibernate.c3p0.idle_test_period">1000</property>
		<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
		<property name="hibernate.c3p0.acquire_increment">2</property>
		<!-- 每次都验证连接是否可用 -->
		<property name="hibernate.c3p0.validate">true</property>
		
		<mapping class="com.fsj.model.User" />

	</session-factory>

</hibernate-configuration>

 applicationContext.xml配置如下:

<?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:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx
		   http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
		   
	<context:component-scan base-package="com.fsj" /><!-- 启用自动扫描 -->
	<!-- 基于hibernate注解的sessionFactory -->
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="configLocation" value="classpath:hibernate.cfg.xml">
		</property>
	</bean>
	<!-- 基于hibernate的事务管理器 -->
	<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!-- 采用注解形式的声明式事务管理 -->
	<tx:annotation-driven transaction-manager="txManager"/>
	
</beans>

 

User类采用hibernate的注解形式:

package com.fsj.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "_user")
public class User implements java.io.Serializable {

	private static final long serialVersionUID = -3564872478826196506L;	
	private Integer uid;
	private String uname;
	private String upwd;

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "u_id", unique = true, nullable = false)
	public Integer getUid() {
		return this.uid;
	}

	public void setUid(Integer UId) {
		this.uid = UId;
	}

	@Column(name = "u_name", length = 20)
	public String getUname() {
		return this.uname;
	}

	public void setUname(String UName) {
		this.uname = UName;
	}

	@Column(name = "u_pwd", length = 20)
	public String getUpwd() {
		return this.upwd;
	}

	public void setUpwd(String UPwd) {
		this.upwd = UPwd;
	}

}

DAO层的实现类为:

package com.fsj.dao.impl;

import java.util.List;

import javax.annotation.Resource;

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

import com.fsj.dao.UserDao;
import com.fsj.model.User;

@Repository("userDao")
public class UserDaoImpl implements UserDao {

	private HibernateTemplate hibernateTemplate;
	
	@Resource
	public void setSessionFactory(SessionFactory sessionFactory)
	{
		this.hibernateTemplate = new HibernateTemplate(sessionFactory);
	}
        @SuppressWarnings("unchecked")
	public User login(String name, String pwd) {		
		List<User> users= hibernateTemplate.find("from User where uname=? and upwd=?",new Object[]{name,pwd});		
		System.out.println(users.size()+"-------------");
		return (users==null || users.size()==0)?null:(User)users.get(0);
	}

}

 service层的实现类采用事务管理:

package com.fsj.sevice.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.fsj.dao.UserDao;
import com.fsj.model.User;
import com.fsj.sevice.UserService;

@Service("userService")
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;
    @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
    public User login(String name, String pwd) {
        return userDao.login(name, pwd);
    }

}

 

junit测试成功后,再加入struts2:

加入包:xwork-core-2.1.6.jar、struts2-core-2.1.8.jar、ognl-2.7.3.jar、freemarker-2.3.15.jar、commons-io-1.3.2.jar、commons-fileupload-1.2.1.jar、struts2-spring-plugin-2.1.8.jar

web.xml如下设置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	
	<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>
		
						
	<filter>
	        <filter-name>OpenSessionInViewFilter</filter-name>
	        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
	</filter>
	<filter-mapping>
	        <filter-name>OpenSessionInViewFilter</filter-name>
	        <url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<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>
		
	<filter>
		<filter-name>encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
		
</web-app>

 

struts.xml如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

	<!-- 指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 -->
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
	<constant name="struts.serve.static.browserCache" value="false" />
	<!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
	<constant name="struts.configuration.xml.reload" value="true" />
	<!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
	<constant name="struts.devMode" value="true" />
	<!-- 默认的视图主题 -->
	<constant name="struts.ui.theme" value="simple" />
	<!-- 把action对象交给spring创建 -->
	<constant name="struts.objectFactory" value="spring" />

	<package name="myDefault" extends="struts-default">
		<default-action-ref name="indexPage" />
		<global-results>
			<result name="exceptionPage">/WEB-INF/exceptionPage.jsp
			</result>
		</global-results>
		<global-exception-mappings>
			<exception-mapping result="exceptionPage" exception="java.lang.Exception" />
		</global-exception-mappings>		
		<action name="indexPage">
			<result>/login.jsp</result>
		</action>
	</package>

	<package name="user" namespace="/user" extends="myDefault">
		<!-- 这里面的class不是指完整类路径,而是指在spring中定义的bean的名称 -->
		<action name="*UserAction" class="userAction" method="{1}">
			<result name="success">/WEB-INF/user/loginSuccess.jsp</result>
			<result name="input">/login.jsp</result>
		</action>
	</package>

</struts>

 UserAction类:

package com.fsj.web;

import java.util.Map;

import javax.annotation.Resource;

import org.apache.struts2.interceptor.SessionAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.fsj.model.User;
import com.fsj.sevice.UserService;
import com.opensymphony.xwork2.ActionSupport;
@Controller("userAction")@Scope("prototype")
public class UserAction extends ActionSupport implements SessionAware{

	private Map<String, Object> session;
	private User user;
	@Resource
	private UserService userService;
	
	public String getResult() {
		return result;
	}

	public String login()
	{
		User logindUser = userService.login(user.getUname(), user.getUpwd());
		if(logindUser==null)
		{
			addActionError("用户名或密码错误,请重新输入。");
			return INPUT;
		}
		session.put("user", logindUser);
		return SUCCESS;
	}
		
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public void setSession(Map<String, Object> session) {
		this.session = session;
	}
}

与UserAction同一包中建立验证文件:UserAction-validation.xml

 

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE validators PUBLIC 
  		"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
  		"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
	<field name="user.uname">
		<field-validator type="requiredstring">
			<message>登录的用户名不能为空</message>
		</field-validator>
		<field-validator type="regex">
			<param name="expression">^[a-zA-Z][a-zA-Z0-9_]{3,14}$</param>
			<message>登录的用户名必须以字母开始,后面跟字母、数字或_,长度为4-15位</message>
		</field-validator>
	</field>
	
	<field name="user.upwd">
		<field-validator type="requiredstring">
			<message>登录的密码不能为空</message>
		</field-validator>
		<field-validator type="regex">
			<param name="expression">^[a-zA-Z0-9!@#]{4,15}$</param>
			<message>登录的密码可以由字母、数字和! @ # 组成,长度为4-15位</message>
		</field-validator>
	</field>
</validators>

 

 login.jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">   
    <title>登陆</title>
  </head>
  
  <body>
  	<s:head/>
  	<s:actionerror/>
        <s:fielderror />
    <s:form action="loginUserAction" namespace="/user" method="post">
    	<s:textfield label="用户名" name="user.uname" />
    	<s:password label="密码" name="user.upwd" />
    	<s:submit value="登陆" />
    </s:form>
  </body>
</html>
分享到:
评论
23 楼 hongshenghome 2010-11-02  
支持啊,加上jar下载地址岂不更加完美啊
22 楼 komeo 2010-10-02  
very good !
21 楼 java10000 2010-09-18  
讲解的很详细,但是LZ有没有注意过
web.xml的spring的encoding filter放在struts配置之后是不起作用的
其实在struts2.1.8配置struts的i18n就可以了
但是struts2.1.6存在i18n的bug,这个时候就可以配置spring的encoding filter
完成过滤
20 楼 oritenson 2010-09-01  
挺好的,现在正在学习呢.......
19 楼 aa00aa00 2010-08-18  
我自己,整合了工程S2SH,呵呵,还用上了分页,有时间传上来
18 楼 aa00aa00 2010-08-18  
用的比较多的是s1sh,这个s2,我还没怎么用过,先看看了,呵呵 ,等着整合一个SSI的,和S2SI的
17 楼 home309 2010-07-23  
真是辛苦了..感谢!!
16 楼 jilo88 2010-07-05  
多谢,例子看着实在明了,最关键是jar包的描述详细!最怕就是jar包的使用,多了又没用,少了又出问题!
15 楼 niitallen 2010-05-20  
我也来学习一下~~~
14 楼 hc759592426 2010-04-26  
学习一下。
13 楼 ruvuoai 2010-04-07  
不错!学习中
12 楼 石头城 2010-04-06  
不错的贴子。。。。
11 楼 yfnok 2010-04-05  
不错,支持lz分享
10 楼 太阳神喻 2010-04-02  
最近太忙了,已经很长时间没来看看了。请问6楼的朋友,过不去了是什么意思呢,报错了吗,报的什么错啊?
还有多谢各位提醒,以后写东西我会尽量上传可以下载的版本。
9 楼 chuoer008 2010-03-27  
好啊! 这个是我找了很久的…… 谢谢楼主!
8 楼 haray 2010-03-25  
为什么我的程序在这里的时候就过不去了呢?
List<User> users= hibernateTemplate.find("from User where uname=? and upwd=?",new Object[]{name,pwd});          
7 楼 sealv 2009-11-30  
给新工程做模板不错~楼主收拾一下发个包吧
6 楼 fishhappy365 2009-11-30  
学习学习学习学习学习学习
5 楼 nurenok 2009-11-30  
最好自己导包,整合的时候jar包冲突恶心人啊
4 楼 topvip2010 2009-11-30  
之前看到一个S1SH整合的,正想看看S2SH是怎样操作,谢谢了

相关推荐

    flex+S2SH整合登录

    【Flex+S2SH 整合登录详解】 Flex是一款强大的富客户端开发工具,常用于构建具有交互性和动态用户体验的Web应用程序。而S2SH是Struts2、Spring和Hibernate的组合,是Java Web开发中常见的MVC框架。整合Flex与S2SH...

    S2SH整合 S2SH整合

    S2SH整合指的是Struts2、Spring和Hibernate这三个开源框架的集成应用,它们分别是MVC(Model-View-Controller)架构中的控制层、业务层和数据持久层的优秀解决方案。在Java Web开发中,S2SH整合能提供一个强大、灵活...

    s2sh整合所需jar包大全

    **S2sh整合所需jar包大全** 在Java Web开发领域,Struts 2、Spring 和 Hibernate(简称S2SH)是一种常见的集成框架,用于构建高效、可维护的企业级应用程序。这个压缩包“s2sh整合所需jar包大全”提供了一整套支持...

    s2sh整合实例

    **S2SH整合详解** S2SH,全称为Struts2、Spring和Hibernate的整合,是Java Web开发中一种常见的框架组合,用于构建高效、可维护的Web应用程序。这三个框架分别负责不同的职责:Struts2作为MVC(模型-视图-控制器)...

    S2SH 整合 导入即可完整包

    **S2SH整合详解** S2SH,全称为Spring、Struts、Hibernate的组合,是经典的Java Web开发框架。这个框架结合了Spring的依赖注入、事务管理,Struts的MVC设计模式,以及Hibernate的对象关系映射(ORM)工具,为开发者...

    s2sh整合完全包

    【标题】"s2sh整合完全包"指的是一个包含了所有必要组件的压缩文件,用于支持基于Struts2、Spring和Hibernate(简称s2sh)的Web应用开发。这个包简化了开发过程,因为它包含了这三个框架的库文件,使得开发者无需...

    S2SH整合_注册_登录

    下面将详细讲解这个"S2SH整合_注册_登录"项目中的关键知识点。 首先,Struts2作为控制器层,负责处理HTTP请求,并将这些请求转发给相应的业务逻辑处理。在注册和登录功能中,Struts2配置文件(struts.xml)定义了...

    s2sh整合demo源码

    在S2SH整合中,Hibernate 3.5.6版本作为ORM(对象关系映射)工具,允许开发者通过对象模型来操作数据库,而无需编写SQL。它支持懒加载、缓存策略和复杂查询,使得数据库操作更加便捷。 **整合过程** S2SH的整合...

    s2sh整合详细jar

    本压缩包"**s2sh整合详细jar**"显然是一份包含了这三个框架核心组件的集合,旨在帮助初学者快速搭建SSH整合环境。以下是对每个框架及其整合细节的详细解释: 1. **Struts2**:Struts2是一个基于MVC设计模式的Java ...

    S2SH整合demo

    这三者结合,被称为S2SH整合,能够构建出高效、灵活且可维护的Java Web应用程序。 **Struts2框架**: Struts2是Struts1的升级版,它引入了拦截器(Interceptor)的概念,增强了动作(Action)与结果(Result)的...

    基于Annotation的s2sh整合配置实现分页功能

    基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能基于Annotation的s2sh整合配置实现分页功能

    s2sh整合实现增删改查源代码(带s2sh整合包)

    这个压缩包提供了实现增删改查功能的源代码,以及完整的S2SH整合包,使得开发者可以直接运行项目,无需从零开始配置环境。 **Struts2** 是一个基于MVC设计模式的Action驱动框架,它负责处理用户的请求,并通过...

    s2sh整合所需 辅助包

    s2sh整合 所需其他jar包 打包下载 spring-dao.jar mysql-connector-java-5.1.6-bin.jar commons-dbcp.jar cglib-nodep.jar

    S2SH整合完美教程

    【S2SH整合完美教程】 在Java Web开发中,Struts2、Spring和Hibernate的整合是常见的技术栈,被广泛用于构建MVC架构的应用程序。S2SH整合旨在实现业务逻辑与控制层、持久化层的高效协同,提高代码的可维护性和可...

    s2sh整合所有的jar包

    标题 "s2sh整合所有的jar包" 指的是将Struts、Spring和Hibernate这三种技术集成所需的Java档案(JAR)文件集合在一起,便于在项目开发中快速引用和使用。这种整合通常被称为SSH框架,它是Java Web开发中的一个流行...

    完整的S2SH框架整合, 带jar包

    这个“完整的S2SH框架整合,带jar包”资源包含了这些框架的核心库,以及可能的一个实例项目,旨在帮助开发者快速搭建和理解S2SH的应用。 1. **Struts**:Struts 是一个基于MVC设计模式的Web应用框架,主要用于控制...

    s2sh权限登录系统

    这个"**S2SH权限登录系统**"是将这三个框架整合起来,实现了一个具备用户权限管理功能的登录系统,包括了用户的身份验证、授权以及数据的分页显示等功能。 **1. Struts2:** Struts2是一个基于MVC设计模式的Action...

    S2SH整合的学生宿舍管理系统(对技术有一定的提高)

    【S2SH整合的学生宿舍管理系统】是一个针对Java开发者和学习者设计的项目,它结合了Struts、Spring和Hibernate三个框架,简称S2SH。这个系统不仅提供了对学生宿舍的全面管理功能,还能够帮助开发者提升自己的技能...

    S2SH整合+测试小例程

    在**S2SH整合**过程中,通常会将Struts2的动作类(Action)作为Spring的Bean,这样可以通过Spring的依赖注入来获取Hibernate的SessionFactory,从而进行数据库操作。同时,Struts2的拦截器可以与Spring的事务管理...

    s2sh整合,s2sh

    【s2sh整合详解】 `s2sh` 是一个常见的Web应用程序开发框架的简称,它结合了Struts、Spring和Hibernate这三个流行的开源Java框架。Struts提供了MVC(Model-View-Controller)架构,Spring提供了依赖注入(DI)和...

Global site tag (gtag.js) - Google Analytics