您好,欢迎访问一九零五行业门户网

JAVAEE——自定义拦截器、struts2标签、登陆功能和校验登陆拦截器的实现

一、自定义拦截器1.架构
2.拦截器创建//拦截器:第一种创建方式//拦截器生命周期:随项目的启动而创建,随项目关闭而销毁public class myinterceptor implements interceptor{}
//创建方式2: 继承abstractinterceptor -> struts2的体贴//帮我们空实现了init 和 destory方法. 我们如果不需要实现这两个方法,就可以只实现intercept方法public class myinterceptor2 extends abstractinterceptor{}
//创建方式3:继承methodfilterinterceptor 方法过滤拦截器//功能: 定制拦截器拦截的方法.//    定制哪些方法需要拦截.//    定制哪些方法不需要拦截public class myinterceptor3 extends methodfilterinterceptor{}
3.拦截器api        //放行string result = invocation.invoke();
//前处理system.out.println(myinterceptor3 的前处理!);//放行string result = invocation.invoke();//后处理system.out.println(myinterceptor3 的后处理!);
//不放行,直接跳转到一个结果页面//不执行后续的拦截器以及action,直接交给result处理结果.进行页面跳转return success;
4.拦截器配置    <package name="inter" namespace="/" extends="struts-default" ><interceptors><!-- 1.注册拦截器 --><interceptor name="myinter3" class="cn.itcast.a_interceptor.myinterceptor3"></interceptor><!-- 2.注册拦截器栈 --><interceptor-stack name="mystack"><!-- 自定义拦截器引入(建议放在20个拦截器之前) --><interceptor-ref name="myinter3"><!-- 指定哪些方法不拦截 <param name="excludemethods">add,delete</param> --> <!-- 指定哪些方法需要拦截 --> <param name="includemethods">add,delete</param></interceptor-ref><!-- 引用默认的拦截器栈(20个) --><interceptor-ref name="defaultstack"></interceptor-ref></interceptor-stack>    </interceptors><!-- 3.指定包中的默认拦截器栈 --><default-interceptor-ref name="mystack"></default-interceptor-ref><action name="demo1action_*" class="cn.itcast.a_interceptor.demo1action" method="{1}" ><!-- 为action单独指定走哪个拦截器(栈) <interceptor-ref name="mystack"></interceptor-ref>--><result name="success" type="dispatcher" >/index.jsp</result></action></package>
<!-- 补充知识:定义全局结果集 --><global-results><result name="tologin" type="redirect" >/login.jsp</result></global-results>
二、struts2标签1.标签体系
2.struts2标签结构
3.控制标签准备action然后再到jsp练习struts2标签
public class demo2action extends actionsupport {public string execute() throws exception {                  list<string> list = new arraylist<>();         list.add(tom);         list.add(jerry);         list.add(jack);         list.add(rose);         list.add(hqy);                  actioncontext.getcontext().put(list, list);return success;     } }
开始练习控制标签:
 <%@ taglib prefix="s" uri="/struts-tags" %><!-- 遍历标签 iterator --><!-- ------------------------------------- --><s:iterator value="#list" ><s:property /><br></s:iterator><!-- ------------------------------------- --><hr><s:iterator value="#list" var="name" ><s:property value="#name" /><br></s:iterator><!-- ------------------------------------- --><hr><s:iterator begin="1" end="100" step="1" ><s:property />|</s:iterator><!-- ------------------if else elseif------------------- --><hr><s:if test="#list.size()==4">list长度为4!</s:if><s:elseif test="#list.size()==3">list长度为3!</s:elseif><s:else>list不3不4!</s:else>
4.数据标签<!-- ------------------property 配合ognl表达式页面取值 ------------------- --><hr><s:property value="#list.size()" /><s:property value="#session.user.name" />
5.表单标签    <!-- struts2表单标签 --><!-- 好处1: 内置了一套样式. --><!-- 好处2: 自动回显,根据栈中的属性 --><!-- theme:指定表单的主题 xhtml:默认 simple:没有主题 --><s:form action="demo3action" namespace="/" theme="xhtml" ><s:textfield name="name" label="用户名" ></s:textfield><s:password name="password" label="密码" ></s:password><s:radio list="{'男','女'}" name="gender" label="性别" ></s:radio><s:radio list="#{1:'男',0:'女'}" name="gender" label="性别" ></s:radio><s:checkboxlist list="#{2:'抽烟',1:'喝酒',0:'烫头'}" name="habits" label="爱好" ></s:checkboxlist><s:select list="#{2:'大专',1:'本科',0:'硕士'}" headerkey="" headervalue="---请选择---" name="edu" label="学历" ></s:select><s:file name="photo" label="近照" ></s:file><s:textarea name="desc" label="个人简介" ></s:textarea><s:submit value="提交" ></s:submit></s:form>
6.非表单标签 在action中添加错误信息
this.addactionerror(我是错误信息 哈哈哈);
取出错误信息
    <s:actionerror/>
