SSH整合实例

Spring+Struts+Hibernate(一个实现用户注册的简单示例)

本示例是 Spring+Struts+Hibernate 整合来编写一个用户注册的简单示例 ,

项目名称为 mySSH,

示例中连接的数据库为 MySQL,

使用前应在 MySQL 中创建一个数据库: mySSH,mySSH 中创建数据库表 user,SQL

CREATE TABLE ‘user’(

‘id’ VARCHAR(32)NOT MULL,

’username’ VARCHAR(32) NOT NULL,

’password’ VARCHAR(32) NOT NULL,PRIMARY KEY (‘id’))

ENGINE=MYISAM; 示例的简单代码如下 :

< > mySSH/WEB-INF 目录下编写 web.xml

<? xml version = "1.0" encoding = "UTF-8" ?>

< web-app xmlns = "http://java.sun.com/xml/ns/j2ee"

xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"

version = "2.4"

xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee  

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

< servlet >

    < servlet-name > actionServlet </ servlet-name >

< servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >

    < init-param >

      < param-name > config </ param-name >

      < param-value > /WEB-INF/struts-config.xml </ param-value >

    </ init-param >

    < load-on-startup > 1 </ load-on-startup >

</ servlet >

< servlet-mapping >

    < servlet-name > actionServlet </ servlet-name >

    < url-pattern > *.do </ url-pattern >

</ servlet-mapping >

</ web-app >

< > mySSH/WEB-INF/jsp 目录下编写用户注册页面 regedit.jsp

<%@ page contentType = "text/html;charset=GBK" %>

< html >

< head >< title > Spring,Struts Hibernate 整合实例 </ title ></ head >

<%

   String msg=request.getAttribute( "msg" )== null ? "" :(String)request.getAttribute( "msg" );

%>

< body > <%= msg %>

   < form action = "/mySSH/regedit.do" method = "post" >

      用户名 : < input type = "text" name = "name" value = "${user.username }"/><br>

      密码 : < input type = "password" name = "password" value = "" />< br >

      < input type = "submit" name = "method" value = " 提交 " />

   </ form >

</ body >

</ html >

< > mySSH/WEB-INF/jsp 目录下编写用户注册成功页面 success.jsp

<%@ page contentType = "text/html;charset=GBK" %>

< html >

< head >< title > Spring,Struts Hibernate 整合实例 </ title ></ head >

< body >

    提交成功 : 你输入的用户名是 :${user.name }, 密码是 :${user.password }

</ body >

</ html >

< > com.gc.vo 包下编写 POJO---User.java

package com.gc.vo;

public class User {

    private String id ;

    private String username ;

    private String password ;

    public User(String username,String password){

       this . username =username;

       this . password =password;

    }

    public User(){

      

    }

    public String getId() {

       return id ;

    }

    public void setId(String id) {

       this . id = id;

    }

    public String getPassword() {

       return password ;

    }

    public void setPassword(String password) {

       this . password = password;

    }

    public String getUsername() {

       return username ;

    }

    public void setUsername(String username) {

       this . username = username;

    }  

}

< > com.gc.vo 包下编写映射文件 User.hbm.xml

<? xml version = "1.0" encoding = "UTF-8" ?>

<! DOCTYPE hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 2.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

< hibernate-mapping >

   < class name = "com.gc.vo.User" table = "user" >

      < id name = "id" type = "java.lang.String" >

        < generator class = "uuid.hex" ></ generator >

      </ id >

      < property name = "username"

                type = "java.lang.String"

                column = "username"

                not-null = "true"

                length = "32" >

      </ property >

      < property name = "password"

                type = "java.lang.String"

                column = "password"

                not-null = "true"

                length = "32" >

      </ property >

   </ class >

</ hibernate-mapping >

< > com.gc.dao 包下编写接口类 UserDAO.java

package com.gc.dao;

import com.gc.vo.*;

public interface UserDAO {

    // 新增用户

    public abstract void createUser(User user);

    // 修改用户

    public abstract void updateUser(User user);

    // 删除用户

    public abstract void deleteUser(User user);

    // 查询用户

    public abstract User queryUser(String name);

}

< > com.gc.dao.impl 包下编写接口类 UserDAO 的实现类 UserDAOImpl.java

package com.gc.dao.impl;

import com.gc.dao.UserDAO;

import com.gc.vo.User;

import java.util.ArrayList;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import org.springframework.orm.toplink.SessionFactory;

public class UserDAOImpl extends HibernateDaoSupport implements UserDAO{

