读书人

Struts2-Spring2.5_Hibernate3.2调整示

发布时间: 2012-10-12 10:17:04 作者: rapoo

Struts2-Spring2.5_Hibernate3.2整合示例(简单注册)

用Struts2-Spring2.5_Hibernate3.2实现一个非常非常简单的登录注册示例,附件中有项目的源码。加入相应的包后,就可以直接使用

项目的结构如下:

如附件中图片所示。

下面就一步一步进行说明

1)首先需要将Struts2、Spring2.5、Hibernate3.2所需要的jar包全部导入到项目中(本例中Hibernate3.2用的是MyEclipse自带的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">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>    <!-- 配置spring的监听器 -->    <!--     <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/applicationContext*.xml</param-value>    </context-param>        如果Spring配置文件在/WEB-INF下,则用上面的内容进行配置,如果Spring配置文件直接放在工程src下,则用下面的        内容进行配置     -->   <context-param>         <param-name>contextConfigLocation</param-name>         <param-value>classpath*:applicationContext-*.xml</param-value>     </context-param>     <!-- 开启监听 -->  <listener>         <listener-class>             org.springframework.web.context.ContextLoaderListener         </listener-class>     </listener>     <!-- 配置OpenSessionInViewFilter,必须在struts2监听之前 -->    <filter>       <filter-name>hibernateFilter</filter-name>        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>    </filter>        <!-- 设置监听加载上下文 -->  <filter>      <filter-name>struts2</filter-name>      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <filter-mapping>     <filter-name>hibernateFilter</filter-name>     <url-pattern>/*</url-pattern></filter-mapping>    <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/*</url-pattern>   </filter-mapping></web-app>

?

3)编写model类---User

package com.chenfei.model;public class User {   private Long id;   private String username;   private String password;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;}public void setId(Long id) {this.id = id;}public Long getId() {return id;}}

?

?

4)编写Struts Action

??????

