struts2静态资源映射代码示例
发布时间 - 2026-01-11 03:30:01 点击率:次在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”,然后把它的值设置为一系列以逗号或者空格分隔的包名,如下面所示:
<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>packages</param-name>
<param-value>com.mangocity.static,hust.cm</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
描述: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修改上传文件大小限制方法解析等,感谢朋友们对网站的支持。
# struts2
# 静态资源
# 映射
# Struts2 使用OGNL遍历map方法详解
# Struts2 通过ognl表达式实现投影
# Struts2修改上传文件大小限制方法解析
# AjaxFileUpload+Struts2实现多文件上传功能
# struts2开发流程及详细配置
# 会报
# 所要
# 的是
# 就会
# 是在
# 那就
# 遍历
# 中有
# 给我们
# 感兴趣
# 这两个
# 朋友们
# 半天
# 会对
# 掉了
# 还想
# 所示
# 会把
# 中去
# 要以
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python文件流缓冲机制_IO性能解析【教程】
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Android仿QQ列表左滑删除操作
JavaScript实现Fly Bird小游戏
敲碗10年!Mac系列传将迎来「触控与联网」双革新
利用vue写todolist单页应用
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
网站页面设计需要考虑到这些问题
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何快速搭建高效WAP手机网站吸引移动用户?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Java类加载基本过程详细介绍
简单实现Android验证码
Android自定义listview布局实现上拉加载下拉刷新功能
详解jQuery中基本的动画方法
如何用AWS免费套餐快速搭建高效网站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
BootStrap整体框架之基础布局组件
Laravel如何实现一对一模型关联?(Eloquent示例)
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
详解Android——蓝牙技术 带你实现终端间数据传输
如何在腾讯云免费申请建站?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
创业网站制作流程,创业网站可靠吗?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
网站制作免费,什么网站能看正片电影?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何在景安服务器上快速搭建个人网站?
如何用狗爹虚拟主机快速搭建网站?
zabbix利用python脚本发送报警邮件的方法
手机网站制作与建设方案,手机网站如何建设?
网站制作企业,网站的banner和导航栏是指什么?
php json中文编码为null的解决办法
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
html5的keygen标签为什么废弃_替代方案说明【解答】
如何在建站之星绑定自定义域名?
jQuery 常见小例汇总
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
如何做网站制作流程,*游戏网站怎么搭建?
专业商城网站制作公司有哪些,pi商城官网是哪个?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Java遍历集合的三种方式
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
Linux安全能力提升路径_长期防护思维说明【指导】
如何在腾讯云服务器上快速搭建个人网站?

