深入详解Struts2——Struts2初识
2015-09-24 10:43
274 查看
在讨论Struts2之前我们先简单说一下SpringMVC这个Web框架
SpringMVC Web框架是整个Spring集成框架中的一部分。SpringMVC框架是结构最清晰的MVC Model2的实现 ,它围绕DispatcherServlet进行设计。DispatcherServlet的作用是将请求分发给不同的处理器。SpringMVC是高度可配置的,包括可配的处理器(handler)映射、视图(view)解析、本地化(local)解析、主题(theme)解析以及上载文件支持。处理器是对Controller接口的实现,该接口只有一个方法
ModelAndView handleRequest(request,response);
在Struts2诞生之前我们一直在用Struts1,Struts1有两个比较明显的缺点是:
1、令人头疼的ActionForm,这是因为他增加了对象之间复杂的关系
2、单元测试困难,因为他需要依赖HttpServletRequest和HttpServletResponse,这两个类是由Servlet负责实例化的。
基于Struts2的Web应用程序所需要的最少类库
struts2-core-2.0.11.jar Struts2框架的核心类库
xwork-2.0.4.jar XWork类库,Struts2在其上构建
ognl-2.6.11.jar 对象图导航语言,Struts2框架使用的一种表达式语言
freemarker-2.3.8.jar Struts2的UI标签的模板使用freemarker编写
commons-logging-1.0.4.jar Struts2框架使用这个日志包来支持Log4j和JDK1.4+的日志记录
Web.xml文件中配置FilterDispatcher
Struts2框架是基于MVC模式开发的,他提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的servlet过滤器来充当。
我们需要在web.xml文件中配置FilterDispatcher过滤器,指定要映射到FilterDispatcher的URL样式,匹配到这个URL样式的所有请求,都将被Web容器交由FilterDispatcher进行处理。
配置如下
在Struts2中,action执行的结果通常都对应着一个要呈现给用户的result,这个result可以是HTML页面,也可以是一个PDF文件,或者是Excel电子表格。所有的result都是通过字符串名字来标识的。FilterDispatcher根据action返回的结果字符串来选择对应的result显示给用户,下面介绍下几个常量字符串含义
与Servlet API解耦的访问方式
为了避免与servlet API耦合在一起,方便Action类做单元测试,Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这种对象,在Action中,直接使用HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存好读取数据。
ActionContext是action执行的上下文,在ActionContext中保存了action执行所需的一组对象,包括parameters、request、session、application额locale等。
Struts2除了用上述方式还可以让Struts2框架在运行时向Action实例注入request、session和application对象,方法如下:
org.apache.struts2.interceptor.RequestAware
框架利用该接口,向Action实例注入request Map对象:public void setRequest(Map request);
org.apache.struts.interceptor.SessionAware
框架利用该接口,向Action实例注入session Map对象:void setSession(Map session);
org.apache.struts.interceptor.ApplicationAware
框架利用该接口,想Action实例注入application Map对象:void setApplication(Map application);
例如:
SpringMVC Web框架是整个Spring集成框架中的一部分。SpringMVC框架是结构最清晰的MVC Model2的实现 ,它围绕DispatcherServlet进行设计。DispatcherServlet的作用是将请求分发给不同的处理器。SpringMVC是高度可配置的,包括可配的处理器(handler)映射、视图(view)解析、本地化(local)解析、主题(theme)解析以及上载文件支持。处理器是对Controller接口的实现,该接口只有一个方法
ModelAndView handleRequest(request,response);
在Struts2诞生之前我们一直在用Struts1,Struts1有两个比较明显的缺点是:
1、令人头疼的ActionForm,这是因为他增加了对象之间复杂的关系
2、单元测试困难,因为他需要依赖HttpServletRequest和HttpServletResponse,这两个类是由Servlet负责实例化的。
基于Struts2的Web应用程序所需要的最少类库
struts2-core-2.0.11.jar Struts2框架的核心类库
xwork-2.0.4.jar XWork类库,Struts2在其上构建
ognl-2.6.11.jar 对象图导航语言,Struts2框架使用的一种表达式语言
freemarker-2.3.8.jar Struts2的UI标签的模板使用freemarker编写
commons-logging-1.0.4.jar Struts2框架使用这个日志包来支持Log4j和JDK1.4+的日志记录
Web.xml文件中配置FilterDispatcher
Struts2框架是基于MVC模式开发的,他提供了一个核心控制器,用于对所有的请求进行统一处理,这个控制器是由一个名为FilterDispatcher的servlet过滤器来充当。
我们需要在web.xml文件中配置FilterDispatcher过滤器,指定要映射到FilterDispatcher的URL样式,匹配到这个URL样式的所有请求,都将被Web容器交由FilterDispatcher进行处理。
配置如下
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
在Struts2中,action执行的结果通常都对应着一个要呈现给用户的result,这个result可以是HTML页面,也可以是一个PDF文件,或者是Excel电子表格。所有的result都是通过字符串名字来标识的。FilterDispatcher根据action返回的结果字符串来选择对应的result显示给用户,下面介绍下几个常量字符串含义
public interface Action{ // action执行成功,要向用户显示成功页面,返回SUCCESS常量 public static final String SUCCESS = "success"; // action执行成功,但不需要向用户显示结果页面,使用NONE常量 public static final String NONE = "none"; // action执行失败,要向用户显示失败页面,返回ERROR常量 public static final String ERROR = "error"; // action的执行用户需要输入更多信息,要向用户显示输入页面,返回INPUT常量 public static final String INPUT = "input"; // 由于用户没有登录,action不能被执行,要向用户显示登录页面,返回LOGIN常量 public static final String LOGIN = "login"; }
与Servlet API解耦的访问方式
为了避免与servlet API耦合在一起,方便Action类做单元测试,Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这种对象,在Action中,直接使用HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存好读取数据。
ActionContext是action执行的上下文,在ActionContext中保存了action执行所需的一组对象,包括parameters、request、session、application额locale等。
public Object get(Object key); public Map getSession(); public Map getApplication(); ActionContext context = ActionContext.getContext(); HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = reqest.getSession(); ServletContext context = ServletActionContext.getServletContext(); Map request = (Map)context.get("request");// 没有封装类似getRequest()的方法 Map session = context.getSession(); Map application = context.getApplication();
Struts2除了用上述方式还可以让Struts2框架在运行时向Action实例注入request、session和application对象,方法如下:
org.apache.struts2.interceptor.RequestAware
框架利用该接口,向Action实例注入request Map对象:public void setRequest(Map request);
org.apache.struts.interceptor.SessionAware
框架利用该接口,向Action实例注入session Map对象:void setSession(Map session);
org.apache.struts.interceptor.ApplicationAware
框架利用该接口,想Action实例注入application Map对象:void setApplication(Map application);
例如:
public class LoginAction implements Action,RequestAware,SessonAware,ApplicationAware{ private Map request; private Map session; private Map application; // get,set方法 ... }
public class LoginAction2 implements Action,ServletReqestAware,ServletContextAware{ private HttpSerlvetRequest request; private ServletContext context; // get,set方法 ... }
相关文章推荐
- Eclipse:引用一个项目作为类库(图文教程)
- 【转】java读写二进制文件的解决方法
- 【转】JAVA 读写二进制文件
- java学习3-二分法查找法
- eclipse将web项目转化为maven项目
- Spring获取XML
- Spring JdbcTemplate 批量插入或更新操作
- java学习笔记IO输入与输出——常用工具类(1)
- Spring通过构造方法注入的四种方式
- shiro在springmvc,hibernate,ehcache里面的集成使用
- java对象持久化
- Java正则表达式工具类
- 单立模式 Java
- Java之路
- Java基本数据类型总结
- java 接口及抽象类
- 在命令行中执行java的时候指定依赖jar
- Reflect-Java
- java中的byte和char
- 关于eclipse中MAVEN WEB工程中编译问题