全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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”,然后把它的值设置为一系列以逗号或者空格分隔的包名,如下面所示:

<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开发流程及详细配置  # 会报  # 所要  # 的是  # 就会  # 是在  # 那就  # 遍历  # 中有  # 给我们  # 感兴趣  # 这两个  # 朋友们  # 半天  # 会对  # 掉了  # 还想  # 所示  # 会把  # 中去  # 要以 


相关文章: 在线教育网站制作平台,山西立德教育官网?  已有域名能否直接搭建网站?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何在宝塔面板中修改默认建站目录?  建站之星如何快速生成多端适配网站?  再谈Python中的字符串与字符编码(推荐)  如何快速生成凡客建站的专业级图册?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  一键网站制作软件,义乌购一件代发流程?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  建站三合一如何选?哪家性价比更高?  如何在Windows环境下新建FTP站点并设置权限?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Bpmn 2.0的XML文件怎么画流程图  如何通过西部建站助手安装IIS服务器?  建站主机如何选?高性价比方案全解析  建站主机CVM配置优化、SEO策略与性能提升指南  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何在万网ECS上快速搭建专属网站?  如何通过多用户协作模板快速搭建高效企业网站?  表情包在线制作网站免费,表情包怎么弄?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  css网站制作参考文献有哪些,易聊怎么注册?  免费网站制作appp,免费制作app哪个平台好?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何选择域名并搭建高效网站?  家庭服务器如何搭建个人网站?  建站主机是什么?如何选择适合的建站主机?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  浅析上传头像示例及其注意事项  Android自定义控件实现温度旋转按钮效果  制作网站的软件免费下载,免费制作app哪个平台好?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何实现建站之星域名转发设置?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  建站之星在线客服如何快速接入解答?  模具网站制作流程,如何找模具客户?  济南网站制作的价格,历城一职专官方网站?  如何在服务器上三步完成建站并提升流量?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  活动邀请函制作网站有哪些,活动邀请函文案?  Python多线程使用规范_线程安全解析【教程】  建站之星安装需要哪些步骤及注意事项?  Android自定义listview布局实现上拉加载下拉刷新功能  广德云建站网站建设方案与建站流程优化指南  外贸公司网站制作哪家好,maersk船公司官网?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  定制建站价位费用解析与套餐推荐全攻略 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。