Struts2学习笔记
来源:互联网 发布:sql数据库查询语句大全 编辑:程序博客网 时间:2024/06/10 18:39
学习资料:
官网
turorials
入门,其中get start部分里面有基本各知识点简单例子
Guides
深入指南(重点)
FAQ
研磨Struts
重要知识点
1、Struts2体系架构、系统结构
注:上图为比较老的版本框架图,其中Filter部分中,FilterCleanUp及FilterDispatcher已经被StrutsPrepareAndExecuteFilter、StrutsPrepareFilter、StrutsExecutionFilter替换。
架构图上有好多东西,不要着急,接下来逐个击破。首先看看它们各自是做什么的,跟着图上的箭头一个一个来看:
- FilterDispatcher是整个Struts2的调度中心,根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。
- ActionMapper提供了HTTP请求与action执行之间的映射,简单点说,ActionMapper会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。
- ActionProxy是一个特别的中间层,位于Action和xwork之间,使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。
- ConfigurationManager是xwork配置的管理中心,通俗的讲,可以把它看做struts.xml这个配置文件在内存中的对应。
- struts.xml是Stuts2的应用配置文件,负责诸如URL与Action之间映射的配置、以及执行后页面跳转的Result配置等。
- ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result。
- Interceptor(拦截器):拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。类似于我们熟悉的javax.servlet.Filter。
- Action:动作类是Struts2中的动作执行单元。用来处理用户请求,并封装业务所需要的数据。
- Result:Result就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如Jsp,FreeMarker等。
- Templates:各种视图类型的页面模板,比如JSP就是一种模板页面技术。
- Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术JSP、velocity、freemarker,可以在不同的视图技术中,几乎没有差别的使用这些标签。
可参考:
《研磨struts2》第三章 Struts2的架构和运行流程 之 3.1 Struts2的系统架构
2、性能调优(参考guide's Performance Tuning)
关闭日志及开发模式
不要使用不需要的拦截器,如I18nInterceptor,它会导致每次新的请求都创建session
使用正确的HTTP headers ( Cache-Control & Expires)
无需要就不要创建session
......
3、拦截器实现原理及编写
4、Struts2核心类、接口
StrutsPrepareAndExecutionFilter
Action
Result
Interceptor
ActionMapping
ActionProxy
ActionInvocation
ActionContext
StrutsTestCase
StrutsSpringTestCase
5、如何在Action中获取到HttpServletRequest、HttpServletResponse及HttpSession对象?
可参考:
《研磨struts2》第七章 值栈和OGNL 之 7.4 ActionContext和ServletActionContext
方法一:通过ServletActionContext来获取:
HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); ServletContext servletContext = ServletActionContext.getServletContext(); PageContext pageContext = ServletActionContext.getPageContext(); HttpSession session = ServletActionContext.getRequest().getSession();方法二:
通过IoC/DI的方式来获取相应的Servlet对象
还可以通过IoC/DI的方式来获取相应的Servlet对象,对应关系是:
- ServletRequestAware:通过这个接口来获取HttpServletRequest对象
- ServletResponseAware:通过这个接口来获取HttpServletResponse对象
用ServletRequestAware来示例一下。
(1)修改Action,让其实现ServletRequestAware接口,示例代码如:
public class OgnlAction extends ActionSupport implements ServletRequestAware{ private HttpServletRequest request = null; public void setServletRequest(HttpServletRequest request) { this.request = request; } public String execute(){ request.setAttribute("request", "Request的属性值"); request.getSession().setAttribute("sessionTestKey", "测试SessionAware"); return this.SUCCESS; } }
- struts2学习笔记--struts2配置
- Struts2学习笔记--安装struts2
- struts2.01学习笔记
- struts2学习笔记
- Struts2学习笔记1
- struts2.0 学习笔记
- struts2.01学习笔记!
- struts2学习笔记
- Struts2学习笔记1
- struts2 学习笔记
- Struts2学习笔记(1)
- struts2学习笔记(2)
- struts2学习笔记(3)
- Struts2学习笔记
- struts2学习笔记
- struts2学习笔记2
- Struts2学习笔记
- struts2学习笔记(一)
- Java IO 中的设计模式
- 尚学堂 linux视频学习笔记(未完待续)
- Selenium
- Quagga(Zebra)基本配置
- 学习笔记之 java的动态绑定与静态绑定
- Struts2学习笔记
- MessagePanel
- Java程序将字符串转为unicode的方法
- Win32多线程程序开发(1)---创建线程
- uva :10123 - No Tipping(dfs + 几何力距 )
- 关联容器
- Js中Prototype、__proto__、Constructor、Object、Function关系介绍
- 鼠标经过html 表格的行时,进行颜色区分
- Angularjs 创建services的几种方式