    // 依赖注入 SessionFactory

    private SessionFactory sessionFactory ;

    // 定义查询 SQL 语气

    private String SQL = "from user u where u.username=?" ;

    // 新增用户

    public void createUser(User user){

       this .getHibernateTemplate().save(user);

    }

    // 修改用户

    public void updateUser(User user){

       this .getHibernateTemplate().update(user);

    }

    // 删除用户

    public void deleteUser(User user){

       this .getHibernateTemplate().delete(user);

    }

    // 查询用户

    public User queryUser(String name){

       List userList;

       if ( this .getHibernateTemplate().find( SQL , name)== null )

           userList= new ArrayList();

       else

           userList= this .getHibernateTemplate().find( SQL , name);

       return (User)userList.get(0);

    }

}

< > mySSH/WEB-INF 目录下编写 Struts 的配置文件 struts-config.xml

<? xml version = "1.0" encoding = "UTF-8" ?>

<! DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"

"http://struts.apache.org/dtds/struts-config_1_2.dtd" >

< struts-config >

<!-- 定义 formBean -->

< form-beans >

    < form-bean name = "user" type = "com.gc.vo.User" />

</ form-beans >

< action-mappings >

     < action path = "/regedit" type = "org.springframework.web.struts.DelegatingActionProxy" name = "user" >

         < forward name = "success" path = "WEB-INF/jsp/success.jsp" ></ forward >

        < forward name = "input" path = "WEB-INF/jsp/regedit.jsp" ></ forward >

     </ action >

     < action path = "/input" type = "org.apache.struts.actions.ForwardAction"

             parameter = "/WEB-INF/jsp/regedit.jsp" >

     </ action >

</ action-mappings >

<!-- 注册 Struts 插件 , Spring 相结合 -->

< plug-in className = "org.springframework.web.struts.ContextLoaderPlugIn" >

     < set-property property = "contextConfigLocation" value = "/WEB-INF/config.xml" />

    </ plug-in >

</ struts-config >

< > mySSH/WEB-INF 目录下编写 Spring 的配置文件 applicationContext.xml

<? xml version = "1.0" encoding = "UTF-8" ?>

<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/sring-beans.dtd" >

< beans >

< bean id = "regedit" class = "com.gc.service.impl.RegeditImpl" >

     < property name = "userDAO" >

        < ref local = "userDAO" />

     </ property >

</ bean >

< bean name = "/regedit" class = "com.gc.action.RegeditAction" >

      < property name = "regedit" >

         < ref bean = "regedit" />

      </ property >

</ bean >

< bean name = "/input" class = "com.gc.action.RegeditAction" >

     < property name = "regedit" >

        < ref bean = "regedit" />

     </ property >

</ bean >

<!-- 定义数据源 -->

< bean id = "dataSource"

     class = "org.apache.commons.dbcp.BasicDataSource"

     destroy-method = "close" >

     <!-- 设定驱动 -->

     < property name = "driverClassName" >

        < value > com.mysql.jdbc.Driver </ value >

     </ property >

     <!-- 设定 URL -->

     < property name = "url" >

        < value > jdbc:mysql://localhost:3306/mySSH </ value >

     </ property >

     <!-- 设定用户名 -->

     < property name = "username" >

        < value > tang </ value >

     </ property >

     <!-- 设定密码 -->

     < property name = "password" >

        < value > admin </ value >

     </ property >  

</ bean >

<!-- Hibernate 联系起来 -->

< bean id = "sessionFactory"

     class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >

     < property name = "dataSource" >

        < ref bean = "dataSource" />

     </ property >

     < property name = "mappingResources" >

        < list >

           < value > com/gc/vo/User.hbm.xml </ value >

        </ list >

     </ property >

     < property name = "hibernateProperties" >

        < props >

           < prop key = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >

           < prop key = "hibernate.show_sql" > true </ prop >

         </ props >

     </ property >

</ bean >

<!-- 进行事务处理 -->

< bean id = "transactionManager"

     class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >

     < property name = "sessionFactory" >

        < ref bean = "sessionFactory" />

     </ property >

</ bean >

<!-- 进行事务代理 -->

< bean id = "userDAOProxy"

     class = "org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >

     < property name = "transactionManager" >

        < ref bean = "transactionManager" />

     </ property >

     < property name = "target" >

        < ref local = "userDAO" />

     </ property >

</ bean >

< bean id = "userDAO" class = "com.gc.dao.impl.UserDAOImpl" >

     < property name = "sessionFactory" >

        < ref bean = "sessionFactory" />

     </ property >