三、练习:登陆功能核心代码:action代码:public class useraction extends actionsupport implements modeldriven<user> {private user user = new user();private userservice us  = new userserviceimpl();    public string login() throws exception {//1 调用service 执行登陆操作user u = us.login(user);//2 将返回的user对象放入session域作为登陆标识actioncontext.getcontext().getsession().put(user, u);//3 重定向到项目的首页return tohome;     }     @overridepublic user getmodel() {return user;     } }
service层代码:public class userserviceimpl implements userservice {private userdao ud = new userdaoimpl();     @overridepublic user login(user user) {//打开事务        hibernateutils.getcurrentsession().begintransaction();//1.调用dao根据登陆名称查询user对象user existu = ud .getbyusercode(user.getuser_code());//提交事务        hibernateutils.getcurrentsession().gettransaction().commit();        if(existu==null){//获得不到=>抛出异常提示用户名不存在throw new runtimeexception(用户名不存在!);         }//2 比对密码是否一致if(!existu.getuser_password().equals(user.getuser_password())){//不一致=>抛出异常提示密码错误throw new runtimeexception(密码错误!);         }//3 将数据库查询的user返回return existu;     } }
dao层代码:public class userdaoimpl implements userdao {     @overridepublic user getbyusercode(string user_code) {//hql查询//1.获得sessionsession session = hibernateutils.getcurrentsession();//2 书写hqlstring hql = from user where user_code = ? ;//3 创建查询对象query query = session.createquery(hql);//4 设置参数query.setparameter(0, user_code);//5 执行查询user u = (user) query.uniqueresult();return u;     } }
四、练习:校验登陆拦截器核心代码:struts.xml配置文件代码:<?xml version="1.0" encoding="utf-8"?><!doctype struts public "-//apache software foundation//dtd struts configuration 2.3//en" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 指定struts2是否以开发模式运行 1.热加载主配置.(不需要重启即可生效) 2.提供更多错误信息输出,方便开发时的调试 --><constant name="struts.devmode" value="true"></constant><package name="crm" namespace="/" extends="struts-default" ><interceptors><!-- 注册拦截器 --><interceptor name="logininterceptor" class="cn.itheima.web.interceptor.logininterceptor"></interceptor><!-- 注册拦截器栈 --><interceptor-stack name="mystack"><interceptor-ref name="logininterceptor"><param name="excludemethods">login</param></interceptor-ref><interceptor-ref name="defaultstack"></interceptor-ref></interceptor-stack></interceptors><!-- 指定包中的默认拦截器栈 --><default-interceptor-ref name="mystack"></default-interceptor-ref><!-- 定义全局结果集 --><global-results><result name="tologin" type="redirect" >/login.jsp</result></global-results><global-exception-mappings><!-- 如果出现java.lang.runtimeexception异常,就将跳转到名为error的结果 --><exception-mapping result="error" exception="java.lang.runtimeexception"></exception-mapping></global-exception-mappings>     <action name="customeraction_*" class="cn.itheima.web.action.customeraction" method="{1}" ><result name="list" >/jsp/customer/list.jsp</result><result name="tolist" type="redirectaction"> <param name="actionname">customeraction_list</param> <param name="namespace">/</param> </result></action><action name="useraction_*" class="cn.itheima.web.action.useraction" method="{1}" ><result name="tohome" type="redirect" >/index.htm</result><result name="error" >/login.jsp</result></action></package></struts>
补充知识:检查当前页面的父页面是否是自己,不是的话进行跳转,解决页面嵌套问题。<script type="text/javascript">window.onload=function(){        if(window.parent != window){// 如果是在框架中//就让框架页面跳转到登陆页面window.parent.location.href = ${pagecontext.request.contextpath}/login.jsp;         }              };</script>
以上就是javaee——自定义拦截器、struts2标签、登陆功能和校验登陆拦截器的实现的详细内容。
其它类似信息

推荐信息