在getMaping方法中,获得当前请求中的uri以及配置文件中配置的action的name和namespace,看一下这个parseNameAndNamespace方法的实现细节:
protected void parseNameAndNamespace(String uri, ActionMapping mapping, ConfigurationManager configManager) {
String namespace, name;
int lastSlash = uri.lastIndexOf("/");
...
// 将解析出来的name和namespace放入mapping
mapping.setNamespace(namespace);
mapping.setName(cleanupActionName(name));
}

从倒数两行代码可以看出了该方法的最终目的:将解析出来的name和namespace放入mapping,交给调用者来根据这个actionMapping判断请求是否有对应的业务控制类
说明并没有为这个请求配置相应的业务控制类Action,就说明这个请求可能是一个静态的资源请求,于是就有了如下代码:
if (mapping == null) {
boolean handled = execute.executeStaticResourceRequest(request, response);
// 这里会根据上一步的返回值来确定是否执行
if (!handled) {
chain.doFilter(request, response);
}
}
查看executeStaticResourceRequest方法的具体实现:
public boolean executeStaticResourceRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// there is no action in this request, should we look for a static resource?
// 老外还挺逗:这个请求没有对应的action来处理,我们应不应该看看它是不是请求一个静态资源?
String resourcePath = RequestUtils.getServletPath(request);
if ("".equals(resourcePath) && null != request.getPathInfo()) {
resourcePath = request.getPathInfo();
}
StaticContentLoader staticResourceLoader = dispatcher.getContainer().getInstance(StaticContentLoader.class);
// 如果这个请求请求的资源在这个项目的资源路径下,返回true
if (staticResourceLoader.canHandle(resourcePath)) {
staticResourceLoader.findStaticResource(resourcePath, request, response);
// The framework did its job here
// 属于struts2管辖范围的静态资源,由struts2来处理
return true;
} else {
// this is a normal request, let it pass through
// 一个普通的请求,放行
return false;
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-78438-9.html
哈哈
如果航空发动机弄出