</ bean >

</ beans >

< > com.gc.action 包下编写控制器 RegeditAction.java

package com.gc.action;

import com.gc.vo.User;

import com.gc.service.Regedit;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

public class RegeditAction extends Action{

    private Regedit regedit ;

    // 依赖注入

    public Regedit getRegedit() {

       return regedit ;

    }

    public void setRegedit(Regedit regedit) {

       this . regedit = regedit;

    }

    public ActionForward execute(ActionMapping mapping,

           ActionForm form,HttpServletRequest request,

           HttpServletResponse response) throws Exception{

       // 保存页面提交的用户信息

       getRegedit().saveUser((User)form);

       request.setAttribute( "user" ,(User)form);

       return mapping.findForward( "success" );

    }

}

< 十一 > com.gc.service 包下编写业务逻辑接口 Regedit.java

package com.gc.service;

import com.gc.vo.User;

public interface Regedit {

    // 保存用户

    public abstract void saveUser(User user);

}

< 十二 > com.gc.service 包下编写具体的业务逻辑类 RegeditImpl.java

package com.gc.service.impl;

import com.gc.dao.UserDAO;

import com.gc.service.Regedit;

import com.gc.vo.User;

public class RegeditImpl implements Regedit{

    private UserDAO userDao ;

    // 保存用户

    public void saveUser(User user){

       userDao .createUser(user);

    }

    // 修改用户

    public void updateUser(User user){

       userDao .updateUser(user);

    }

    // 修改用户

    public void deleteUser(User user){

       userDao .deleteUser(user);

    }

    // 查询用户

    public User queryUser(String username){

       return userDao .queryUser(username);

    }

    // 依赖注入

    public UserDAO getUserDao() {

       return userDao ;

    }

    public void setUserDao(UserDAO userDao) {

       this . userDao = userDao;

    }

}

# re: Spring+Struts+Hibernate(一个实现用户注册的简单示例)2007-08-21 11:01 | javapon

@杨爱友
Spring
Struts的结合是通过SpringDelegatingActionProxy,并在Struts的配置文件(步骤八)中注册SpringContextLoaderPlugIn插件,并且动作映射的type属性为org.springframework.web.struts.DelegatingActionProxy而不是实际的类的名称,并在Spring的配置文件中(步骤九)定义和Struts配置文件中动作映射对应的Bean.像在(步骤八)中定义< action path = "/regedit"...(步骤九)中定义< bean name = "/regedit"......
Spring
Hibernate的结合是通过IoCHibernate纳入Spring来进行管理,这在Spring的配置文件(步骤九)中可以看得出来,并由Hibernate来完成相应得数据库操作,只要是在面向对象设计和关系数据库间建立桥梁.
回复 更多评论

#
请问,我这两句会报错,是什么原因呢?[未登录]2007-08-30 11:33 | yuan

getRegedit().saveUser((User)form);
request.setAttribute( "user" ,(User)form);
报错:
cannot cast from ActionForm to User

回复 更多评论

# re: Spring+Struts+Hibernate(
一个实现用户注册的简单示例)2007-08-30 18:33 | 杨爱友

@yuan
不能直接从form转换成user对象,要new一个 user对象,然后把form里的数据setuser对象里再进行保存 回复 更多评论

# re: Spring+Struts+Hibernate(
一个实现用户注册的简单示例)2007-09-02 12:15 | javapon

@yuan
更好得解决方法是编写个VO,来为业务逻辑成和持久层间数据的交互 回复 更多评论

# re: Spring+Struts+Hibernate(
一个实现用户注册的简单示例)[未登录]2007-09-11 09:40 | aaron

com.gc.action 包下编写控制器 RegeditAction.java


getRegedit().saveUser((User)form);

request.setAttribute( "user" ,(User)form);

这两句我的也报错:
cannot cast from ActionForm to User
为什么楼主的不报错??

< form-beans >

< form-bean name = "user" type = "com.gc.vo.User" />

</ form-beans >
说明这个User就是一个VO对象啊


回复 更多评论

# re: Spring+Struts+Hibernate(
一个实现用户注册的简单示例)[未登录]2007-09-11 21:29 | javapon

com.gc.form包下再编写个ActionForm UserForm.java里面有3个属性和对应的get/set方法
com.gc.vo包下的User.java当作真正的交换数据的VO
配置文件修该一下
< form-beans >
< form-bean name = "user" type = "com.gc.form.UserForm" />
</ form-beans >
..........................................

