struts2+Spring2.0+Hibernate3使用注解的登录验证
来源:互联网 发布:找保镖什么软件 编辑:程序博客网 时间:2024/04/30 08:22
struts2.0的优势显而易见,侵入性小.不用在写烦人的ActionForm,优秀的基于AOP拦截器机制,与Servlet API 完全解耦,便于单元测试,丰富的自定义标签等等优势,注定了它受广大程序员的欢迎.
接下来,介绍下Struts2.0和Spring2和Hibernate3的结合运用.
首先我们需要一个POJO
@Entity
@Table(name="USER")( USER 为表名,如果h)
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = -1549391863285302468L;
private Long userid;
private String name;
private String pwd;
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final User other = (User) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Column(name="USER_NAME")(name属性对应数据库字段)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="PASSWORD")(pwd属性对应数据库字段)
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.IDENTITY)(设定对象标识符)
public Long getUserid() {
return userid;
}
public void setUserid(Long userid) {
this.userid = userid;
}
}
第二步
写下Spring的appicationContext-hibernate.xml,appicationContext-service.xml,appicationContext-struts.xml,appicationContext-resouce.xml.
在appicationContext-hibernate.xml中定义
<!-- 设置Hibernate Session Factory基本信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- 设置数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 设置持久化的Class -->
<property name="annotatedClasses">
<list>
<value>com.TestStruts2.model.User</value>
<!-- 添加新的持久会类 -->
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- 设置数据库方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
<!-- 设置true,false在数据库表中的对应值 -->
<prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop>
<!-- 打开SQL调试 -->
<prop key="hibernate.show_sql" >true</prop>
</props>
</property>
</bean>
<!-- 使用HibernateTransaction做为事务管理器(因为本系统只用了一个数据库可以不使用JTA)-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 如果使用多个数据库,要进行事务管理,使用JTA 进行事务管理,配置如下
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
-->
<!-- 基本DAO 用于完成基本的CRUD -->
<bean id="dao" class="com.sds.cdc.dao.hibernate.BaseDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="dao1" class="com.TestStruts2.dao.imp.BaseObjectDaoImp">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="userDao1" class="com.TestStruts2.dao.imp.UserDaoImp">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 其他自定义的DAO -->
<bean id="userDao" class="com.sds.cdc.dao.hibernate.UserDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="deptDao" class="com.sds.cdc.dao.hibernate.DeptDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 添加新的DAO -->
</beans>
在appicationContext-resouce.xml.中定义:数据库资源
<!-- 如果使用AppServer容器提供的datasource,打开下面的注释,并修改myDS -->
<!--<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/myDS"/>-->
<!-- 使用Apache的DBCP建立连接池 -->
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/init.properties</value>
</property>
</bean>
<!-- Choose the dialect that matches your "dataSource" definition -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>${datasource.driverClassName}</value>
</property>
<property name="url">
<value>${datasource.url}</value>
</property>
<property name="username">
<value>${datasource.username}</value>
</property>
<property name="password">
<value>${datasource.password}</value>
</property>
<property name="maxActive">
<value>${datasource.maxActive}</value>
</property>
<property name="maxIdle">
<value>${datasource.maxIdle}</value>
</property>
<property name="maxWait">
<value>${datasource.maxWait}</value>
</property>
<property name="defaultAutoCommit">
<value>${datasource.defaultAutoCommit}</value>
</property>
</bean>
</beans>
在appicationContext-service.xml定义
<aop:config proxy-target-class="true">
<aop:pointcut id="userServicePointcut" expression="execution(* com.TestStruts2.service.imp.*ServiceImp.*(..))"/><!-- 定义切点即满足execution条件的bean作为目标类加入事务管理增强-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="userServicePointcut"/>
<aop:aspect ref="adviceMethod">//定义增强bean
<aop:before method="preGreet()" pointcut-ref="userServicePointcut"/>
//指定切入点并指定增强方法为preGreet()
</aop:aspect>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
//定义事务管理器在appicationContext-hibernate.xml中定义
<tx:attributes>
<tx:method name="save*"/>
<tx:method name="get*"/>
<tx:method name="check*"/>
//需要加入事务管理的方法
</tx:attributes>
</tx:advice>
<bean id="us" class="com.TestStruts2.service.imp.UserServiceImp">
<property name="userdao">
<ref bean="userDao1" />
</property>
</bean>
<bean id ="os" class="com.TestStruts2.service.imp.BaseObjectServiceImp">
<property name="objectdao">
<ref bean="dao1" />
</property>
</bean>
<bean id="spring2Test" class="test.spring.SpringTest"></bean>
<bean id="adviceMethod" class="test.spring.AdivceMethods"></bean>
<bean id="adviceMethods" class="test.spring.AdivceMethods"></bean>
最后我们需要一个appicationContext-struts.xml来对struts2的Action进行注入内容如下
<bean id="loginAction" class="com.TestStruts2.action.LoginAction"
//它的注入是根据autowire="byName"自动寻找与该Bean属性名一样的bean,并注入
scope="prototype" autowire="byName">
当所以的appicationContext-*.xml定义后,我们可以定义struts.xml
<struts>
<include file="struts-default.xml"/>
<package name="login" extends="struts-default" namespace="/login">//namespace为命名空间
<action name="login" class="loginAction">//vclass="loginAction"为appicationContext-struts.xml中的bean id
<result name="success">/jsp/success.jsp</result>//成功所转入页面
<result name="error">/jsp/error.jsp</result>
</action>
</package>
</struts>
最后定义LoginAction
public class LoginAction implements Action {
private String username;//由struts2框架自动注入
private String password;
private UserService us;//由spring框架注入
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public UserService getUs() {
return us;
}
public void setUs(UserService us) {
this.us = us;
}
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;
}
public String execute() throws Exception {
User user = this.us.checkUser(this.getUsername(), this.getPassword());//验证用户是否合法
if(user!=null) {
// TODO 自动生成方法存根
this.setMessage("成功登录");
return SUCCESS;
}
else
{ this.setMessage("登录失败!");
return ERROR;
}
}
}
最后访问http://localhost:8094/TestStruts2.0/jsp/login.jsp输入正确的名字和密码后
login.jsp的代码
<form name="infoForm" action="login/login.action" method="POST">
姓名:<input type="text" name="username" /><br>
密码:<input type="text" name="password" /><br>
<input type="submit" value="提交" /> <input type="reset" value="重置" /><br>
</form>
转入到success.jsp
代码如下:
<body>
<s:property value="message"/>
</body>
<s:property value="message"/>将显示""成功登录"
如果输入错误用户名和密码将转入到error,jsp中,并 <s:property value="message"/>用显示出"登录失败"信息
到此一个完整的用struts2加spring2+hibernate3的注解登录验证介绍完毕.
- struts2+Spring2.0+Hibernate3使用注解的登录验证
- struts2 +hibernate3.2+spring2.0
- Struts2.0+Spring2.0+Hibernate3.1登录及增删改查的完整演示示例 连载中...(一)
- Struts2.0+Spring2.0+Hibernate3.1登录及增删改查的完整演示示例 连载中...(二)
- Struts2.0+Spring2.0+Hibernate3.1登录及增删改查的完整演示示例 连载中...(三)
- Struts2.0+Spring2.0+Hibernate3.1登录及增删改查的完整演示示例 连载中...(四)
- (心得)Struts2+Spring2+Hibernate3.1的整合_Myeclipse6.0
- struts2+spring2+hibernate3 Annotation的整合
- struts2-spring2-hibernate3整合的一个问题
- Struts2+Hibernate3+Spring2的简单小例子
- Spring2.5.6+Struts2+Hibernate3.6.7+DWR3.0 注解(Annotation)式配置
- Struts2和hibernate3的简单应用-登录验证
- Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解
- Struts2.0+Spring2.0+Hibernate3.1整合
- Struts2+hibernate3.0+spring2.0整合
- struts2.0+spring2.0+hibernate3.1整合
- Spring2.5+Hibernate3.2+Struts2.0配置
- struts2+hibernate3.2+spring2.0整合篇
- 【原创】Ext 上传文件,前后台实现, Asp.net 代码
- 恐怖的人肉搜索
- Java学习之路:不走弯路,就是捷径
- Response.Redirect发生线程终止,解决后做个总结
- 30分钟正则表达式指导2
- struts2+Spring2.0+Hibernate3使用注解的登录验证
- 从右下角出来的广告实例_js代码
- 从右下角出来的广告实例
- Hibernate中in expected错误的原因之一
- 能走的年月日
- 架构设计(三)——安全性设计
- 弹出窗口
- ASP.NET程序中常用的三十三种代码
- windows IE 浏览器的故障整理