`
caoxudong818
  • 浏览: 45627 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2应用中URL里面含有“static”时无法访问

阅读更多
    今天在同事的应用出了一个小错误,与struts2有关,这里记录一下。

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

    原因:在struts2的FilterDispatcher类的doFilter方法中,如果请求的是静态资源,struts2会判断该请求是否可以处理,这里的代码如下:
   
 
        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方法中会对请求路径进行判断:
   
    public boolean canHandle(String resourcePath) {
        return serveStatic && 
          (resourcePath.startsWith("/struts") || resourcePath.startsWith("/static"));
    }
    


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

    然后,会进入DefaultStaticContentLoader类的findStaticResource方法,该方法的第一行语句是:
   
    String name = cleanupPath(path);
    


    这里,cleanupPath方法的定义如下:
   
     /**
     * @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 应用程序示例

    Struts2是一个强大的Java web应用程序框架,用于构建可维护、可扩展且结构良好的Web应用程序。这个"Struts2应用程序示例"是专为初学者和开发者设计的,它利用Eclipse 3.3作为集成开发环境,JDK 6.0作为Java运行环境...

    struts2中的url

    本文将详细介绍Struts2框架中有关URL配置的相关知识点,包括请求转发、内部action处理以及请求重定向等核心概念,并深入探讨Struts2中 `<s:url>` 标签的应用。 #### 请求转发至JSP页面 在Struts2中,默认情况下,...

    Struts2下使用urlReWrite的最简实例(MyEclipse工程)

    `urlRewrite`是Tuckey开源组织提供的一个URL重写过滤器,它能够帮助我们在Struts2应用中实现这个目标。 在这个最简实例中,我们将探讨如何在MyEclipse环境中集成Struts2和urlRewrite,创建一个基本的应用来演示URL...

    struts2中实现URL重写

    4. **启动和测试**:重新部署应用,访问URL时,URLRewriteFilter会根据配置文件中的规则对URL进行重写。 除了上述基本操作,URLRewriteFilter还支持许多高级特性,如条件匹配、通配符、自定义变量等,可以根据实际...

    struts2改写url后缀demo

    在Struts2中,URL通常以`.do`结尾,这是默认的Action映射后缀。然而,为了提供更加用户友好的URL和提高搜索引擎优化(SEO),开发者可能希望将这些后缀更改为更自然的扩展名,如`.html`。本教程将深入探讨如何在...

    struts2 应用

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Web开发领域中被广泛使用。Struts2的核心是Action类,它负责处理用户的请求并调用业务逻辑。框架提供了丰富的拦截器...

    Struts2配置说明-里面含有工作原理图

    Struts2是一个强大的Java EE平台上的MVC框架,它提供了构建Web应用程序的全面解决方案。相比Struts1,Struts2是一个全新的设计,不仅在架构上有所改进,而且提供了更多的功能和灵活性。Struts2的核心是...

    struts2 路径问题

    在处理“struts2 路径问题”时,我们主要关注的是Struts2框架中的URL映射和资源定位。这篇博客文章可能探讨了在使用Struts2时遇到的路径相关问题,如Action配置、结果类型、静态资源访问等。 1. **Action配置**:在...

    Struts2的综合应用

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它被广泛应用于Java Web开发中,提供了灵活的架构来构建可维护性和扩展性良好的应用程序。本综合应用实例主要展示了如何利用Struts2框架与MySQL数据库进行集成,...

    使用urlrewrite重写struts2的action

    `type="redirect"`表示客户端会接收到一个302重定向响应,`%{contextPath}`是当前应用的上下文路径,`${name}`则是从原始URL中提取的参数。 4. **启动应用**:现在,当你运行应用并访问原始URL时,`URL Rewrite ...

    struts拦截器和url放行

    Struts拦截器(Interceptors)是Struts2框架的核心组件之一,它们在处理请求时扮演着重要的角色。拦截器的工作原理类似于AOP(面向切面编程),允许开发者在动作执行前后插入自定义逻辑,比如权限检查、日志记录、...

    去掉.action去掉.do字样 隐藏struts2 URL地址action, strus1的扩展名do也是同理.zip

    Struts2和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...

    struts2-scan_struts2-scan_struts2scan_scan_struts2漏洞_

    在使用"struts2-scan.py"这个Python脚本时,你需要确保你有相应的环境支持Python运行,并且对目标Struts2应用有一定的访问权限。通常,这个脚本会遍历一系列的漏洞测试用例,针对每个可能的漏洞进行探测。扫描完成后...

    struts2jar包

    在项目中使用Struts2时,我们需要配置struts2的主配置文件(struts.xml),定义Action、结果类型、拦截器栈等。Action是业务逻辑的入口点,Result表示一个操作完成后转向的页面或结果。拦截器是Struts2的一大特色,...

    留言板留言板struts2留言板struts2

    Struts2是一个强大的Java web应用程序框架,用于构建和部署企业级的MVC(Model-View-Controller)架构的Web应用。这个"留言板留言板struts2"项目,显然是一个基于Struts2实现的简单留言板系统,旨在展示Struts2的...

    一个完整的struts2应用实例

    在这个"一个完整的Struts2应用实例"中,我们将深入探讨如何利用Struts2实现用户注册和登录功能,涉及的关键知识点包括Action的实现与配置、Struts2验证框架的应用、以及国际化资源文件的使用。 首先,**Action的...

    Struts2漏洞检查工具Struts2.2019.V2.3

    Struts2是一款非常流行的Java Web框架,用于构建企业级应用。然而,随着时间的推移,Struts2在安全方面暴露出了一些重要的漏洞,这给使用该框架的系统带来了潜在的安全风险。"Struts2漏洞检查工具Struts2.2019.V2.3...

    Struts2接口文档

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,旨在简化创建用户交互式、数据驱动的web应用的过程。这个“Struts2接口文档”是开发者的重要参考资料,提供了关于...

    浪曦_Struts2应用视频源代码

    6. **模型(Model)**:尽管Struts2主要讨论的是控制器和视图,但源代码中也会涉及到模型部分,包括数据库操作、业务对象(BO)和数据访问对象(DAO)。这些模型组件与Action交互,处理数据的获取和存储。 学习这个...

    struts2+cas单点登陆例子

    它的主要工作原理是:当用户尝试访问受保护的应用时,会被重定向到CAS服务器进行身份验证,一旦验证成功,CAS会返回一个票据(ticket),该票据被应用用来确认用户的身份并授予访问权限。 在Struts2框架中集成CAS,...

Global site tag (gtag.js) - Google Analytics