com.gc.action 包下控制器 RegeditAction.java 需修改

//getRegedit().saveUser((User)form);
//request.setAttribute( "user" ,(User)form);

new 一个User对象,然后把UserForm里的数据get出来,setUser里面,然后再保存

UserForm userForm=(UserForm)form;
User user=new User();
user.setUsername(userForm.getUsername());
................................
.............................
...........................
getRegedit().saveUser(user);
......

 

SSH整合实例(1)
 
网上虽然有很多SSH整合的小例子,但很多程序都出现了不是这样,就是那样的错误。自己总结了一下,终于做出的Struts+Spring+Hibernate整合的小例子,也是最基础的SSH实例,虽然是小例子,但什么程序都是从基础的做起。如果你弄明白了这个小实例,相信你的SSH整合框架技术也会提高很多。

       在做本例前,需要熟悉对Struts,Hibernate的反向工程等的基本操作。

开发工具:MyEclipse+MySQL+Tomcat

说明:本实例是简单注册程序(只有两个属性)

数据库脚本:user.sql

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

`Id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(255) DEFAULT NULL,

`password` varchar(255) DEFAULT NULL,

PRIMARY KEY (`Id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
 


开发步骤:

一.项目搭建

1建立Web项目

   选择: Java EE 5.5

2添加Struts支持(项目右键àMyEclipse Struts Capabilities …)

       选择:

1)Struts specification: Struts 1.3

2)Base package for 那位classes:edu.syict.struts

3添加Spring支持(项目右键àMyEclipse Spring Capabilities …)

       选择:

1) Spring version:Spring 2.0

2) Select the libraries to add the buildpath:

Spring 2.0 AOP Libraries

Spring 2.0 Core Libraries

Spring 2.0 Persistence Core Libraries

Spring 2.0 Persistence JDBC Libraries

Spring 2.0 Web Libraries

       3) JAR Library Installation:

Copy checked Library contents to project folder (TLDs always copied)

       Next

4) Spring配置文件选择目录Folder:WebRoot/WEB-INF

Finish

4 添加Hibernate支持(项目右键àMyEclipse Hibernate Capabilities …)

       选择:

       1)Hibernate Specification:Hibernate3.1

       2)Select the libraries to ad to the buildpath:Hibernate 3.1 Core Libraries

3)JAR Library Installation:Copy checked Library Jars to project folder and add to build-path

Next

4)选择:Spring configuration file(applicationContext.xml) Next

       5)选择:Existing Spring configuration file

SessionFactory Id: sessionFactory àNext

       6)Bean Id:dataSource

DB Driver:选择配置好的Hibernate。àNext

       7)不建立SessionFactory(不选择Create SessionFactory class?)

       8)Finish。

二 数据库方面

       1)建立包edu.syict.pojo

Hibernate反向工程:

          选择下列内容:

Create POJO<>DB Table mapping information复选框

                     Create a Hibernate mapping file单选框

                     Update Hibernate configuration with mapping resource location复选框

            Java Data Object(POJO<>DB Table)复选框  

            其余的都不选择。àNext          

Id Generator:native àFinish


       2)新建接口:edu.syict.dao.UserDao.java (所在包:edu.syict.dao )

package edu.syict.dao;

import edu.syict.pojo.User;

public interface UserDao {

    public void save(User user);

}
 


       3)建立UserDao接口实现类edu.syict.dao.impl.UserDaoImpl

       类继承HibernateDaoSupport,接口继承UserDao

package edu.syict.dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import edu.syict.pojo.User;

public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

    public void save(User user) {

       try{

           this.getHibernateTemplate().saveOrUpdate(user);

       }catch(RuntimeException re){

           throw re;

       }

    }

}
 


三 建立JSP 页面,Action类

       1) 打开struts-config.xml配置文件:右键new àForm,Action and JSP

       2) User case:register

       Form Impl:Dynamic FormBean

       Properties:username password

       JSP:选择Create JSP form àNext

3) Action 默认就可以了 àFinish

4) 配置struts-config.xml文件,将Struts交给Spring管理

    a) 加入插件 (message-resources标记下)

      <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

         <set-property property="contextConfigLocation"

              value="/WEB-INF/applicationContext.xml" />

     </plug-in>
  b) 将Action类移交(message-resources标记上)

     <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

       struts-config.xml文件(全部)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">


<struts-config>

<form-beans >

    <form-bean name="registerForm" type="org.apache.struts.action.DynaActionForm">

      <form-property name="password" type="java.lang.String" />

      <form-property name="username" type="java.lang.String" />

    </form-bean>

