Struts2.2+Spring3.1+Hibernate3.6整合(登录示例及CRUD操作)

本文详细介绍了使用Struts2、Spring及Hibernate(SSM)框架整合的过程,包括配置文件设置、核心代码展示以及数据库交互等内容。

一运行环境: XP3+Myeclipse6.6+Tomcat7

二项目框架版本号:Struts2 version: 2.2.1.1,Spring version: 3.1,Hibernate version:3.6

项目所用jar文件如下图

三具体实现如下:

1 配置文件:

Web.xml

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

<web-app version="2.4"

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

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

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

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

 

    <context-param>

      <param-name>webAppRootKey</param-name>

      <param-value>s2sh.root</param-value>

     </context-param>

 

 

    <context-param>

        <param-name>

            contextConfigLocation

        </param-name>

        <param-value>

            classpath*:applicationContext.xml

        </param-value>

    </context-param>

   

    <context-param>

       <param-name>log4jConfigLocation</param-name>

       <param-value>/WEB-INF/classes/log4j.properties</param-value>

    </context-param>

   

     <context-param>

      <param-name>log4jRefreshInterval</param-name>

      <param-value>60000</param-value>

     </context-param>

     <context-param>

       <param-name>log4jExposeWebAppRoot</param-name>

       <param-value>false</param-value>

    </context-param>

   

    <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>   

   

    <listener>

       <listener-class>

           org.springframework.web.util.Log4jConfigListener

       </listener-class>

    </listener>

   

   

    <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>

    </filter>

   

    <filter-mapping>

        <filter-name>

            encodingFilter

        </filter-name>

        <url-pattern>

            /*

        </url-pattern>

    </filter-mapping>

   

    <filter>

        <filter-name>

            openSessionInView

        </filter-name>

        <filter-class>

            org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

        </filter-class>

    </filter>

   

    <filter-mapping>

        <filter-name>

            openSessionInView

        </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>

   

    <welcome-file-list>

        <welcome-file>

            index.jsp

        </welcome-file>

    </welcome-file-list>

</web-app>

 

Struts2.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="user" extends="struts-default">

        <action name="userAction" class="u">

            <result name="success">success.jsp</result>

           <result name="userList">userList.jsp</result>

           <result name="fail">fail.jsp</result>

           <result name="user">user.jsp</result>

        </action>  

    </package>

</struts>

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-3.0.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context-3.0.xsd

           http://www.springframework.org/schema/aop

           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

           http://www.springframework.org/schema/tx

           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

          

    <context:annotation-config />

    <context:component-scan base-package="com.liuzd.s2sh" />

 

    <bean

       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

       <property name="locations">

           <value>classpath:jdbc.properties</value>

       </property>

    </bean>

 

    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">

       <property name="driverClassName"

           value="${jdbc.driverClassName}" />

       <property name="url" value="${jdbc.url}" />

       <property name="username" value="${jdbc.username}" />

       <property name="password" value="${jdbc.password}" />

    </bean>

   

   

 

    <bean id="sessionFactory"

       class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

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

        <property name="packagesToScan">

           <list>

              <value>com.liuzd.s2sh.entity</value>            

           </list>

       </property>

       <property name="hibernateProperties">

           <props>

              <prop key="hibernate.dialect">

                  org.hibernate.dialect.Oracle10gDialect

              </prop>

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

              <prop key="format_sql">true</prop>

           </props>

       </property>

    </bean>

   

    <!-- spring管理sessionFactory的加一种方法 ,就是不删除hibernate.cfg.xml文件;

     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

      <property name="configLocation">

       <value>classpath:hibernate.cfg.xml</value>

      </property>

     </bean>

    -->

   

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">

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

    </bean>

   

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

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

 

</bean>

 

    <bean id="txManager"

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

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

    </bean>

 

    <aop:config>

       <aop:pointcut id="bussinessService"

           expression="execution(public * com.liuzd.s2sh.service.*.*(..))" />

       <aop:advisor pointcut-ref="bussinessService"

           advice-ref="txAdvice" />

    </aop:config>

 

    <tx:advice id="txAdvice" transaction-manager="txManager">

       <tx:attributes>

           <tx:method name="*" /> 

           <tx:method name="add*" propagation="REQUIRED"/>

           <tx:method name="del*" propagation="REQUIRED"/>

           <tx:method name="edit*" propagation="REQUIRED"/>

       </tx:attributes>

    </tx:advice>

</beans>

 

jdbc.properties属性文件如下:

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver

jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl

jdbc.username=liuzd

jdbc.password=liuzd

 

log4j.properties属性文件如下:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L-%m%n

log4j.appender.db=org.apache.log4j.FileAppender

log4j.appender.db.File=${s2sh.root}/WEB-INF/logs/ssh.log

log4j.appender.db.Append=true

log4j.appender.db.layout=org.apache.log4j.PatternLayout

log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}[%-5p][%c{1}]-%m%n

 

2 Java代码如下:

A WEB:

BaseAction Code:

 

import java.util.Map;

 

import javax.servlet.http.HttpServletRequest;

 

import org.apache.struts2.ServletActionContext;

import org.apache.struts2.interceptor.SessionAware;

 

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

 

publicclass BaseAction extends ActionSupport implements SessionAware{

   

    privatestaticfinallongserialVersionUID = 1L;

 

    publicvoid setSession(Map<String, Object> sessionMap) {      

      

    }  

   

    protected Map<String,Object> getSession(){

       return  (Map<String,Object>)ActionContext.getContext().getSession();

    }

   

    protected HttpServletRequest getRequest(){

       return ServletActionContext.getRequest ();

    }

}

 

UserAction Code:

 

import java.util.List;

 

import javax.annotation.Resource;

 

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Component;

 

import com.liuzd.s2sh.entity.User;

import com.liuzd.s2sh.service.UserService;

 

@Component("u")

@Scope("prototype")

publicclass UserAction extends BaseAction {

 

    privatestaticfinallongserialVersionUID = 1L;

 

    private UserService userService = null;

    private String message = null;

 

    private User user = null;

   

    private String action = null;

 

    public String getAction() {

       returnaction;

    }

 

    publicvoid setAction(String action) {

       this.action = action;

    }

 

    public User getUser() {

       returnuser;

    }

 

    publicvoid setUser(User user) {

       this.user = user;

    }

 

    @Override

    public String execute() throws Exception {

       System.out.println("user: "+user);

      

       User dbUser = this.userService.checkUserExits(user);

       if (null != dbUser) {

           message = "用户: " + user.getUsername() + "登录成功";

           System.out.println(message);

           getSession().put("sessionUser",dbUser);

           return userList();

       }

       message = "用户: " + user.getUsername() + "登录失败";

       return"fail";

    }

   

    public String loadUser(){

        action = "update";

        message = "编辑用户信息";

        User loadUser = new User();

        loadUser.setId(user.getId());

        user = this.userService.getUserByUid(loadUser);

        this.getRequest().setAttribute("myname","天涯海角");

        this.getSession().put("mysex", "");

        System.out.println("loaduser: "+user);      

        return"user";

    }

   

    public String addUser(){

        action = "add";    

        return"user";

    }

   

    public String saveUser(){

        this.userService.addUser(user);      

        return"user";

    }

   

    public String delUser(){

       action = "del";

       this.userService.delUser(user);

       return userList();

    }

   

    public String editUser(){

        System.out.println("action: "+action+",编辑用户: "+user);

        if("update".equals(action)){

          this.userService.editUser(user);

        }elseif("add".equals(action)){

            saveUser();

        }

        return userList();

    }

   

    public String userList(){

        List<User> userList = this.userService.getUserList();

        System.out.println("usersize: "+userList.size() + ",user: " + userList.get(0));

        getRequest().setAttribute("userList", userList);

        return"userList";

    }

 

    public UserService getUserService() {

       returnuserService;

    }

 

    @Resource

    publicvoid setUserService(UserService userService) {

       this.userService = userService;

    }

 

    public String getMessage() {

       returnmessage;

    }

 

    publicvoid setMessage(String message) {

       this.message = message;

    }

 

}

Service:

UserService Code:

 

import java.util.List;

 

import com.liuzd.s2sh.entity.User;

 

publicinterface UserService {

   

    public User checkUserExits(User user) throws Exception;

    publicvoid addUser(User user);

    publicvoid editUser(User user);

    publicvoid delUser(User user);

    public List<User> getUserList();

    public User getUserByUid(User user);

 

}

 

UserServiceImpl Code:

 

import java.util.List;

 

import javax.annotation.Resource;

 

import org.springframework.stereotype.Component;

 

import com.liuzd.s2sh.dao.UserDAO;

import com.liuzd.s2sh.entity.User;

import com.liuzd.s2sh.service.UserService;

 

@Component("userService")

publicclass UserServiceImpl implements UserService {

 

    private UserDAO userDao = null;

 

    public UserDAO getUserDao() {

       returnuserDao;

    }

 

    @Resource

    publicvoid setUserDao(UserDAO userDao) {

       this.userDao = userDao;

    }

 

    public User checkUserExits(User user) throws Exception {

       returnthis.userDao.getUserByUserIdAndUserNameExits(user);    

    }

 

    @Override

    publicvoid delUser(User user) {

       this.userDao.delUser(user);    

    }

 

    @Override

    public User getUserByUid(User user) {    

       returnthis.userDao.getUser(user);    

    }

 

    @Override

    public List<User> getUserList() {     

       returnthis.userDao.finUserAll();

    }

 

    @Override

    publicvoid addUser(User user) {

       String id =String.valueOf(new java.util.Random().nextInt(100));      

       //user.setId(id);

       System.out.println("添加: "+user);

       this.userDao.saveUser(user);      

    }

 

    @Override

    publicvoid editUser(User user) {

       this.userDao.updateUser(user); 

    }

}

 

Entity:

User Code:

 

@Entity

@Table(name="users")

publicclass User {

   

    private String id = null;

    private String username = null;

    private String password = null;

    private String address = null;

    private String sex = null;

    private Integer age = null;

   

    public String getAddress() {

       returnaddress;

    }

    publicvoid setAddress(String address) {

       this.address = address;

    }

    public Integer getAge() {

       returnage;

    }

    publicvoid setAge(Integer age) {

       this.age = age;

    }

    public String getUsername() {

       returnusername;

    }

    publicvoid setUsername(String username) {

       this.username = username;

    }

    public String getPassword() {

       returnpassword;

    }

    publicvoid setPassword(String password) {

       this.password = password;      

    }

 

    /*

     * 适合IDint,short,long的情况

     * @Id

    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SEQ_USER")

    @SequenceGenerator(name="SEQ_USER",sequenceName="S_USER",allocationSize=1)

    */

   

    @Id

    @GeneratedValue(generator="system-uuid")

    @GenericGenerator(name="system-uuid", strategy = "uuid")

    public String getId() {

       returnid;

    }

    publicvoid setId(String id) {

       this.id = id;

    }

    public String getSex() {

       returnsex;

    }

    publicvoid setSex(String sex) {

       this.sex = sex;

    }

   

    @Override

    public String toString() {     

       return"name: " + username + ",password: " + password+",sex: " + sex + ",age: " + age+",address: " + address + ",id: " + id;

    }

 

}

 

