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




有关包的说明:
- org.apache.struts2. components 该包封装视图组件 , Struts2在视图组件上有了很大加强 , 不仅增加了组件的属性个数 , 更新增了几个非常有用的组件 , 如updownselect、doubleselect、datetimepicker、token、tree等 。另外 , Struts2可视化视图组件开始支持主题(theme) , 缺省情况下 , 使用自带的缺省主题 , 如果要自定义页面效果 , 需要将组件的theme属性设置为simple 。
- org.apache.struts2. config
该包定义与配置相关的接口和类 。实际上 , 工程中的xml和properties文件的读取和解析都是由WebWork完成的 , Struts只做了少量的工作 。 - org.apache.struts2.dispatcher
Struts2的核心包 , 最重要的类都放在该包中 。 - org.apache.struts2.impl
该包只定义了3个类 , 他们是StrutsActionProxy、StrutsActionProxyFactory、StrutsObjectFactory , 这三个类都是对xwork的扩展 。 - org.apache.struts2.interceptor
定义内置的截拦器 。 - org.apache.struts2.servlet
用HttpServletRequest相关方法实现principalproxy接口 。 - org.apache.struts2.util
实用包 - org.apache.struts2.views
提供freemarker、jsp、velocity等不同类型的页面呈现
- StrutsStatics
Struts常数 。常数可以用来获取或设置对象从行动中或其他集合 。 - RequestUtils
请求处理程序类 。此类只有一个方法getServletPath , 作用检索当前请求的servlet路径 - ServletActionContext
网站的特定的上下文信息 - StrutsConstants
该类提供了框架配置键的中心位置用于存储和检索配置设置 。 - StrutsException
通用运行时异常类
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中的方法:
- void init(FilterConfig filterConfig) 继承自Filter , 过滤器的初始化
- doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 继承自Filter , 执行过滤器
- void destroy() 继承自Filter , 用于资源释放
- void postInit(Dispatcher dispatcher, FilterConfig filterConfig) Callback for post initialization(一个空的方法 , 用于方法回调初始化)
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();}}
