通过登录案例实现三大框架之间的整合,登录功能是任何系统和软件必不可少的一个模块,然而通过这个模块来认识这些复杂的框架技术,理解数据流向和整个设计思路是相当容易的。只有在掌握了这些小模块的应用后,才能轻松的去研究和设计出更有创意的,更加严密的系统。

本人通过学习,实现了这个小功能,现在将实现思想和过程总结如下。希望各位大神朋友多多审查,有什么不到位的地方,请通过邮件告诉我(it_red@sina.com),在此表示感谢;新手朋友,我相信这个例子会是你进入框架领域的第一个完整的DEMO。当你部署成功后,你一定会相当自豪的,同时也有了学习更深知识的信心,如果你还有什么不明白的或者需要该DEMO的源码,请留言或者发邮件告诉我,我们共同进步。

注意搭建这个案例的框架版本:struts 2.3.4     Hibernate 3.0      Spring 3.1.1

数据库设计:id int;username varchar(11);password varchar(11)

一.首先为这个demo添加spring核心容器:

  1. 鼠标右击项目,[MyEclipse]-----[Add Spring Capabilities…],在弹出的框中选择前3个,然后就是下一步,finish。

2.  完成后,会在项目工程目录src下出现一个applicationContext.xml文件,这就是spring的配置文件,而且我们可以通过这个配置文件将Hibernate的配置加载到applicationContext.xml这个配置文件中。(附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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property> <!-- 需要自己添加的映射文件 -->
<property name="mappingResources">
<list>
<value>com/red/login/vo/User.hbm.xml</value>
</list>
</property> <property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
</bean>
<!-- 自己需要配置 -->
<bean id="baseDAO" class="com.red.login.dao.BaseDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userDAO" class="com.red.login.impl.UserDAO" parent="baseDAO"></bean>
<bean id="login" class="com.red.login.action.LoginAction"></bean>
</beans>

二.添加Hibernate并并持久化User表:

  1. 鼠标右击项目,[MyEclipse]---[Add Hibernate Capabilities…],版本选择Hibernate3.3,方框选择前两个,然后就是下一步,选择用Spring的配置文件进行SessionFactory的配置;这样生成的文件中就没有了hibernate.cfg.xml,而是直接将配置写入了applicationContext.xml这个文件中;

2.根据提示填写数据库驱动的相关数据:Driver,url,class,Username,Password等信息;

3. 提示是否创建SessionFactory类,由于这个程序Spring注入sessionFactory,所以不用创建,取消方框中的对勾选项;

4.finish完成。

5.添加User对象和映射文件:(附User.java,User.hbm.xml的源码)

package com.red.login.vo;

/**
* 定义实体bean
* @author Red
* Email:it_red@sina.com
*/
public class User { private int id;
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User() {
// TODO Auto-generated constructor stub
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = 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;
} }
<?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="com.red.login.vo.User" table="user" catalog="test">
<id name="id" type="int">
<column name="id"></column>
<generator class="native"></generator>
</id>
<property name="username" type="string">
<column name="username" not-null="true"></column>
</property>
<property name="password" type="string">
<column name="password" not-null="true"></column>
</property>
</class> </hibernate-mapping>

三.加载并配置Struts框架:

  1. 加载Struts的jar包,添加Struts开发所必须的9个包就行了,另外加一个数据库的驱动包,为了配置要将Struts2 与Spring 集成的需要,添加一个struts2-spring-plugin-2.3.4.1.jar包;
  2. 配置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"> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</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> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

3.  创建struts.properties:

在项目工程目录src下,新建一个文本文件,在其中添加一条代码:

  Struts.objectFactory=spring

并将该文件重命名为struts.properties,建立这个文件的目的是使struts2的类的生成交给Spring完成。

4.  创建struts.xml:在src目录下直接建立一个xml文件,名为:struts.xml; (附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>
<package name="struts" extends="struts-default">
<action name="login" class="com.red.login.action.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action> </package> </struts>

四.实现整合:

  1. 编写Action和DAO的代码,分别实现DAO层(即:BaseDAO.java和接口IUserDAO.java),UserDAO类(UserDAO.java),控制器Action(LoginAction.java),详细解释见源码注释;(附源码)
package com.red.login.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
/**
* 基类:通过session工厂来打开session
* @author Red
* Email:it_red@sina.com
*/
public class BaseDAO { private SessionFactory sessionFactory; public SessionFactory getSessionFactory() {
return sessionFactory;//返回session工厂
} public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession(){
Session session=sessionFactory.openSession();//打开session
return session;
} }
package com.red.login.dao;

import com.red.login.vo.User;
/**
* 定义接口
* @author Red
* Email:it_red@sina.com
*/
public interface IUserDAO { public User validateUser(String username,String password);
}
package com.red.login.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.classic.Session; import com.red.login.dao.BaseDAO;
import com.red.login.dao.IUserDAO;
import com.red.login.vo.User; /**
* 具体操作类
* @author Red
* Email:it_red@sina.com
*/
public class UserDAO extends BaseDAO implements IUserDAO{ public User validateUser(String username,String password){//实现接口中的方法
String sql="from User u where u.username=? and u.password=?";//HQL语句
Session session=(Session) getSession();
Query query=session.createQuery(sql);
query.setParameter(0, username);
query.setParameter(1, password);
List users=query.list();
if(users.size()!=0)
{
User user=(User) users.get(0);
return user;
}
session.close();
return null;
}
}
package com.red.login.action;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext; import com.opensymphony.xwork2.ActionSupport;
import com.red.login.dao.IUserDAO;
import com.red.login.vo.User;
import org.springframework.context.support.*;
import org.springframework.context.*;
import com.red.login.impl.*; /**
*登录Action
* @author Red
* Email:it_red@sina.com
*/ public class LoginAction extends ActionSupport{ private User user; @Override
public String execute() throws Exception {
// TODO Auto-generated method stub
boolean validated=false;
//指明applicationContext的位置
ApplicationContext context=new FileSystemXmlApplicationContext("file:H:/EB/20140420_SSH_login/src/applicationContext.xml"); IUserDAO userDAO=(IUserDAO)context.getBean("userDAO");
User u=userDAO.validateUser(user.getUsername(), user.getPassword());
if(u!=null)
{
validated=true; //登录验证
}
if(validated){
return SUCCESS;
}else{
return ERROR;
}
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} }

2.  注册组件:在applicationContext.xml中注册以上编写的各个组件:

       <bean id="baseDAO" class="com.red.login.dao.BaseDAO">

           <property name="sessionFactory" ref="sessionFactory"></property>

       </bean>

       <bean id="userDAO" class="com.red.login.impl.UserDAO" parent="baseDAO"></bean>

       <bean id="login"class="com.red.login.action.LoginAction"></bean>

<!-- 在bean,id="sessionFactory中"需要自己添加的源码,将User的映射文件添加到配置中-->

       <property name="mappingResources">

         <list>

            <value>com/red/login/vo/User.hbm.xml</value>

         </list>

       </property>

3.编写几个测试的JSP就可以直接运行了。

       注意:转载请标明出处,谢谢!

                                                                   ----------------EMAIL:it_red@sina.com

Struts+Hibernate+Spring实现用户登录功能的更多相关文章

  1. Struts2整合Hibernate3实现用户登录功能

    所用技术:struts2 ,hibernate,jsp,mysql 本DEMO仅仅实现用户登录功能,采用MVC思想,自己也觉得相对是比较简单,比较容易理解数据流向的一个例子,通过整合这个过程,能够清晰 ...

  2. 三大框架:Struts+Hibernate+Spring

    三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...

  3. 详谈Struts+Hibernate+Spring三大框架

    前言:对于JAVA WEB端的程序员来说,对JAVA三大框架:Struts+Hibernate+Spring的了解必不可缺,下面详细谈谈 Java三大框架主要用来做WEN应用. 三大框架:Struts ...

  4. Struts+Hibernate+Spring面试题合集及答案

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 ...

  5. Struts+Hibernate+Spring面试题合集及答案(转)

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring 面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 ...

  6. 使用Struts框架,实现用户登陆功能

    前言:本篇文章是本人这周学习的一个小结,在自我总结的同时,希望也能够给其他同学带来一点帮助.本文主要知识是参照书本上的知识点以及网上其他博客文章,在上机操练后的所得,具体源码主要来自http://bl ...

  7. JavaWeb学习记录(六)——用户登录功能

    使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...

  8. 使用Struts1完成用户登录功能

    1.Struts框架 框架(framework):就是一系列代码和开发模式的整合,使用框架后,所有开发人员都会按照框架提供的规范进行开发,使代码更容易维护和扩展. 使用框架的优点: 1)   易于维护 ...

  9. 实现Web上的用户登录功能

    关于如何实现web上的自动登录功能 文章来源http://coolshell.cn/articles/5353.html Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能 ...

随机推荐

  1. MVVM框架中的一个非常重要的内容:数据双向绑定

    双向绑定的意思就是,如下图中,当在input框中输入字符时,红色框框中的字也会随之改变. input框中需要一个绑定:ms-duplex(即“双工绑定”),http://avalonjs.github ...

  2. Swift让编程更简单 人人都是开发者

    全称为苹果全球开发者大会的WWDC,每年的这个时候,都会如这段时间前后所举行的Google I/O 和微软的BUILD开发者会议一样,吸引全球科技媒体的目光.近几年来,因为在会上爆的猛料越来越多,“开 ...

  3. Android ExpandableListView

    ExpandableListView 结合SimpleExpandableListAdapter用法 最终实现效果: activity_main.xml <?xml version=" ...

  4. java日志框架slf4j与log4j

    日志记录自然是非常重要的,但恐怕能记住slf4j与log4j等日志框架配置的人就很少了,这个东西不难,只是配置好后很少会去动它,开发新项目一般也是从其他项目拷贝,或者参照文档 废话不多说,先说log4 ...

  5. IM系统中聊天记录模块的设计与实现

    看到很多开发IM系统的朋友都想实现聊天记录存储和查询这一不可或缺的功能,这里我就把自己前段时间为傲瑞通(OrayTalk)开发聊天记录模块的经验分享出来,供需要的朋友参考下. 一.总体设计 1.存储位 ...

  6. 【Java】ThreadLocal细节分析

    ThreadLocal通过中文解释就是线程本地变量,是线程的一个局部变量.根据哲学家黑格尔“的存在即合理”的说法,ThreadLocal的出现肯定是有它的意义,它的出现也是因为多线程的一个产物.Thr ...

  7. 《你必须知道的.NET》读书笔记:从Hello World认识IL

    通用的语言基础是.NET运行的基础,当我们对程序运行的结果有异议的时候,如何透过本质看表面,需要我们从底层来入手探索,这时候,IL便是我们必须知道的基础. 一.IL基础概念 1.1 什么是IL? IL ...

  8. Java实现敏感词过滤

    敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...

  9. Kinect for Windows SDK 1.8的改进及新特性

    今年3月, 微软推出了Kinect for Windows SDK 1.7 更新,包括了手势识别 Kinect Interactions 和实时 3D 建模 Kinect Fusion 两项新技术. ...

  10. php json与xml序列化/反序列化

    在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...