DAO:

 

UserDAO Code:

 

import java.util.List;

 

import com.liuzd.s2sh.entity.User;

 

publicinterface UserDAO {

   

    /**

     *检查用户是否存在

     **/

    public User getUserByUserIdAndUserNameExits(User user);

    publicvoid saveUser(User user);

    publicvoid updateUser(User user);

    public User getUser(User user);

    publicvoid delUser(User user);

    public List<User> finUserAll();

 

}

UserDAOImpl Code:

import java.util.List;

 

import javax.annotation.Resource;

 

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.stereotype.Component;

 

import com.liuzd.s2sh.dao.UserDAO;

import com.liuzd.s2sh.entity.User;

 

@Component("userDao")

publicclass UserDAOImpl implements UserDAO {

   

    private HibernateTemplate hibernateTemplate;

 

    public HibernateTemplate getHibernateTemplate() {

       returnhibernateTemplate;

    }

 

    @Resource

    publicvoid setHibernateTemplate(HibernateTemplate hibernateTemplate) {

       this.hibernateTemplate = hibernateTemplate;

    }

 

    public User getUserByUserIdAndUserNameExits(User user) {      

       List<User> users = hibernateTemplate.find("from User u where u.username = '" + user.getUsername() + "' and u.password='"+user.getPassword()+"'");

      

       if (users != null && users.size() > 0) {

           return users.get(0);

       }

       returnnull;

    }

 

    @Override

    publicvoid saveUser(User user) {

       this.hibernateTemplate.save(user);    

    }

 

    @Override

    publicvoid delUser(User user) {

       User delUser = getUser(user);

       this.hibernateTemplate.delete(delUser);

    }

   

 

    @Override

    public List<User> finUserAll() {  

       returnthis.hibernateTemplate.find("from User");

    }

 

    @Override

    public User getUser(User user) {      

       returnthis.hibernateTemplate.load(User.class,user.getId());

    }

 

    @Override

    publicvoid updateUser(User user) {

       this.hibernateTemplate.update(user);     

    }

}

 

