Structs框架原理案例详解 Java

Java,Structs框架原理案例详解,博智网带你了解详细信息 。
1 Struts2框架内部执行过程

Structs框架原理案例详解 Java


Structs框架原理案例详解 Java


Structs框架原理案例详解 Java


Structs框架原理案例详解 Java


有关包的说明:
  1. org.apache.struts2. components    该包封装视图组件 , Struts2在视图组件上有了很大加强 , 不仅增加了组件的属性个数 , 更新增了几个非常有用的组件 , 如updownselect、doubleselect、datetimepicker、token、tree等 。另外 , Struts2可视化视图组件开始支持主题(theme) , 缺省情况下 , 使用自带的缺省主题 , 如果要自定义页面效果 , 需要将组件的theme属性设置为simple 。
  2. org.apache.struts2. config
    该包定义与配置相关的接口和类 。实际上 , 工程中的xml和properties文件的读取和解析都是由WebWork完成的 , Struts只做了少量的工作 。
  3. org.apache.struts2.dispatcher
    Struts2的核心包 , 最重要的类都放在该包中 。
  4. org.apache.struts2.impl
    该包只定义了3个类 , 他们是StrutsActionProxy、StrutsActionProxyFactory、StrutsObjectFactory , 这三个类都是对xwork的扩展 。
  5. org.apache.struts2.interceptor
    定义内置的截拦器 。
  6. org.apache.struts2.servlet
    用HttpServletRequest相关方法实现principalproxy接口 。
  7. org.apache.struts2.util
    实用包
  8. org.apache.struts2.views
    提供freemarker、jsp、velocity等不同类型的页面呈现
根目录下的5个文件说明:
  1. StrutsStatics 
    Struts常数 。常数可以用来获取或设置对象从行动中或其他集合 。
  2. RequestUtils 
    请求处理程序类 。此类只有一个方法getServletPath , 作用检索当前请求的servlet路径
  3. ServletActionContext 
    网站的特定的上下文信息
  4. StrutsConstants
    该类提供了框架配置键的中心位置用于存储和检索配置设置 。
  5. StrutsException
    通用运行时异常类
(1)Structs2请求过程源码分析:
Struts框架都会在web.xml中注册和映射structs2,配置内容如下:
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>
StrutsPrepareAndExecuteFilter中的方法:
  1. void init(FilterConfig filterConfig)    继承自Filter , 过滤器的初始化
  2. doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 继承自Filter , 执行过滤器
  3. void destroy()     继承自Filter , 用于资源释放
  4. void postInit(Dispatcher dispatcher, FilterConfig filterConfig)     Callback for post initialization(一个空的方法 , 用于方法回调初始化) 
web 容器一启动 , 就会初始化核心过滤器StrutsPrepareAndExecuteFilter,并且执行初始化方法 , 初始化方法如下:
public void init(FilterConfig filterConfig) throws ServletException {InitOperations init = new InitOperations();Dispatcher dispatcher = null;try {//封装filterConfig , 其中有个主要方法getInitParameterNames将参数名字以String格式存储在List中FilterHostConfig config = new FilterHostConfig(filterConfig);//初始化struts内部日志init.initLogging(config);//创建dispatcher  , 并初始化dispatcher = init.initDispatcher(config);init.initStaticContentLoader(config, dispatcher);//初始化类属性:prepare 、executeprepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher);execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);this.excludedPatterns = init.buildExcludedPatternsList(dispatcher);//回调空的postInit方法postInit(dispatcher, filterConfig);} finally {if (dispatcher != null) {dispatcher.cleanUpAfterInit();}init.cleanup();}}
关于封装filterConfig,首先看一下FilterHostConfig,源码如下:
【Structs框架原理案例详解 Java】public class FilterHostConfig implements HostConfig {private FilterConfig config;//构造方法public FilterHostConfig(FilterConfig config) {this.config = config;}//根据init-param配置的param-name获取param-value的值public String getInitParameter(String key) {return config.getInitParameter(key);}//返回初始化参数名的迭代器public Iterator<String> getInitParameterNames() {return MakeIterator.convert(config.getInitParameterNames());}//返回Servlet上下文public ServletContext getServletContext() {return config.getServletContext();}}

推荐阅读