</form-beans>


<global-exceptions />

<global-forwards />

<action-mappings >

    <action

      attribute="registerForm"

      input="/form/register.jsp"

      name="registerForm"

      path="/register"

      scope="request"

      type="edu.syict.struts.action.RegisterAction" />

</action-mappings>

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

<message-resources parameter="edu.syict.struts.ApplicationResources" />

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

    <set-property property="contextConfigLocation"

              value="/WEB-INF/applicationContext.xml" />

</plug-in>  

</struts-config>
 


5) register.jsp页面(WebRoot/form/register.jsp)

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>


<html>

    <head>

       <title>用户注册</title>

    </head>

    <body>

    SSH整合<br><hr>

    <h3>用户注册</h3>

       <html:form action="/register">

           用户名:<html:text property="username"/><html:errors property="username"/><br/>

           密&nbsp;&nbsp;&nbsp;&nbsp;码:<html:text property="password"/><html:errors property="password"/><br/>          

           <html:submit value="注册"/>&nbsp;&nbsp;&nbsp;&nbsp;<html:reset value="重置"/>

       </html:form>

    </body>

</html>
 


 

6)修改RegisterAction.java

package edu.syict.struts.action;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.DynaActionForm;


import edu.syict.dao.UserDao;

import edu.syict.pojo.User;


public class RegisterAction extends Action {

    //数据库Dao接口,并添加get方法,

    private UserDao dao;

    public void setDao(UserDao dao) {

       this.dao = dao;

    }  

    public ActionForward execute(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response) {

       DynaActionForm registerForm = (DynaActionForm) form;

       /*

       * 不做验证和跳转提示页面,只跳转到注册页

       * */

       //在控制台输出

       System.out.println(registerForm.get("username"));

       System.out.println(registerForm.get("password"));

      

       User user=new User();

       user.setUsername((String) registerForm.get("username"));

       user.setPassword((String) registerForm.get("password"));

       dao.save(user);//向数据库中保存信息

             

       return new ActionForward("/form/register.jsp");

    }

}
 
  

四 修改Spring配置文件applicationContext.xml      

       1)配置数据库UserDao

右键àSpringàNew Bean:

              Bean Id:dao

              Bean class:edu.syict.dao.UserDaoImpl

              PropertiesàAdd:Name:sessionFactory

                                   Reference:sessionFactory

          Finish

       2)配置Action(RegisterAction)

右键àSpringàNew Bean:

              Name(与上不同,上位Id):/register

              Bean class:edu.syict.struts.action.RegisterAction

              PropertiesàAdd:Name:userDao

                            Reference:dao

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"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


   <bean id="sessionFactory"

       class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       <property name="dataSource">

           <ref bean="dataSource" />

       </property>

       <property name="hibernateProperties">

           <props>

              <prop key="hibernate.dialect">

                  org.hibernate.dialect.MySQLDialect

              </prop>

           </props>

       </property>

       <property name="mappingResources">

           <list>

              <value>edu/syict/pojo/User.hbm.xml</value></list>

       </property>

    </bean>

    <bean id="dao" class="edu.syict.dao.UserDaoImpl">

       <property name="sessionFactory">

           <ref bean="sessionFactory" />

       </property>

    </bean>

    <!-- /register 与Action中的path相同 -->

    <bean name="/register"

       class="edu.syict.struts.action.RegisterAction">

       <!-- RegisterAction中住的DAO的名称 -->

       <property name="userDao">

           <!-- 上面数据库Bean的id -->

           <ref bean="dao" />

       </property>

    </bean>

</beans>
 


五 修改web .xml文件

       添加Spring提供的过滤器,并修改欢迎页面(form/register.jsp)

web.xml

 


<!-- Spring提供的过滤器_Start -->

<filter>

    <filter-name>encodingFilter</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>

    <init-param>

       <param-name>forceEncoding</param-name>

       <param-value>true</param-value>

    </init-param>

</filter>

 

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/applicationContext.xml</param-value>

</context-param>


