随笔分类 - Struts2
摘要:1 再探ActionContext 我们知道,ActionContext是Action执行时的上下文,里面存放着Action在执行时需要用到的对象,也称之为广义值栈。Struts2在每次执行Action之前都会创建新的ActionContext,在同一个线程里ActionContext里面的属...
阅读全文
摘要:1OGNL概述 OGNL是对象图导航语言Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的属性,调用对象的方法,遍历整个对象的结构图,实现字段类型...
阅读全文
摘要:在值栈(前篇)我们学习了值栈的基本知识,接下来,来看看在程序中具体如何使用值栈。 1ActionContext的基本使用 1.1如何获取? 要获取ActionContext有两个基本的方法,如果在不能获取到ActionInvocation的地方,可以直接使用ActionContext一个静...
阅读全文
摘要:1值栈是什么? 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心。 Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action、Result、Interceptor等Struts2的其他部分使用,这样一来,数据被集中管理起来而不会凌乱,大大方便了程序编写...
阅读全文
摘要:在实际开发中,一个常见的功能要求是:有很多操作都需要登录后才能操作,如果操作的时候还没有登录,那么通常情况下会要求跳转回到登录页面。 1)如何实现这样的功能呢? 在具体实现之前,先来考虑几个问题: (1)这个功能应该在哪里实现? 要实现登录检查的功能,很明显是在Action运行之前,就要...
阅读全文
摘要:Struts2自带的logger拦截器只是打印出了Action所对应的URL以及执行的方法名称,这对实际开发来说是肯定不够的。实际开发中为了调试方便,要记录的信息比较多,通常需要把这次请求相关的几乎所有信息都打印出来,比如:要访问哪个Action类要访问这个Action类的哪个方法打印出这次请求...
阅读全文
摘要:1)什么是自定义的拦截器 所谓自定义的拦截器,就是由我们自己定义并实现的拦截器,而不是由Struts2定义好的拦截器。虽然Struts2的预定义拦截器已经满足了大多数情况的需要。但在有些时候,我们可能会根据项目的实际需要而自定义一些拦截器,来实现一些特别的功能。 2)开发自定义拦截器 其实...
阅读全文
摘要:1)预定义拦截器 Struts2有默认的拦截器配置,也就是说,虽然我们没有主动去配置任何关于拦截器的东西,但是Struts2会使用默认引用的拦截器。由于Struts2的默认拦截器声明和引用都在这个Struts-default.xml里面,因此我们需要到这个文件的struts-default包里...
阅读全文
摘要:1)拦截器是什么? 拦截器(Interceptor)是Struts2最强大的特性之一,它是一种可以让你在Action执行之前和Result执行之后进行一些功能处理的机制。来回顾一下官方给出的Struts2系统架构图中关于拦截器的部分,如下图所示: 这个图清晰的描述出了拦截器的运行地位,就是用...
阅读全文
摘要:在Action中execute方法声明为:public String execute() throws Exception,这样,Action可以抛出任何Exception。 1)自己实现异常处理 我们还以helloWorldAction为例,在Action的execute方法中这样写:pu...
阅读全文
摘要:1)基本使用 名称为“chain”的ResultType,在struts-default.xml里的配置如下: chain是一种特殊的视图结果,用来将Action执行完之后链接到另一个Action中继续执行,新的Action使用上一个Action的上下文(ActionContext),数据也...
阅读全文
摘要:1)基本使用 名称为“redirect”的ResultType,在struts-default.xml里的配置如下: 通过配置可以看出,它对应的实现类是ServletRedirectResult。 这种Result同常也使用JSP作为视图技术。它包装的是javax.servlet.http...
阅读全文
摘要:1)基本使用 名称为“dispatcher”的ResultType,在struts-default.xml里的配置如下: 通过配置可以看出,它对应的实现类是ServletDispatcherResult。 如果采用JSP作为视图的实现技术,那么这个ResultType是最常用的。在这个Re...
阅读全文
摘要:简单的说,Result是Action执行完后返回的一个字符串,它指示了Action执行完成后,下一个页面在哪里。Result仅仅是个字符串,仅仅是用来指示下一个页面的,那么如何才能够到达下一个页面呢?下一个页面如何能正确地展示结果呢?这就该引出一个新概念——ResultType,所谓Result...
阅读全文
摘要:Struts2的Action的生命周期是:Struts2为每个请求都重新初始化一个Action的实例。可以稍微改造一下代码来验证一下。给HelloWorldAction加上一个public无参的构造方法,在里面输出一句话。大家都知道,一个Java类如果没有写构造方法,那么会有一个默认的publi...
阅读全文
摘要:在以前的学习中,元素的配置,都是用明确的配置,其name、class等属性都是一个明确的值。其实Struts2还支持class属性和method属性使用来自name属性的通配符。 1)接下来看看使用通配符的示例,如果我们使用以下配置: /s2impl/welcome.jsp 在...
阅读全文
摘要:元素可以把逻辑上相关的一组Action、Result、Intercepter等元素封装起来,形成一个独立的模块,package可以继承其他的package,也可以作为父包被其他的package继承,比如“”中,helloworld这个包就继承了struts-default这个包。 元素有如下属...
阅读全文
摘要:在Struts2中,Action可以不实现任何特殊的接口或者继承特殊的类,仅仅是一个POJO(Plain Old Java Object,简单的Java对象)就可以;也可以实现Xwork2中的Action接口;但是由于Xwork的Action接口非常简单,为程序员提供的帮助有限,因此,在实际开发...
阅读全文
摘要:1)前提条件 在讲解流程之前,假设我们已经建立了的一个名为strutsDeepen的web工程,该工程仅仅实现了简单的用户登陆与欢迎界面。具体的实现为:在web.xml中配置了Struts2的过滤器写了一个Action类,名称为loginAction在struts.xml中配置了这个Actio...
阅读全文
摘要:Struts2的官方文档里附带了Struts2的架构图,下面这张图上展示了Struts2的内部模块,以及它们的运行流程。 这张图上分了好多块,彼此之间相互联系,先浏览一下各块的名字,再留心一下运行图最下面的图例,分为四种颜色。橙色是Servlet Filters,过滤器链,所有的请求都要经过F...
阅读全文