3 JSp代码如下:

Login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>

<head>

    <title>Sign On</title>

</head>

<body>

<s:form action="userAction">

    <s:textfield key="user.username"/>

    <s:password key="user.password" />

    <s:submit/>

</s:form>

</body>

</html>

 

Success.jsp,fail.jsp

 

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>

<head>  

</head>

<body>

<s:property value="message"/><br>

<a href="${pageContext.request.contextPath}">返回</a>

<s:debug></s:debug>

</body>

</html>

 

User.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>

<head>

    <title>用户信息</title>

</head>

<body>

<s:form action="userAction!editUser.action">

<input type="hidden" name="action" value='<s:propertyvalue="action"/>'/>

<s:property value="message"/><br>

<s:if test="user.id != null">

  <s:property value="user.id"/>,<s:property value="user.username"/>,

<s:property value="user.age"/>,<s:property value="user.sex"/>,

<s:property value="user.address"/>,<s:property value="user.password"/>,

<s:property value="#request.myname"/>,<s:property value="#session.mysex"/>

</s:if>

 

<br>

  <table>

      <tr>      

        <td>

          <s:hidden name="user.id"/>   

          <s:textfield label="姓名" name="user.username"/>         

         </td>

      </tr>

      <tr>      

        <td>

          <s:textfield  label="年龄" name="user.age"/>

        </td>

      </tr>

      <tr>       

        <td>

          <s:select label="性别" name="user.sex"  

        list="#{ 1:'', 2: '', 3: '未知'}"

        listKey="key"

        listValue="value"

        ></s:select>

        </td>

      </tr>

      <tr>       

        <td>

          <s:textfield label="密码" name="user.password" size="50"/>

        </td>

      </tr>

      <tr>      

        <td>

          <s:textfield label="地址" name="user.address"/>

        </td>

      </tr>

      <tr>

        <td align="right">

         <s:submit vlaue="保存"/>

        </td>

      </tr>

    </table>