<filter-mapping>

    <filter-name>encodingFilter</filter-name>

    <url-pattern>/*</url-pattern>

</filter-mapping>


<listener>

    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- Spring提供的过滤器_End -->

<!-- 欢迎页面 -->

   <welcome-file-list>

    <welcome-file>form/register.jsp</welcome-file>

</welcome-file-list>

</web-app>

 

SSH的整合使用 (2)
           
        开发工具:Eclipse3.1,MyEclipse4.0 ,Tomcat5.0.28,mysql-4.0.1
       
        开发步骤:
        1:创建web projectSSHlogin 加入struts1.2  
              
            创建loginForm选择DynaValidatorForm,加入password,username,创建jsp文件打上钩,将路径改为/login.jsp,然后下一步,改LoginAction的Input source改为/login.jsp,加入 <forward name="ok" path="ok.jsp" />点击完成
           
            完成后修改struts-config.xml文件加入
            <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
        </plug-in>
      拷贝validator-rules.xml和validation.xml到WEB-INF目录中   在validation.xml文件中加入
        <form-validation>
      <formset>
        <form name="loginForm">
         <field property="username" depends="required">
         <arg0 key="prompt.username" />
         </field>
         <field property="password" depends="required">
          <arg0 key="prompt.password" />
         </field>
        </form>
         </formset>
     </form-validation>
      validator-rules.xml文件直接考一个就行。
      编辑资源文件“ApplicationResources.properties”
    增加以下内容   
     prompt.username=User Name
     prompt.password=User Password
     errors.required={0} is required.
        
              
    修改LoginAction.java文件的execute方法,内容如下
    public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response) {
      DynaValidatorForm loginForm = (DynaValidatorForm) form;
      String username=loginForm.getString("username");
      String password=loginForm.getString("password");
      if(username.equals("test")||password.equals("test")){
       return mapping.findForward("indexGo");
      }else{
       return mapping.getInputForward();
      }
     }
   好了,现在可以启动Tomcat进行测试了如果不输入任何数据而直接提交表单的话就可以看到效果了。

   好了,如果没有什么问题的话就继续往下看吧,如果有问题的话就得往上看了^_^
  
   2:加入Spring框架
    在这里我将Spring所有的包全部加载进去,因为我还不知道具体用到哪些类,全部加进去方便点

    单选框选第二个,这样的话所有的类库和标签等都将拷贝到项目中去,这样方便以后的布署
    下一步后是创建配置文件,将文件放到“WebRoot/WEB-INF”目录下,文件名称为“applicationContext.xml”
   
    
    配置struts-config.xml文件,添加(spring)的插件
    
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
      </plug-in>
    
     
    修改LoginAction配置
    
    原:
    <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          validate="true"
          type="com.test.struts.action.LoginAction" >
       <forward name="ok" path="ok.jsp" />
        </action>
    
      </action-mappings>
    
    改为:
    <action
          attribute="loginForm"
          input="/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          validate="true"
          type="org.springframework.web.struts.DelegatingActionProxy">
          <forward name="ok" path="ok.jsp" />
        </action>
      </action-mappings>
    

    这里将使用spring的代理器来对Action进行控制
      
    当提交到/login.do是将控制权交给了spring,然后由spring来决定是否转回到struts的Action

    现在来配置spring
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " http://www.springframework.org/dtd/spring-beans.dtd">
    
    <beans>
     <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean>
    </beans>
    
           好了,现在可以启动Tomcat进行测试了如果没有什么问题的话就继续往下看吧,如果有问题的话就得往上看了^_^    
  
  
   3:创建Hibernate框架        
              
           建立数据库在 这里我使用的是mysql4.1.18

    CREATE TABLE `user` (
      `ID` int(11) NOT NULL auto_increment,
      `USERNAME` varchar(50) NOT NULL default '',
      `PASSWORD` varchar(50) NOT NULL default '',
      PRIMARY KEY   (`ID`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    
    添加记录 insert into user (USERNAME,PASSWORD) values ('test','test')
                 
   在配置界面中配置数据库的连接部份,重要的是点击链接将jdbc驱动拷贝到lib目录中
   使用MyEclipse的数据Database Explorer工具创建User.hmb.xml、AbstractUser.java、User.java映射文件               
     
       创建UserDAO.java、UserDAOImp.java
    UserDAO.java:
   
    public interface UserDAO {
   
       public abstract boolean isValidUser(String username, String password);
   
    }   
   
    UserDAOImp.java:
   
    import java.util.List;
   
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
   
    public class UserDAOImp extends HibernateDaoSupport implements UserDAO {
   
     private static String hql = "from User u where u.username=? and password=?";
   
     public boolean isValidUser(String username, String password) {
   
      String[] userlist=new String[2];
      userlist[0]=username;
      userlist[1]=password;
   
      List userList = this.getHibernateTemplate().find(hql,userlist);
   
      if (userList.size() > 0) {
   
       return true;
   
      }
   
      return false;
   
     }
   
    }

   
    
    修改LoginAction.java文件,使用userDao的方法来进行用户验证
    package com.test.struts.action;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.apache.struts.validator.DynaValidatorForm;
    
    import com.test.UserDAO;
   
    public class LoginAction extends Action {
   
     private UserDAO userDAO;
    
     public UserDAO getUserDAO() {
      return userDAO;
     }
    
     public void setUserDAO(UserDAO userDAO) {
      this.userDAO = userDAO;
     }
    
     public ActionForward execute(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response) {
      DynaValidatorForm loginForm = (DynaValidatorForm) form;
      // TODO Auto-generated method stub
      String username = (String) loginForm.get("username");
      String password = (String) loginForm.get("password");
      loginForm.set("password", null);
      if (userDAO.isValidUser(username,password)) {
       return mapping.findForward("ok");
      } else {
       return mapping.getInputForward();
      }
     }
    }
              
              
   4.现在剩下最后的spring配置了
           <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
   
    <beans>
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
      <property name="driverClassName">
       <value>com.mysql.jdbc.Driver</value>
      </property>
      <property name="url">
       <value>jdbc:mysql://localhost/test</value>
      </property>
      <property name="username">
       <value>root</value>
      </property>
      <property name="password">
       <value>lxl</value>
      </property>
     </bean>
    
     <!-- 配置sessionFactory, 注意这里引入的包的不同   -->
     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
      <property name="dataSource">
       <ref local="dataSource" />
      </property>
      <property name="mappingResources">
       <list>
        <value>com/test/Hibernate/User.hbm.xml</value>
       </list>
      </property>
      <property name="hibernateProperties">
       <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.show_sql">true</prop>
       </props>
      </property>
     </bean>
    
     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <property name="sessionFactory">
       <ref local="sessionFactory" />
      </property>
     </bean>
    
     <bean id="userDAO" class="com.test.UserDAOImp">
      <property name="sessionFactory">
       <ref local="sessionFactory" />
      </property>
     </bean>
    
     <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
      <property name="transactionManager">
       <ref bean="transactionManager" />
      </property>
      <property name="target">
       <ref local="userDAO" />
      </property>
      <property name="transactionAttributes">
       <props>
        <prop key="insert*">PROPAGATION_REQUIRED</prop>
        <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
        <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
       </props>
      </property>
     </bean>
    
     <bean name="/login" class="com.test.struts.action.LoginAction" singleton="false">
      <property name="userDAO">
       <ref bean="userDAOProxy" />
      </property>
     </bean>
    </beans>
         现在可以进行测试了!

     在编写代码有配置内容时一定要注意 hibernate 和 hibernate3 ,这两个包的名字就只差一个字,千万不要有错,否则找错误可是很难的。
     注意要把spring-hibernate.jar或者把spring.jar加到工程lib里
        工程原码见SSHlogin   

 

SSH整合实例(3)

         所谓SSH就是spring+struts+hibernate的整合。他们各司其职:hibernate对数据持久化进行操作,struts对页面和Action进行交互与控制。而spring它就象一个轻量型的容器,它把struts和hibernate通过代理模式写入自己的XML中并对其进行管理。它包括IOC和AOP,它们实现了对对象的生成,组装和销毁。另外它还对事务,国际化,持久化的支持。
      
下面用一个用户登录的页面来进行一个小小的整合。
包结构:src
                   ---entity
                   ---dao
                   ---biz
                   ---sql
                  ----config
                   ---web
1.在entity包下建User.java
代码:package com.kettas.entity;

import java.io.Serializable;

public class User implements Serializable{
    private Integer uid;
    private String name;
    private String password;
   
   
    public Integer getUid() {
        return uid;
    }
    public void setUid(Integer uid) {
        this.uid = uid;
    }
    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;
    }
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }
    public User(String name, String password) {
        super();
        this.name = name;
        this.password = password;
    }
}
2.sql包中建数据库:user.sql
create table u_table(
    id number(7) primary key,
    name varchar2(15),
    password varchar2(15)
);

create sequence u_table_seq;
insert into u_table values(1001,'admin','admin');
insert into u_table values(1002,'liang','liang');
insert into u_table values(1003,'amanda','1234');
insert into u_table values(1004,'aaaa','1111');
3.entity包下建user.hbm.xml 其中代码:
<?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 package="com.entity">
    <class name="User" table="u_table">
        <id name="uid" column="id">
            <generator class="sequence">
                <param name="sequence">u_table_seq</param>
            </generator>
        </id>
        <property name="name" column="name"></property>
        <property name="password"></property>
    </class>
</hibernate-mapping>
4.在dao和biz包中分别建立UserDao.java UserBiz.java 接口,具体实现略。
public interface UserDao {
    public void insert(User user);
    public void update(User user);
    public void delete(Integer id);
    public User queryById(Integer id);
    public List<User> queryAll(Page page);
    public User selectByName(String username);
    public User selectById(Integer id);
}
public interface UserBiz {
    public User login(String userName,String password);
}
5.index.jsp  ok.jsp  failed.jsp
index.jsp
<%@ page contentType="text/html; charset=utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <body>
        <h3 align="center">
            欢迎来到主页面
        </h3>
        <form action="<%=request.getContextPath()%>/login.do" method="post">
            <table align="center">
                <tr>
                    <td align="center">
                        用户名:
                    </td>
                    <td>
                        <input type="text" name="username" />
                    </td>
                </tr>
                <tr>
                    <td align="center">
                        密码:
                    </td>
                    <td>
                        <input type="password" name="password" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <input type="submit" name="submit">
                    </td>
                    <td>
                        <input type="reset" name="reset">
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>
6.下面该进行配置了
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>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>
        <property name="connection.username">system</property>
        <property name="connection.password">sa</property>
        <property name="connection.driver_class">
            oracle.jdbc.driver.OracleDriver
        </property>
        <property name="dialect">
            org.hibernate.dialect.Oracle9Dialect
        </property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="current_session_context_class">thread</property>

        <mapping resource="com/entity/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>
7.Struts方面:
   7.1 在web包下建UserAction.java

public class UserAction extends MappingDispatchAction {
    private UserBiz userBiz;

    public UserBiz getUserBiz() {
        return userBiz;
    }

    public void setUserBiz(UserBiz userBiz) {
        this.userBiz = userBiz;
    }
   
    public ActionForward login(ActionMapping mapping,ActionForm form,HttpServletRequest req,HttpServletResponse resp) throws IOException{
        String username= req.getParameter("username");
        String password = req.getParameter("password");
        User u = userBiz.login(username, password);
       
               
        if(u!=null &&username.equals(u.getName()) && password.equals(u.getPassword())){
            req.getSession().setAttribute(username, u);
            return mapping.findForward("ok");
           
        }else{
            return mapping.findForward("ff");
        }
    }
}
  7.2 在在WEB-INF下建立web.xml
    <servlet>
      <servlet-name>action</servlet-name>
      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
      <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
      </init-param>
      <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>action</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
7.3 在在WEB-INF下建立stuts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
    <action-mappings>
        <action path="/login"
            type="org.springframework.web.struts.DelegatingActionProxy"
            parameter="login">
            <forward name="ok" path="/ok.jsp" />
            <forward name ="ff" path="/failed.jsp"/>
        </action>
    </action-mappings>
</struts-config>

8.spring方面
8.1 对spring:在config包下建立bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >
<beans>
    <bean id="factory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation">
            <value>classpath:Hibernate.cfg.xml</value>
        </property>
    </bean>
    <bean id="template" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory">
            <ref bean="factory"/>
        </property>
    </bean>
    <bean id="basicdao" class="com.dao.BasicDao" abstract="true">
        <property name="template">
            <ref bean="template"/>
        </property>
    </bean>
    <bean id="userdao" class="com.dao.impl.UserDaoImpl" parent="basicdao"></bean>
    <bean id="dao" class="com.dao.impl.ManagerModelDaoImpl" parent="basicdao"></bean>
   
    <bean id="biz" class="com.biz.impl.ManagerModelBizImpl">
        <property name="dao">
            <ref bean="dao"/>
        </property>
   
    </bean>
   
   
    <bean id="ubiz" class="com.biz.impl.UserBizImpl">
        <property name="userDao">
            <ref bean="userdao"/>
        </property>
    </bean>
    <bean id="transaction" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="factory"/>
        </property>
    </bean>
    <bean id="interceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
        <property name="transactionManager">
            <ref bean="transaction"/>
        </property>
    </bean>
    <bean id="proxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>*biz</value>
            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>interceptor</value>
            </list>
        </property>
    </bean>
    <bean name="/login" class="com.web.UserAction">
        <property name="userBiz">
            <ref bean="ubiz"/>
        </property>
    </bean>
</beans>
  8.2 web.xml 添加如下代码:
<listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/classes/com/config/bean.xml</param-value>
  </context-param>
最后编译成功运行。  
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值