首先在这里要配置好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>
    ```