</s:form>

<br>

<s:debug></s:debug>

<br>

<a href="${pageContext.request.contextPath}">返回主页</a><br>

<s:a href="userAction!userList.action">返回显示</s:a>

</body>

</html>

 

UserList.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

 <%@ taglib prefix="s" uri="/struts-tags" %>

<%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>

<html>

<head>

    <title>用户集合</title>

</head>

 

<body>

<table width="50%" border="1" cellpadding="1" align="center">

  <thead>

    <tr>

      <th>姓名</th>

      <th>年龄</th>

      <th>性别</th>

      <th>地址</th> 

      <th>操作</th>   

    </tr>

  </thead>

  <tbody>

  <!--

  <s:iterator value="#request.userList" status="status" >

    <tr align="center">    

      <td><s:property value="username"/></td>

      <td><s:property value="age"/></td>

      <td><s:property value="sex"/></td>

      <td><s:property value="address"/></td>      

      <td>

        <s:a href="userAction!addUser.action">添加</s:a> | <s:a href="userAction!loadUser.action?user.id=%{id}">编辑</s:a> | 

       <a href="<s:url action="userAction!delUser.action"><s:param name="user.id" value="id"/></s:url>">删除</a>     

      </td>

    </tr>

 </s:iterator> 

  -->

 

 <c:forEach  items="${requestScope.userList}"var="user">

    <tr align="center">     

      <td>${user.username}</td>

      <td>${user.age}</td>

      <td>${user.sex eq 1 ? "" : user.sex eq 2 ? "" : "未知"}</td>

      <td>${user.address}</td>

      <td>

        <a href="${pageContext.request.contextPath}/userAction!addUser.action">添加</a> |

        <a href="${pageContext.request.contextPath}/userAction!loadUser.action?user.id=${user.id}">编辑</a> |

        <a href="${pageContext.request.contextPath}/userAction!delUser.action?user.id=${user.id}">删除</a>

      </td>

    </tr>

 </c:forEach>

 

 </tbody>

</table>

<br>

<a href="${pageContext.request.contextPath}">返回</a>

<br>

</body>

</html>

 

4 Oracle.sql

 

createtable USERS

(

  id       VARCHAR2(50) notnull,

  username VARCHAR2(50),

  age      NUMBER,

  sex      VARCHAR2(1),

  address  VARCHAR2(200),

  passwordVARCHAR2(20)

);

altertable USERS addconstraint PKUID primarykey (ID);

 

insertinto USERS (ID, USERNAME, AGE, SEX, ADDRESS, PASSWORD, ROWID)

values ('001', 'spring', 25, '1', '成都市', 'spring', '');

commit;

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值