struts2静态资源映射代码示例

网友投稿 247 2023-03-28


struts2静态资源映射代码示例

在struts2框架中有一些它所需要的公共的静态内容,比如说js文件和一些css文件。当框架需要这些静态内容的时候,FilterDidpatcher会自动提供给我们。那么FilterDidpatcher是如何知道我们在请求静态内容的呢?任何请求只要以“/struts/”开头,那么FilterDidpatcher就会认为它是在请求静态内容。在识别出请求是请求静态资源后FilterDidpatcher如何去匹配寻找静态资源呢?这里有两个关键点:

1.确定所要请求的资源路径。FilterDidpatcher会截取/struts/后面的内容作为所要请求的资源。比如说现在请求是/struts/xhtml/styles.css,那么FilterDidpatcher就会把xhtml/styles.css作为我们所要请求的资源的路径:xhtml目录下面的styles.css文件。

2.到哪儿去寻找所请求的静态内容。默认情况下FilterDidpatcher会随意的org.apache.struts2.static和template这两个包中去寻找。如果我们还想在别的其它包中寻找静态内容的话,那就需要在web.xml配置中FilterDidpatcher时,给它添加一个参数”packages”,然后把它的值设置为一系列以逗号或者空格分隔的包名,如下面所示:

Struts2

org.apache.struts2.dispatcher.FilterDispatcher

packages

com.mangocity.static,hust.cm

Struts2

/OGKHpcVK*

描述:web应用下有一个目录“static”,现在要访问其中的“top.html”文件,即访问“localhost:8080/static/top.html”,服务器总是抱404错误。

原因:在struts2的FilterDispatcher类的doFilter方法中,如果请求的是静态资源,struts2会判断该请求是否可以处理,这里的代码如下:

java代码

String resourcePath = RequestUtils.getServletPath(request);

if ("".equals(resourcePath) && null != request.getPathInfo()) {

resourcePath = request.getPathInfo();

}

if (staticResourceLoader.canHandle(resourcePath)) {

staticResourceLoader.findStaticResource(resourcePath, request, response);

} else {

// this is a normal request, let it pass through

chain.doFilter(request, response);

}

// The framework did its job here

return;

其中,在DefaultStaticContentLoader类的canHandle方法中会对请求路径进行判断:

Java代码

public boolean canHandle(String resourcePath) {

return serveStatic &&

(resourcePath.startsWith("/struts") || resourcePath.startsWith("/static"));

}

这里,serveStatic的值为true,再加上要访问的资源以“/static”开头,所以这里返回true。

然后,会进入DefaultStaticContentLoader类的findStaticResource方法,该方法的第一行语句是:

Java代码

String name = cleanupPath(path);

这里,cleanupPath方法的定义如下:

Java代码

/**

* @param path requested path

* @return path without leading "/struts" or "/static"

*/

protected String cleanupPath(String path) {

//path will start with "/struts" or "/static", remove them

return path.substring(7);

}

struts2把“/static”截掉了,这样,后面再进行解析的时候,就变成了解析对“/top.html”的请求,所以会报404错误。

总结

悲剧的错误,还以为是自己程序的bug,改了半天。需要加强对开源程序中具体实现的了解。 希望本文所述对大家有所帮助,感兴趣的朋友可以参阅:Struts2 使用OGNL遍历map方法详解 、  Struts2 通过ognl表达式实现投影 、  Struts2修改上传文件大小限制方法解析等,感谢朋友们对我们网站的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java实现的求逆矩阵算法示例
下一篇:Java数据溢出代码详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~