package com.chenfei.action;import com.chenfei.model.User;import com.chenfei.service.LoginManager;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {private User user;private LoginManager loginManager;@Overridepublic String execute() throws Exception {// TODO Auto-generated method stubif(loginManager.isLogin(user.getUsername(),user.getPassword()))return "success";elsereturn "error";}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public LoginManager getLoginManager() {return loginManager;}public void setLoginManager(LoginManager loginManager) {this.loginManager = loginManager;}}

?

5)编写业务处理层(尽量是面向接口的编程)

??

package com.chenfei.service;public interface LoginManager {public boolean isLogin(String username,String password);}

?

上面是接口,下面是他的实现

???

package com.chenfei.service;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.chenfei.dao.UserDao;import com.chenfei.model.User;public class LoginManagerImpl implements LoginManager {private User user;//需要注入一个private UserDao userDao;public boolean isLogin(String username, String password) {// TODO Auto-generated method stubif(username!=null&&password!=null&&!username.equals("")&&!password.equals("")){user.setUsername(username);user.setPassword(password);userDao.addUser(user);return true;}else{System.out.println("~~~~~~~~~~~~~~~~~~Wrong~~~~~~~~~~~~~~~~~");return false;}}public void setUserDao(UserDao userDao) {this.userDao = userDao;}public UserDao getUserDao() {return userDao;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}}

?

?

6)编写Dao(尽量是面向接口的编程)

package com.chenfei.dao;import com.chenfei.model.User;public interface UserDao {public void addUser(User user);}

?

?

上面是接口,下面是他的实现

package com.chenfei.dao;import org.hibernate.SessionFactory;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.chenfei.model.User;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class UserDaoImpl extends HibernateDaoSupport implements UserDao {//继承自HibernateDaoSupport public void addUser(User user) {// TODO Auto-generated method stubthis.getHibernateTemplate().save(user);}}

?

7)为了测试AOP,编写一个简单的切面

package com.chenfei.aspect;public class CheckUser {public void beforeLogin(){System.out.println("登录前的状态");}public void afterLogin(){System.out.println("登录后的状态");}}

?

?

?8)配置Struts的配置文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"    "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>     <package name="default" extends="struts-default" >       <action name="login" name="code"><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:tx="http://www.springframework.org/schema/tx"     xmlns:aop="http://www.springframework.org/schema/aop"     xsi:schemaLocation="http://www.springframework.org/schema/beans                         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd                         http://www.springframework.org/schema/context                         http://www.springframework.org/schema/context/spring-context-2.5.xsd                         http://www.springframework.org/schema/aop                         http://www.springframework.org/schema/aop/spring-aop-2.5.xsd                         http://www.springframework.org/schema/tx                         http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">     <bean id="user" ref="loginManager"></property>        <property name="user" ref="user">        </property>    </bean>         <bean id="loginManager" ref="user"></property>          <property name="userDao" ref="userDao"></property>        </bean>             <bean id="userDao" ref="sessionFactory"></property>      </bean>               <!-- 显示AOP的用法 -->       <bean id="checkUser" expression="execution(* *.isLogin(..))"/>               <aop:before method="beforeLogin"  pointcut-ref="check"/>               <aop:after method="afterLogin"  pointcut-ref="check"/>          </aop:aspect>       </aop:config>           <!-- 配置sessionFactory -->                <bean id="sessionFactory" ref="sessionFactory"/>      </bean>            <!-- 配置事务传播特性,本例仅以配置add开始的方法,事务传播特性为required -->      <tx:advice id="txAdvice" transaction-manager="transactionManager">          <tx:attributes>              <tx:method name="add*" propagation="REQUIRED"/>          </tx:attributes>      </tx:advice>            <!-- 配置哪些类的方法参与事务,当前com.chenfei.dao包中的子包,                             类中所有方法需要,还需要参考tx:advice的设置 -->      <aop:config>         <aop:pointcut id="addManagerMethod" expression="execution(* com.chenfei.dao.*.*(..))"/><!--expression写的时候一定注意,否则会出现问题-->         <aop:advisor advice-ref="txAdvice" pointcut-ref="addManagerMethod"/>      </aop:config></beans>

?

10)编写Hibernate配置文件

???????????????????????????????????????????????????????? hibernate.cfg.xml??

???????????

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration><session-factory><property name="connection.username">root</property><property name="connection.url">jdbc:mysql://localhost:3306/user</property><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="myeclipse.connection.profile">MyDriver</property><property name="connection.password">113801</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="current_session_context_class">thread</property><mapping resource="./User.hbm.xml" /></session-factory></hibernate-configuration>

?

????????????????????????????????????????????????????????????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"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping package="com.chenfei.model">    <class name="User" table="user">        <id name="id" type="long">            <column name="id" />            <generator type="string">            <column name="username" length="45" not-null="true" />        </property>        <property name="password" type="string">            <column name="password" length="45" not-null="true" />        </property>    </class></hibernate-mapping>

??

11)相关页面

?????????????????????????????????????????????????????????????? ?login.jsp

????????

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>登陆</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->  </head>    <body>     <form action="login" method="post">       <s:textfield name="user.username" label="用户名"></s:textfield>        <s:password name="user.password" label="密码"></s:password>       <s:submit value="submit" align="left"></s:submit>     </form>  </body></html>

?

????????????????????????????????????????????????????????????????? error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>欢迎您的光临</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->  </head>    <body>         登录错误,请检查您的用户名跟密码,<a href="login.jsp">重新登录。</a>  </body></html>

?

????????????????????????????????????????????????????????????????? ?welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>欢迎您的光临</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->  </head>    <body>            欢迎您,<s:property value="user.username"/>            <s:debug></s:debug>  </body></html>

?

经过以上步骤,就可实现一个非常非常弱智的注册系统~~

读书人网 >软件架构设计

热点推荐