创建一个web项目。
导入jar包
配置web.xml
<-- Struts的核心过滤器配置--> struts org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts *.action struts *.jsp
在src 目录下创建 hibernate.cfg.xml,指定数据库“demo”
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/demo root 123 org.hibernate.dialect.MySQLDialect true true update thread
创建一个User实体类
package com.test.pojo;/** * Created by Wdnnccey on 2016/10/24. */public class User { private int uid; private String username; private String password; public User() { } public User(int uid, String username, String password) { this.uid = uid; this.username = username; this.password = password; } @Override public String toString() { return "User{" + "uid=" + uid + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } 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; }}
创建 :User.hbm.xml, 数据映射文件,对应的分别是数据字段。
创建一个包存放专门用来工具类,获取session操作等等。
HibernateUtils.java
package com.test.utils;import org.hibernate.Hibernate;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;/** * Created by Wdnnccey on 2016/10/24. */public class HibernateUtils { private static SessionFactory sessionFactory; //保证单例模式 private HibernateUtils(){ } //公有的静态方法 public static SessionFactory getSessionFactory(){ if(sessionFactory ==null){ Configuration configuration =new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); return sessionFactory; }else { return sessionFactory; } }}
在创建一个源码包,作为测试类使用,来创建表。 TestDemo.java
package com.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.metamodel.relational.Schema;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.hibernate.tool.hbm2ddl.SchemaExport;import org.junit.Test;/** * Created by Wdnnccey on 2016/10/24. */public class TestDemo { @Test public void TestAll(){ Configuration configuration = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory =configuration.buildSessionFactory(serviceRegistry); Session session = sessionFactory.getCurrentSession(); Transaction transaction = session.beginTransaction(); SchemaExport export =new SchemaExport(configuration); export.create(true,true); }}
成功创建user表。
在web目录下创建users-->目录存放-->login.jsp作为登陆页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>登陆页面
在web目录下创建users-->目录存放-->fails.jsp作为登陆失败后返回的页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title 你失败了。
在web目录下创建users-->目录存放-->success.jsp作为登陆成功后返回的页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title 你成功了。
在src目录下创建一个struts.xml配置文件。
/users/success.jsp /users/fails.jsp
在src下创建一个dao层。 接口:userDao.java
import com.test.pojo.User;/** * Created by Wdnnccey on 2016/10/24. */public interface UserDao { //用户登陆 public boolean userLogin(User user);}
在src下创建一个dao层的实现层。 userDaoImpl.java
;import com.test.pojo.User;import com.test.utils.HibernateUtils;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import java.util.List;/** * Created by Wdnnccey on 2016/10/24. */public class UserDaoImpl implements UserDao{ @Override public boolean userLogin(User user) { //初始化事务 Transaction transaction =null; //创建一个hql语句,先初始化。 String hql =""; try { //用之前创建的utils工具来获取session Session session = HibernateUtils.getSessionFactory().getCurrentSession(); //创建事务并开启事务 transaction =session.beginTransaction(); //编写hql语句 hql = "from User where username=? and password =?"; //通过query去创建语句 Query query = session.createQuery(hql); //为hql语句中的?(问号),设置参数。(通过user实体类获取来user用户名和密码的信息) query.setParameter(0,user.getUsername()); query.setParameter(1,user.getPassword()); //HQL语句返回的是一个QUery对象,将Query对象query转换成集合,并且把该集合赋值给一个新的集合。 Listlist =query.list(); //执行之前要提交事务 transaction.commit(); //判断是否验证到有用户存在 if(list.size()>0){ return true; }else { return false; } }catch (Exception e){ }finally { //将事务置为空 if(transaction!=null){ transaction=null; } } return false; }}
在src下创建一个action的包,用于存放action, 我们先写一个 SuperAction.java
关于为什么继承ActionSupport,请参考:http://www.cnblogs.com/wdnnccey/p/5994693.html
关于为什么要时间那些接口,请参考:http://www.cnblogs.com/wdnnccey/p/5994713.html
package com.test.action;import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.util.ServletContextAware;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import javax.xml.ws.spi.http.HttpContext;/** * 所有action的父类 * Created by Wdnnccey on 2016/10/24. */public class SuperAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{ protected HttpServletResponse response; protected HttpServletRequest request; protected ServletContext application; protected HttpSession session; @Override public void setServletRequest(HttpServletRequest request) { this.request = request; this.session = this.request.getSession(); } @Override public void setServletResponse(HttpServletResponse response) { this.response =response; } @Override public void setServletContext(ServletContext application) { this.application=application; }}
在action包下创建 userAction.java
package com.test.action;import com.opensymphony.xwork2.ModelDriven;import com.test.pojo.User;import com.test.serivce.impl.UserDao;import com.test.serivce.impl.UserDaoImpl;/** * Created by Wdnnccey on 2016/10/24. */public class UserAction extends SuperAction implements ModelDriven{ //初始化一个user对象 private User user = new User(); //这里使用模型驱动 //所谓ModelDriven ,意思是直接把实体类当成页面数据的收集对象。 @Override public User getModel() { return this.user; } /** * 登陆方法 * @return */ public String login() { UserDao dao = new UserDaoImpl(); //如果匹配的话 if (dao.userLogin(user)) { //返回正确页面,(session是通SuperAction得到的!
)
session.setAttribute("LoginUsername", user.getUsername()); //如果正确跳转到success页面,在struts.xml中有体现配置 return "login_success"; } else { //返回错页面 return "login_fails"; } } }
我们在登陆之前要插入一条用户数据,以便登陆的时候去验证!
部署web项目,启动tomcat :
在这输入用户名以及密码 验证。
我先输入一个错误的信息,点击提交按钮:
这次我们输入一个正确的数据, 在数据库中存在的!
写到这里,我们完成了一个简单的登陆的功能,以及页面跳转。
我们想在登陆页面知道这个用户是谁:
在session域中取得,我们在登陆时候setattribute的值(session.setAttribute("LoginUsername", user.getUsername());)
在success.jsp页面添加如下:
欢迎你:(${sessionScope.LoginUsername})登陆!
再次登陆验证:
http://localhost:8081/users/login.jsp
如果我们想实现对这个用户的退出呢? 也很简单,把这个用户在session中移除即可,代码如下:
在userAction中编写注销方法:
/** * 注销方法 */ public String loginout() { //先去session中去获取值,查看当前用户是否为空 if (session.getAttribute("LoginUsername") != null) { //如果不等于空的话我们将他移出session session.removeAttribute("LoginUsername"); } //返回到登陆页面(这个return的值是通过struts.xml文件配置的) return "loginout_success"; }
在struts.xml的配置:(红色标注)
/users/success.jsp /users/fails.jsp /users/login.jsp
我们需要在登陆成功的success.jsp写上安全注销的链接(红色标注):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title 你成功了。欢迎你:(${sessionScope.LoginUsername})登陆!安全退出!
测试注销方法:
看地址栏,能看出来 我们已经成功的退出当前用户!
不知道为什么 代码的格式没有复制上去,我就贴在这里啦:
struts.xml
/users/success.jsp /users/fails.jsp /users/login.jsp