首先在这里要配置好Struts2的框架,该导入的包什么的都导入,千万不要忘记在web.xml中的配置。这里验证是从数据库中的验证,这里用的是Hibernate来搜查表中的用户,有匹配的就可以登录,也要做好Hibernate的前提工作,下面来看一看代码
这里是用户的输入界面submit.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="/Struts2test/user!login"><!--执行login方法-->
请输入账户<input type="text" name="name">
请输入密码<input type="password" name="password">
<input type="submit" value="提交">
</form>
<form action="${pageContext.request.contextPath}/SaveAction.action">
请输入账户<input type="text" name="name">
请输入密码<input type="password" name="password">
<input type="submit" value="保存">
</form>
</body>
</html>
下面是Struct2的配置xml
struct2.xml
<interceptors >
<interceptor name="UserInterceptor" class="com.edu.Interceptor.UserInterceptor"></interceptor>
</interceptors><!--注意,在这个包里千万不要忘记这个来启用自定义的拦截器,我在这里就发生这样的问题,还找了半天的错误-->
<action name="user" class="com.edu.action.Useraction">
<!-- <result name="login">/submit.jsp</result>-->
<result name="success">/add.jsp</result>
<interceptor-ref name="UserInterceptor">
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<!--使用自定义的拦截器,不要忘记还要使用默认拦截器-->
</action>
<action name="SaveAction" class="com.edu.action.SaveAction" method="save">
<result name="success1">/demo1/success.jsp</result>
<interceptor-ref name="UserInterceptor"/>
<interceptor-ref name="defaultStack"/>
</action>
这个是Useraction类中的login方法,负责封装前台的数据,并将前台数据与后台的数据匹配这里
public String login(){
HttpServletRequest request=ServletActionContext.getRequest();
Map<String, String[]> map=request.getParameterMap();
User user=new User();
try {
BeanUtils.populate(user,map);
User existuser=new UserService().login(user);
if(existuser==null){
return "login";
}else{
request.getSession().setAttribute("existuser",existuser);
return "success";
}
} catch (Exception e) {
// TODO: handle exception
}
return NONE;
}
UserService类中的也有login方法,这里面有一个hibernateutils的工具类没有说明
public class UserService {
public User login(User user){
Session session=hibernateutils.getCurrentSession();
Transaction tr=session.beginTransaction();
User existuser=null;
try {
existuser=new UserDao().findAll(user);
tr.commit();
} catch (Exception e) {
tr.rollback();
e.printStackTrace();
}
return existuser;
}
这个UserDao()类,其中findAll的方法查找表中的数据
public User findAll(User user) {
Session session=hibernateutils.getCurrentSession();//线性session
//Transaction tr=session.beginTransaction();不用开事务,同一个session
Query query=session.createQuery("from User where name=? and password=?");
query.setParameter(0, user.getName());
query.setParameter(1, user.getPassword());
List<User> list = query.list();
if(list.size()>0){
return list.get(0);
}
return null;
}
这个是submit.jsp登录成功后跳转到的add.jsp界面,可以看出来submit.jsp中有一个和它一样的代码,但在submit.jsp点击保存的时候不能执行,一直停留在登录的界面,但是登录过后跳到的界面就可以保存了,这就是拦截器的作用。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/SaveAction.action">
请输入账户<input type="text" name="name">
请输入密码<input type="password" name="password">
<input type="submit" value="保存">
</form>
</body>
</html>
```

京公网安备 11010502036488号