使用的数据库表loginusers:
1、新建JavaWeb工程ssh2_login,添加com.pojo包(放置hibernate生成的POJO类)、com.dao包(放置数据库相关操作类)
com.action包(放置业务处理类)
2、右键项目添加spring开发能力,,勾选Spring Persistence类库
3、右键项目部署hibernate,取消生成的hibernate.cfg.xml文件改由spring分配id值管控
4、右键使用的数据库点击反向工程生成的POJO类及映射文件放于com.pojo包下
5、导入struts2 的九个基本jar包及spring支持包(spring支持包须与struts2核心包版本一致),建立path
6、修改web.xml配置文件,加入struts过滤器和spring配置信息
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- servlet监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring配置信息 -->
<context-param>
<param-name>contextconfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<display-name>ssh2_login</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
7、在WebRoot下新建编写login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ssh2 login</title>
</head>
<body>
<h2>USER LOGIN</h2>
<s:form action="validate" method="post">
<table>
<tr>
<s:textfield name="user.userName" label="Account"/>
<s:password name="user.password" label="Passsword"/>
</tr>
<tr>
<s:reset value="reset"/>
<s:submit value="sumbit"/>
</tr>
</table>
</s:form>
</body>
</html>
8、在src>com>action下新建编写ValidateAction类完成验证的业务逻辑
package com.action;
import java.util.Map;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.dao.InterUserDao;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.pojo.Loginusers;
public class ValidateAction extends ActionSupport{
private Loginusers user;
public Loginusers getUser() {
return user;
}
public void setUser(Loginusers user) {
this.user = user;
}
public String execute()throws Exception{
String account=user.getUserName();
String password=user.getPassword();
boolean flag=false;
Loginusers user1=null;
ActionContext context=ActionContext.getContext();
Map session=context.getSession();
user1=(Loginusers)session.get("user");
if(user1==null){
ApplicationContext acontext=new FileSystemXmlApplicationContext(
"file:D:/JAVA-Develop/Workspaces/MyEclipse 2017 CI/ssh2_login/src/applicationContext.xml");
InterUserDao interUserDao=(InterUserDao)acontext.getBean("userDaoImpl");
user1=(Loginusers)interUserDao.validate(account, password);
if(user1!=null){
session.put("user",user1);
flag=true;
}
}else{
flag=true;
}
if(flag)
return SUCCESS;
else
return ERROR;
}
}
9、在src>com>dao下新建编写BaseDao基类(提供SessionFactory获取Session)、InterUserDao接口类、
UserDaoImpl接口实现类,实现用户验证
package com.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class BaseDao {
//BaseDao是Dao持久层访问SessionFactor获取session对象的中间组件
//解耦Dao层与SessionFactory
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession(){
return sessionFactory.openSession();
}
}
package com.dao;
import com.pojo.Loginusers;
public interface InterUserDao {
public Loginusers validate(String name,String password); //提供验证方法
}
package com.dao;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.dao.BaseDao;
import com.pojo.Loginusers;
public class UserDaoImpl extends BaseDao implements InterUserDao{
@Override
public Loginusers validate(String name,String password) {
// TODO Auto-generated method stub
String hql="from Loginusers u where u.userName=? and u.password=?";
Session session=getSession(); //从继承的类中获得session对象
Query query=session.createQuery(hql);
query.setParameter(0,name);
query.setParameter(1, password);
List list=query.list();
Iterator it=list.iterator();
while(it.hasNext()){
if(list.size()!=0){
Loginusers user=(Loginusers)it.next();
return user;
}
}
session.close();
return null;
}
}
10、在applicationContext.xml文件中配置好dao组件bean、数据库驱动属性信息的配置、action类bean,
其中BaseDao的SessionFactory属性中需关联SessionFactory的bean id值
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<!-- 配置数据库驱动 -->
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/"></property>
<property name="username" value="root"></property>
<property name="password" value="root123"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.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>com/pojo/Loginusers.hbm.xml</value></list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="baseDao" class="com.dao.BaseDao">
<property name="sessionFactory"><ref bean="sessionFactory"></ref></property>
</bean>
<bean id="userDaoImpl" class="com.dao.UserDaoImpl" parent="baseDao"></bean>
<!-- <bean id="interUserDao" class="com.dao.InterUserDao"></bean> 不装配接口-->
<bean id="validateAction" class="com.action.ValidateAction"></bean>
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
11、在src下新建struts.xml文件,设置action类信息
<?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="default" extends="struts-default">
<!-- 用户登录action -->
<action name="validate" class="validateAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
<!-- <constant name="struts.i18n.encoding" value="gb2312"></constant> -->
</struts>
12、在WebRoot下新建编写success.jsp成功页、error.jsp失败页
<%@ page language="java" import="java.util.*" import="com.pojo.Loginusers" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>success.jsp</title>
</head>
<body>
<%
Loginusers user=(Loginusers)session.getAttribute("user");
System.out.print(user);
String uName=user.getUserName();
%>
<h2>Welcome <%=uName %>,Login Success</h2>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>error.jsp</title>
</head>
<body>
<h2>Login Error</h2>
</body>
</html>
13、保存启动Tomcat浏览器测试