三沣开发知识 购物 网址 小说 美女秀 游戏 电影下载 图说天下 生肖星座 新闻 笑话 | IT开发 软件下载 手机论坛 三沣软件 360图书馆
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> Java -> JAVAEE——struts2_04:自定义拦截器、struts2标签、登陆功能和校验登陆拦截器的实现 -> 正文阅读
 

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

JAVAEE——struts2_04:自定义拦截器、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";
    }

    @Override
    public User getModel() {
        return user;
    }
}

  Service层代码:

public class UserServiceImpl implements UserService {
    private UserDao ud = new UserDaoImpl();
    @Override
    public 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 {
    @Override
    public User getByUserCode(String user_code) {
        //HQL查询
        //1.获得Session
        Session session = HibernateUtils.getCurrentSession();
        //2 书写HQL
        String 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>

  Java 最新文章
Java学习路线图
网络通信
多线程【Thread、线程创建】
Eclipse中配置resin 4.x
eclipse通过maven构建web项目步骤说明
Spring+TaskExecutor实例
java获得采集网页内容的方法小结
【Spring】7、拦截器HandlerInterceptor
Java实现Excel中的NORMSDIST函数和NORMSINV
java攻城师之路
上一篇文章      下一篇文章      查看所有文章
加:2017-06-19 01:42:54  更:2017-06-19 01:43:03 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 母婴/育儿 软件开发资料 网页快照 文字转语音 购物精选 软件 美食菜谱 新闻中心 电影下载 小游戏 Chinese Culture
生肖星座解梦 三沣玩客 拍拍 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 天下美图 中国文化英文 多播视频
2017-6-24 23:36:05
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库