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

[b]一 运行环境: XP3+Myeclipse6.6+Tomcat7[/b]
[b]二 项目框架版本号[/b]:Struts2 version: 2.2.1.1,Spring version: 3.1,Hibernate version:3.6,在Hibernate下有个jar为:javassist-3.12.0.GA.jar,在这个示例中用的是:javassist-3.7.ga.jar,这二个在这个示例中都可以用,没问题,一般原则用新版本的 :D
项目所用jar文件如下图
[img]http://dl.iteye.com/upload/attachment/427190/dab4533f-0cc1-3c28-9773-2483a07d3333.jpg[/img]
[b]三 具体实现如下[/b]:

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-dd HH: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;

public class BaseAction extends ActionSupport implements SessionAware{

private static final long serialVersionUID = 1L;

public void 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")
public class UserAction extends BaseAction {

private static final long serialVersionUID = 1L;

private UserService userService = null;
private String message = null;

private User user = null;

private String action = null;

public String getAction() {
return action;
}

public void setAction(String action) {
this.action = action;
}

public User getUser() {
return user;
}

public void 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);
}else if("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() {
return userService;
}

@Resource
public void setUserService(UserService userService) {
this.userService = userService;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

}


Service层:
UserService Code:

import java.util.List;

import com.liuzd.s2sh.entity.User;

public interface UserService {

public User checkUserExits(User user) throws Exception;
public void addUser(User user);
public void editUser(User user);
public void 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")
public class UserServiceImpl implements UserService {

private UserDAO userDao = null;

public UserDAO getUserDao() {
return userDao;
}

@Resource
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}

public User checkUserExits(User user) throws Exception {
return this.userDao.getUserByUserIdAndUserNameExits(user);
}

@Override
public void delUser(User user) {
this.userDao.delUser(user);
}

@Override
public User getUserByUid(User user) {
return this.userDao.getUser(user);
}

@Override
public List<User> getUserList() {
return this.userDao.finUserAll();
}

@Override
public void 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
public void editUser(User user) {
this.userDao.updateUser(user);
}
}


Entity层:
User Code:

@Entity
@Table(name="users")
public class 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() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
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;
}

/*
* 适合ID为int,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() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSex() {
return sex;
}
public void 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;

public interface UserDAO {

/**
* 检查用户是否存在
* */
public User getUserByUserIdAndUserNameExits(User user);
public void saveUser(User user);
public void updateUser(User user);
public User getUser(User user);
public void 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")
public class UserDAOImpl implements UserDAO {

private HibernateTemplate hibernateTemplate;

public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}

@Resource
public void 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);
}
return null;
}

@Override
public void saveUser(User user) {
this.hibernateTemplate.save(user);
}

@Override
public void delUser(User user) {
User delUser = getUser(user);
this.hibernateTemplate.delete(delUser);
}


@Override
public List<User> finUserAll() {
return this.hibernateTemplate.find("from User");
}

@Override
public User getUser(User user) {
return this.hibernateTemplate.load(User.class,user.getId());
}

@Override
public void 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:property value="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


create table USERS
(
id VARCHAR2(50) not null,
username VARCHAR2(50),
age NUMBER,
sex VARCHAR2(1),
address VARCHAR2(200),
password VARCHAR2(20)
);
alter table USERS add constraint PKUID primary key (ID);

insert into USERS (ID, USERNAME, AGE, SEX, ADDRESS, PASSWORD, ROWID)
values ('001', 'spring', 25, '1', '成都市', 'spring', '');
commit;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值