- 浏览: 269477 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
Struts2执行流程
1. web.xml 部署描述符
2. FilterDispatcher 实现StrutsStatics, Filter接口
(1)Filter:一个filter是一个对象用于执行过滤任务为每个请求资源(一个servlet或静态内容),或响应一个资源,或两者.过滤器执行过滤是在doFilter方法中.每个过滤器访问一个FilterConfig对象从中获取初始化参数,一个引用到ServletContext可以被使用,例如,在过滤器任务需要时装载资源.过滤器的配置在Web应用程序的部署描述符中.
init()-初始化过滤器,它的输入参数javax.servlet.FilterConfig的一个实例,可以这里初始化过滤要使用到的FilterConfig。这个方法由Web容器自动调用。
doFilter()-进行具体的过滤操作,这个方法以javax.servlet.ServletRequest请求信息, javax.servlet.ServletResponse响应信息,javax.servlet.FilterChain过滤链。过滤链,在Web应 用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。在这个方法中调用FilterChain的 doFilter(javax.servlet.ServletRequest, javax.servlet.SerletResponse)方法就可以传递到链中的下一个过滤器。
destory()-销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为null。
(2)StrutsStatics: 定义Struts中使用的常量,常量用来获取和设置Action上下文以外的对象或其它集合.可以使用如下方式获取这些对象
ActionContext context = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest)context.get(HTTP_REQUEST);
(3) FilterConfig接口:一个过滤器配置对象,用于Servlet容器传递信息到过滤器在初始化期间.
BeanSelectionProvider类:选择框架实现的关键扩展点,用于装载属性常量.选择的实现是从container builder使用的名字定义关联属性,默认名为”struts”
例如:获取request
ActionContext.getContext().put(HTTP_REQUEST, request)
执行流程:
※ init(FilterConfig filterConfig)初始化过滤器
->createDispatcher(filterConfig); 创建调度器,返回带有过滤器参数Dispatcher
->执行Dispatcher的init方法,首先创建configurationManager,如果为null使用BeanSelectionProvider. DEFAULT_BEAN_NAME参数创建.
-> 配置的初始化
//加载org/apache/struts2/default.properties文件
init_DefaultProperties(); // [1]
//加载格式相同的struts-default.xml,struts-plugin.xml,struts.xml
init_TraditionalXmlConfigurations(); // [2]
//可读取public static final String STRUTS_LOCALE = "struts.locale";配置
init_LegacyStrutsProperties(); // [3]
//加载Web.xml中的actionPackages配置
init_ZeroConfiguration(); // [4]
//读取configProviders参数,配置用户定义的provider
init_CustomConfigurationProviders(); // [5]
//Struts2.0.9中为空
init_MethodConfigurationProvider();
//初始化Filter中的config参数中指定的配置文件, initParams参数的获取是在Dispatcher创建时
init_FilterInitParameters() ; // [6]
//在BeanSelectionProvider中注册别名
init_AliasStandardObjects() ; // [7]
//读取public static final String STRUTS_I18N_RELOAD = "struts.i18n.reload";参数,
Container container = init_PreloadConfiguration();
//读取public static final String STRUTS_CONFIGURATION_XML_RELOAD = "struts.configuration.xml.reload";
init_CheckConfigurationReloading(container);
//初始化weblogic相关配置
init_CheckWebLogicWorkaround(container);
-> String param = filterConfig.getInitParameter("packages");
String packages = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging";设置静态资源Prefixes
※->doFilter
处理一个Action和它请求的静态资源,过滤器尝试配置请求到一个Action mapping.如果mapping找到了,Action的处理在dispatcher的serviceAction方法.如果Action处理失败,doFilter将会尝试去创建一个错误页面通过dispatcher.另外请求一个静态资源,资源将直接Copy到响应,使用适当的caching头设置.如果请求没有匹配一个Action mapping或一个静态资源页,那么将通过.
(1) getServletContext
Servlet2.3规范中Servlet Context可以从Session中从新获取。不幸的是,一些版本的Weblogic不能够从新获取从Filter的配置中.因此,这个方法允许子类重新获取Servlet Context从其它源.
(2) prepareDispatcherAndWrapRequest(request, response)
包装和返回给定的request,如果需要,作为处理multipart data包装给定的request.
1.dispatcher.prepare(request, response);
准备request,包括设置encoding和locale,使用注入的public static final String STRUTS_I18N_ENCODING = "struts.i18n.encoding"、public static final String STRUTS_LOCALE = "struts.locale"和public static final String STRUTS_DISPATCHER_PARAMETERSWORKAROUND = "struts.dispatcher.parametersWorkaround";(是否使用一个Servlet request参数,对一些版本的Weblogic是必需的)
2.request = dispatcher.wrapRequest(request, getServletContext());
首先包装request,通过预先编码可以使用multipart/form-data参数访问的情况.
3. mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());找到对应的Action映射.
4. 如果找不到就去查找静态资源.
可以设置public static final String STRUTS_SERVE_STATIC_CONTENT = "struts.serve.static";
5.然后是正常的chain.doFilter(request, response);请求传递
6. dispatcher.serviceAction(request, response, servletContext, mapping);
装载映射的Acation类和调用适当的Action方法,或直接转向Result.这个方法首先创建Action上下文从给定的参数,并且装载一个ActionProxy从给定的Action名和namespace.然后,Action方法被直行和输出通道通过response对象.Action没有找到,发送到用户是通过Dispatcher的sendError方法,使用404返回码.所有的其它错误是通过抛出ServletException异常.
①ValueStack stack = (ValueStack) request.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
如果已经存在这样的值栈,创建一个新的,拷贝和传递它为新的Action所使用.
② ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
namespace, name, extraContext, true, false);
ActionProxy将会查阅框架的配置文件管理(初始化是从Struts.xml文件),下一步,ActionProxy创建一个ActionInvocation,它来负责命令模式的实现. 包括调用拦截器在调用Action自身之前.
③ proxy.setMethod(method);
设置Action调用中要执行的方法.如果没有方法被指定,将会由Action的配置来提供.
设置Action中执行的方法.
④如果ActionMapping直接到一个result
if (mapping.getResult() != null) {
Result result = mapping.getResult();
result.execute(proxy.getInvocation());
} else {
//没有配置result的情况
proxy.execute();
}
⑤调用ActionProxy接口中的String execute() throws Exception;方法,它的实现类为DefaultActionProxy,在其中会调用retCode = invocation.invoke()方法.
⑥ActionInvocation接口的实现类DefaultActionInvocation的invoke方法首先调用拦截器栈,如果拦截器执行完,调用Action使用resultCode = invokeActionOnly();
⑦接下来迭代preResultListeners中的PreResultListener并执行其中的listener.beforeResult(this, resultCode);方法,在Action与Result之间.
⑧执行Result
if (proxy.getExecuteResult()) {
executeResult();
}
⑨到此serviceAction方法执行完毕,返回到FilterDispatcher的doFilter方法中
⑩释放本地线程和创建的DispatchListeners
public void destroy() {
if (dispatcher == null) {
LOG.warn("something is seriously wrong, Dispatcher is not initialized (null) ");
} else {
dispatcher.cleanup();
}
}
1. FilterDispatcher
(一)Struts的主要filter有四种不同的职责:
(1) 执行Action
这个Filter执行Action是通过查找ActionMapper来确定请求的URL将会调用的Action.如果mapper中指定,其它的Filter chain将会停止并且Action会被调用.这一点非常重要,它意味着像SiteMesh过滤器必需被放置在它之前或者将不会被修饰输出的Action.
(2) Cleaning up ActionContext (清理上下文)
这个Filter将自动为你清理ActionContext,确保不会出现内存泄漏.然而,有时会引起一些集成上的问题像使用SiteMesh.见ActionContextCleanUp来获取更多的信息处时这个问题.
(3) Serving static content(静态内容服务)
这个过滤器也服务于普通的静态内容,需要使用Struts中的很多部分,像JavaSctipt文件,CSS文件,等等.它的工作通过查找请求中的/struts/*,并且映射值在”/struts/”后面的常用包,它是可选的在你的classpath中.默认情况下,下面的包将会自动被搜索:
★org.apache.struts2.static
★template
这意味着你可以请求/struts/xhtml/styles.css和XHTML UI主题的默认stylesheet将会被返回.同样的很多AJAX UI组件需要的JavaScript文件也可以在org.apache.struts2.static包中找到.如果你希望添加额外的包被查找到,你可以增加一个逗号分隔的列表在过滤器的被始化参数”packages”中.注意,这样将暴露了你的包中的敏感信息,像访问数据库的属性文件.
(4) Kicking off XWork's interceptor chain for the request lifecycle
(二)这个Filter必需映射到所有的请求.除非你道它在做什么,通常映射到/*种URL模式
(三)这个Filter支持如下init-params:
★config---------------一个逗号分隔的XML配置文件将会被装载
★actionPackages----一个逗号分隔的Java Action包将会被扫描.
★configProviders---一逗号分隔的实现com.opensymphony.xwork2.config.ConfigurationProvider 接口的Java类列表,用于构建com.opensymphony.xwork2.config.Configuration。
★*-------------任何其它的参数,作为框架的常量来对待.
(四)使用定制的Dispatcher, createDispatcher方法可以被覆盖通过子类.
通配符映射
随着应用程序的增大,Action的数量也会增多.通配符可以用来组合简单的映射到多个通用映射.
最好的解释通配符的方法是通过一个例子和它是怎样工作的来展示.这个例子修改一个习惯上用通配符来匹配所有以/edit开头的页面;
<!-- Generic edit* mapping -->
<action
name="/edit*"
class="org.apache.struts.webapp.example.Edit{1}Action">
<result
name="failure"
path="/mainMenu.jsp"/>
<result
path="/\{1\}.jsp"/>
</action>
在路径中的“*”属性允许映射匹配请求的URI /editSubscription,editRegistration,或其它URI以/edit开头的,然而/editSubscription/add将不会被匹配.URI的部分匹配通过通配符,被替代的是Action映射中的变量属性和Action结果替换{1}.为了其它的请求,框架将查看Action映射和Action result中包括的新值.
映射的匹配依赖于请求,依次出现在框架的配置文件中。如果一个或多个模式匹配最后一个模式将得到,所以较少的指定模式,必需呈现多个指向同一个之前.然而,如果请求的URL可以被匹配依赖于一个路径不需要任何通配置,没有通配置被执行,同时顺序也不重要了.
通配符模式可以包含一个或多个下面的指定标记:
*匹配一个或多个字符包括斜线(‘/’)字符.
** 匹配一个或多个字符除了斜线(‘/’)字符.
\字符,反斜杠字符用来作为一个脱字符连接.因此*匹配字符星(‘*’),和匹配字符反斜框(‘\’).
在Action Mapping和Action Result,通配符匹配值可以被该问使用标记{N},N从1到9指示通配符匹配值到被替代属性 .全部的请求URI可以被该问用{0}标记.
同样的,Action Mapping属性(设置使用<set-property key=”foo” value=”bar”>语法)将接受通配符匹配字符串在他们的值属性.
像Action Mapping,Action result属性(设置使用<set-property key=”foo” value=”bar”>语法)将接受通配符匹配字符串在他们的值属性.
例子代码:
<action name="Login_*" method="{1}" class="example.Login">
<result name="input">/example/Login.jsp</result>
<result type="redirect-action">Menu</result>
</action>
<action name="*" class="example.ExampleSupport">
<result>/example/{1}.jsp</result>
</action>
源文件:http://hi.baidu.com/vsandjava/blog/item/49c10ef7d8087120730eec5b.html
1. web.xml 部署描述符
2. FilterDispatcher 实现StrutsStatics, Filter接口
(1)Filter:一个filter是一个对象用于执行过滤任务为每个请求资源(一个servlet或静态内容),或响应一个资源,或两者.过滤器执行过滤是在doFilter方法中.每个过滤器访问一个FilterConfig对象从中获取初始化参数,一个引用到ServletContext可以被使用,例如,在过滤器任务需要时装载资源.过滤器的配置在Web应用程序的部署描述符中.
init()-初始化过滤器,它的输入参数javax.servlet.FilterConfig的一个实例,可以这里初始化过滤要使用到的FilterConfig。这个方法由Web容器自动调用。
doFilter()-进行具体的过滤操作,这个方法以javax.servlet.ServletRequest请求信息, javax.servlet.ServletResponse响应信息,javax.servlet.FilterChain过滤链。过滤链,在Web应 用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。在这个方法中调用FilterChain的 doFilter(javax.servlet.ServletRequest, javax.servlet.SerletResponse)方法就可以传递到链中的下一个过滤器。
destory()-销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为null。
(2)StrutsStatics: 定义Struts中使用的常量,常量用来获取和设置Action上下文以外的对象或其它集合.可以使用如下方式获取这些对象
ActionContext context = ActionContext.getContext();
HttpServletRequest request = (HttpServletRequest)context.get(HTTP_REQUEST);
(3) FilterConfig接口:一个过滤器配置对象,用于Servlet容器传递信息到过滤器在初始化期间.
BeanSelectionProvider类:选择框架实现的关键扩展点,用于装载属性常量.选择的实现是从container builder使用的名字定义关联属性,默认名为”struts”
例如:获取request
ActionContext.getContext().put(HTTP_REQUEST, request)
执行流程:
※ init(FilterConfig filterConfig)初始化过滤器
->createDispatcher(filterConfig); 创建调度器,返回带有过滤器参数Dispatcher
->执行Dispatcher的init方法,首先创建configurationManager,如果为null使用BeanSelectionProvider. DEFAULT_BEAN_NAME参数创建.
-> 配置的初始化
//加载org/apache/struts2/default.properties文件
init_DefaultProperties(); // [1]
//加载格式相同的struts-default.xml,struts-plugin.xml,struts.xml
init_TraditionalXmlConfigurations(); // [2]
//可读取public static final String STRUTS_LOCALE = "struts.locale";配置
init_LegacyStrutsProperties(); // [3]
//加载Web.xml中的actionPackages配置
init_ZeroConfiguration(); // [4]
//读取configProviders参数,配置用户定义的provider
init_CustomConfigurationProviders(); // [5]
//Struts2.0.9中为空
init_MethodConfigurationProvider();
//初始化Filter中的config参数中指定的配置文件, initParams参数的获取是在Dispatcher创建时
init_FilterInitParameters() ; // [6]
//在BeanSelectionProvider中注册别名
init_AliasStandardObjects() ; // [7]
//读取public static final String STRUTS_I18N_RELOAD = "struts.i18n.reload";参数,
Container container = init_PreloadConfiguration();
//读取public static final String STRUTS_CONFIGURATION_XML_RELOAD = "struts.configuration.xml.reload";
init_CheckConfigurationReloading(container);
//初始化weblogic相关配置
init_CheckWebLogicWorkaround(container);
-> String param = filterConfig.getInitParameter("packages");
String packages = "org.apache.struts2.static template org.apache.struts2.interceptor.debugging";设置静态资源Prefixes
※->doFilter
处理一个Action和它请求的静态资源,过滤器尝试配置请求到一个Action mapping.如果mapping找到了,Action的处理在dispatcher的serviceAction方法.如果Action处理失败,doFilter将会尝试去创建一个错误页面通过dispatcher.另外请求一个静态资源,资源将直接Copy到响应,使用适当的caching头设置.如果请求没有匹配一个Action mapping或一个静态资源页,那么将通过.
(1) getServletContext
Servlet2.3规范中Servlet Context可以从Session中从新获取。不幸的是,一些版本的Weblogic不能够从新获取从Filter的配置中.因此,这个方法允许子类重新获取Servlet Context从其它源.
(2) prepareDispatcherAndWrapRequest(request, response)
包装和返回给定的request,如果需要,作为处理multipart data包装给定的request.
1.dispatcher.prepare(request, response);
准备request,包括设置encoding和locale,使用注入的public static final String STRUTS_I18N_ENCODING = "struts.i18n.encoding"、public static final String STRUTS_LOCALE = "struts.locale"和public static final String STRUTS_DISPATCHER_PARAMETERSWORKAROUND = "struts.dispatcher.parametersWorkaround";(是否使用一个Servlet request参数,对一些版本的Weblogic是必需的)
2.request = dispatcher.wrapRequest(request, getServletContext());
首先包装request,通过预先编码可以使用multipart/form-data参数访问的情况.
3. mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());找到对应的Action映射.
4. 如果找不到就去查找静态资源.
可以设置public static final String STRUTS_SERVE_STATIC_CONTENT = "struts.serve.static";
5.然后是正常的chain.doFilter(request, response);请求传递
6. dispatcher.serviceAction(request, response, servletContext, mapping);
装载映射的Acation类和调用适当的Action方法,或直接转向Result.这个方法首先创建Action上下文从给定的参数,并且装载一个ActionProxy从给定的Action名和namespace.然后,Action方法被直行和输出通道通过response对象.Action没有找到,发送到用户是通过Dispatcher的sendError方法,使用404返回码.所有的其它错误是通过抛出ServletException异常.
①ValueStack stack = (ValueStack) request.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);
如果已经存在这样的值栈,创建一个新的,拷贝和传递它为新的Action所使用.
② ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
namespace, name, extraContext, true, false);
ActionProxy将会查阅框架的配置文件管理(初始化是从Struts.xml文件),下一步,ActionProxy创建一个ActionInvocation,它来负责命令模式的实现. 包括调用拦截器在调用Action自身之前.
③ proxy.setMethod(method);
设置Action调用中要执行的方法.如果没有方法被指定,将会由Action的配置来提供.
设置Action中执行的方法.
④如果ActionMapping直接到一个result
if (mapping.getResult() != null) {
Result result = mapping.getResult();
result.execute(proxy.getInvocation());
} else {
//没有配置result的情况
proxy.execute();
}
⑤调用ActionProxy接口中的String execute() throws Exception;方法,它的实现类为DefaultActionProxy,在其中会调用retCode = invocation.invoke()方法.
⑥ActionInvocation接口的实现类DefaultActionInvocation的invoke方法首先调用拦截器栈,如果拦截器执行完,调用Action使用resultCode = invokeActionOnly();
⑦接下来迭代preResultListeners中的PreResultListener并执行其中的listener.beforeResult(this, resultCode);方法,在Action与Result之间.
⑧执行Result
if (proxy.getExecuteResult()) {
executeResult();
}
⑨到此serviceAction方法执行完毕,返回到FilterDispatcher的doFilter方法中
⑩释放本地线程和创建的DispatchListeners
public void destroy() {
if (dispatcher == null) {
LOG.warn("something is seriously wrong, Dispatcher is not initialized (null) ");
} else {
dispatcher.cleanup();
}
}
1. FilterDispatcher
(一)Struts的主要filter有四种不同的职责:
(1) 执行Action
这个Filter执行Action是通过查找ActionMapper来确定请求的URL将会调用的Action.如果mapper中指定,其它的Filter chain将会停止并且Action会被调用.这一点非常重要,它意味着像SiteMesh过滤器必需被放置在它之前或者将不会被修饰输出的Action.
(2) Cleaning up ActionContext (清理上下文)
这个Filter将自动为你清理ActionContext,确保不会出现内存泄漏.然而,有时会引起一些集成上的问题像使用SiteMesh.见ActionContextCleanUp来获取更多的信息处时这个问题.
(3) Serving static content(静态内容服务)
这个过滤器也服务于普通的静态内容,需要使用Struts中的很多部分,像JavaSctipt文件,CSS文件,等等.它的工作通过查找请求中的/struts/*,并且映射值在”/struts/”后面的常用包,它是可选的在你的classpath中.默认情况下,下面的包将会自动被搜索:
★org.apache.struts2.static
★template
这意味着你可以请求/struts/xhtml/styles.css和XHTML UI主题的默认stylesheet将会被返回.同样的很多AJAX UI组件需要的JavaScript文件也可以在org.apache.struts2.static包中找到.如果你希望添加额外的包被查找到,你可以增加一个逗号分隔的列表在过滤器的被始化参数”packages”中.注意,这样将暴露了你的包中的敏感信息,像访问数据库的属性文件.
(4) Kicking off XWork's interceptor chain for the request lifecycle
(二)这个Filter必需映射到所有的请求.除非你道它在做什么,通常映射到/*种URL模式
(三)这个Filter支持如下init-params:
★config---------------一个逗号分隔的XML配置文件将会被装载
★actionPackages----一个逗号分隔的Java Action包将会被扫描.
★configProviders---一逗号分隔的实现com.opensymphony.xwork2.config.ConfigurationProvider 接口的Java类列表,用于构建com.opensymphony.xwork2.config.Configuration。
★*-------------任何其它的参数,作为框架的常量来对待.
(四)使用定制的Dispatcher, createDispatcher方法可以被覆盖通过子类.
通配符映射
随着应用程序的增大,Action的数量也会增多.通配符可以用来组合简单的映射到多个通用映射.
最好的解释通配符的方法是通过一个例子和它是怎样工作的来展示.这个例子修改一个习惯上用通配符来匹配所有以/edit开头的页面;
<!-- Generic edit* mapping -->
<action
name="/edit*"
class="org.apache.struts.webapp.example.Edit{1}Action">
<result
name="failure"
path="/mainMenu.jsp"/>
<result
path="/\{1\}.jsp"/>
</action>
在路径中的“*”属性允许映射匹配请求的URI /editSubscription,editRegistration,或其它URI以/edit开头的,然而/editSubscription/add将不会被匹配.URI的部分匹配通过通配符,被替代的是Action映射中的变量属性和Action结果替换{1}.为了其它的请求,框架将查看Action映射和Action result中包括的新值.
映射的匹配依赖于请求,依次出现在框架的配置文件中。如果一个或多个模式匹配最后一个模式将得到,所以较少的指定模式,必需呈现多个指向同一个之前.然而,如果请求的URL可以被匹配依赖于一个路径不需要任何通配置,没有通配置被执行,同时顺序也不重要了.
通配符模式可以包含一个或多个下面的指定标记:
*匹配一个或多个字符包括斜线(‘/’)字符.
** 匹配一个或多个字符除了斜线(‘/’)字符.
\字符,反斜杠字符用来作为一个脱字符连接.因此*匹配字符星(‘*’),和匹配字符反斜框(‘\’).
在Action Mapping和Action Result,通配符匹配值可以被该问使用标记{N},N从1到9指示通配符匹配值到被替代属性 .全部的请求URI可以被该问用{0}标记.
同样的,Action Mapping属性(设置使用<set-property key=”foo” value=”bar”>语法)将接受通配符匹配字符串在他们的值属性.
像Action Mapping,Action result属性(设置使用<set-property key=”foo” value=”bar”>语法)将接受通配符匹配字符串在他们的值属性.
例子代码:
<action name="Login_*" method="{1}" class="example.Login">
<result name="input">/example/Login.jsp</result>
<result type="redirect-action">Menu</result>
</action>
<action name="*" class="example.ExampleSupport">
<result>/example/{1}.jsp</result>
</action>
源文件:http://hi.baidu.com/vsandjava/blog/item/49c10ef7d8087120730eec5b.html
发表评论
-
整合struts2.1.8.1+sitemesh2.4.2+freemarker2.3.15+spring2.5+hibernate3.3.1
2011-07-12 20:14 947整合struts2.1.8.1+sitemesh2.4.2+f ... -
struts-menu (权限动态菜单实现)(转)
2011-07-12 19:47 1229struts-menu (权限动态菜单实现)(转) pack ... -
Struts2文件的上传和下载
2011-07-12 16:59 650Struts2文件的上传和下载 ... -
Struts2源码分析--请求处理
2011-07-12 16:56 1115Struts2源码分析--请求处理 Posted on 200 ... -
JAVA WEB项目(struts1.X)乱码总结
2011-07-12 16:52 822JAVA WEB项目(struts1.X)乱码 ... -
about struts.devMode
2011-06-23 16:56 11301. ognl.OgnlException: target i ...
相关推荐
总的来说,Struts2的执行原理是通过过滤器链、ActionMapper、ActionProxy、ActionInvocation以及拦截器等组件协作,实现了从接收到HTTP请求到生成响应的全过程,提供了一套灵活且可扩展的MVC框架。
面试中经常询问Struts2的执行流程,因为理解这一流程有助于开发者深入掌握其工作原理,从而更好地设计和调试应用。以下是Struts2执行流程的详细解析: 1. **Web.xml部署描述符**: 在Struts2应用启动时,Web容器...
这张流程图 深刻的描述了 struts2的执行流程 帮助了解Struts2
##### 3.1 Struts2执行流程 1. **客户端发送请求**:当客户端通过浏览器向服务器发送请求时,请求首先会被Struts2的核心过滤器`StrutsPrepareAndExecuteFilter`捕获。 2. **拦截器组处理**:过滤器会将请求传递给一...
Struts 1.2 的执行流程主要包括以下五个关键步骤: 1. **客户端请求**:客户端(通常是浏览器)发送 HTTP 请求至服务器端。该请求通常指向一个特定的 URL,例如 `*.do`。 2. **ActionServlet 接收请求**:服务器端...
Struts2 远程代码执行漏洞分析(S2-013) Struts2 是 Apache 官方的产品,最近出了一个远程代码执行漏洞,编号“S2-013”,目前是 0DAY,官方没有修补方案出现。这个漏洞出现在 includeParams 属性中,允许远程命令...
struts2执行顺序,清楚描述从处理请求到返回response的整个流程
Java面试题48.struts2的执行流程或者struts2的原理.mp4
然而,Struts2在历史上曾出现过一系列的安全漏洞,其中一些是高危的,允许攻击者执行远程代码或控制系统。这个"Struts终极漏洞利用工具"显然旨在帮助安全研究人员和管理员检测和测试Struts2应用是否存在这些已知漏洞...
Struts2的设计理念和工作流程与WebWork框架相似,可以认为Struts2是对WebWork的升级和扩展,吸收了WebWork的优点,同时改进了Struts1的一些不足,如更简洁的配置和更强大的动作映射。 8. **集成其他框架**: ...
Struts2框架作为Java Web开发领域中的一款经典MVC(Model-View-Controller)框架,其工作原理涉及到了一系列复杂的组件交互与流程控制。本文将深入解析Struts2的工作流程,帮助开发者理解其核心机制。 ### 一、...
在`struts2原理图.png`中,可能会详细展示这一系列步骤,包括请求的接收、拦截器链的执行、Action的调用以及最终视图的渲染。这张图是理解Struts2工作流程的重要辅助工具,通过它你可以直观地看到每个组件如何协同...
### Struts1与Struts2原理及区别详解 #### Struts1原理概述 **Struts1** 是一种基于MVC架构的开源Java Web框架,它主要用于构建动态网站和应用程序。Struts1的核心组件包括ActionServlet、ActionForm以及Action...
本笔记将深入探讨Struts2的核心概念、执行流程、类型转换、输入验证和国际化等方面。 **一、Struts2框架基础** Struts2是Apache软件基金会的一个开源项目,它是基于拦截器的MVC框架,继承了WebWork框架的优点。...
在深入探讨Struts2的工作流程之前,我们先了解一下MVC模式的基本概念。MVC模式将应用逻辑分隔为三个部分:模型(Model)处理业务逻辑,视图(View)负责展示数据,控制器(Controller)协调用户输入和模型间的交互。...
在了解Struts程序的执行流程之前,我们需要首先理解几个核心概念: 1. ActionServlet:是Struts框架中的控制器,负责接收用户请求,调用Action的execute()方法处理请求,并根据返回的ActionForward对象进行页面跳转...
**Struts2原理:** Struts2是在Struts1的基础上发展起来的,它融合了WebWork框架的许多特性。Struts2的核心是.struts2-struts.xml配置文件,它定义了Action和Result。请求到达时,由FilterDispatcher(或后来的...
在深入理解Struts2的工作流程之前,我们需要先了解一些基本概念。 1. **MVC模式**: MVC模式将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责业务逻辑,视图负责显示...
struts的执行的核心流程时序图