Struts2学习-2

本文详细介绍了Struts2的工作原理,包括StrutsPrepareAndExecuteFilter过滤器的作用,以及如何自定义拦截器进行权限控制和性能统计。此外,还探讨了在Struts2中获取Servlet相关对象的方式,讲解了ValueStack、OGNL表达式及其在标签中的应用,提供了对Struts2常用标签的解释和使用示例。
摘要由CSDN通过智能技术生成
一、Struts的工作原理及核心过滤器
    1、StrutsPrepareAndExecuteFilter过滤器其实是包含2部分的
            StrutsPrepareFilter:做准备
            StrutsExecuteFilter:进入Struts2的核心处理。如果是Struts2的请求就会进入该过滤器,处理完后,不放行(由结果类负责显示)。如果是非Struts2的请求,比如默认jsp的请求,直接放行。
    如果用不到其他过滤器,配置StrutsPrepareAndExecuteFilter即可;
    如果用到其他过滤器,还需要使用Struts2准备好的环境,使用StrutsPrepareFilter,StrutsExecuteFilter2个过滤器,其他过滤器放在两者之间。如下

showcase,各种应用的案例,在struts2-showcase里面找各种案例
 
2、Struts2中实现了一种可以访问jar包或类路径下的静态资源(css、js等)的方式。
文档中介绍了,可以把静态资源放到org.apache.struts2.static或者template包中,可以直接访问,例如
访问template.aaa中的bbb.css,则
http://localhost:8080/day22_03_strutsStatics/struts/aaa/bbb.css
 
或者自己对静态资源访问的地址进行设置,在web.xml中设置
 <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
        <param-name>packages</param-name>
        <param-value>com.itheima.statics</param-value>
    </init-param>
</filter>
则访问com.itheima.statics中的资源ccc.css,的地址为
http://localhost:8080/day22_03_strutsStatics/struts/ccc.css
 
 
二、在动作类中获取Servlet相关对象的引用
方式一:ServletActionContext的静态方法可以得到Servlet相关的对象
//用Servlet相关的对象request response servletContext HttpSession
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext sc = ServletActionContext.getServletContext();
HttpSession session = request.getSession();
 
方式二:实现ServletRequestAware接口,struts2框架就会把request对象注入进来,通过拦截器servletConfig。
Action实现如下接口,struts框架则会为其注入相应的Servlet API对象:
ServletRequestAware
ServletResponseAware
ServletContextAware
实现其他对象或者功能,参考拦截器servletConfig。
 
三、自定义拦截器
注意:当拦截器拦截,返回结果集后,则后面的都不会执行,直接返回结果集。
1、执行效率统计拦截器
建立拦截器ElapsedTimeInterceprot实现Interceptor接口
//动作方法及结果处理耗时统计拦截器
public class ElapsedTimeInterceprot implements Interceptor {
    public String intercept(ActionInvocation invocation) throws Exception {
        long beginTime = System.nanoTime();//纳秒:1毫秒=1000000纳秒
        String result = invocation.invoke();//放行:拦截前要做的事放在invocation.invoke()之前,拦截后放在之后
        //结果处理完毕后执行
        long endTime = System.nanoTime();
        System.out.println(invocation.getInvocationContext().getName()+"动作执行耗时:"+(endTime-beginTime)+"纳秒");
        return result;
    }
    public void destroy() {
    }
    public void init() {
    }
}
进行配置文件设置
<package name="p1" extends="struts-default">
    <interceptors>
        <interceptor name="elapsedTime" class="com.itheima.interceptors.ElapsedTimeInterceprot"></interceptor>
    </interceptors>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值