【问题标题】:Using a Filter to serve a specific page?使用过滤器服务特定页面?
【发布时间】:2011-02-23 00:22:19
【问题描述】:

我正在使用一个为我的 jsp 内容实现过滤器的类。它看起来像这样:

public class MyFilter implements Filter 
{
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
        throws IOException, ServletException 
    {
        request.getRequestDispatcher("mypage.jsp").forward(request, response); 
    }
}

所以目标“mypage.jsp”就在我的顶级目录中。如果我输入以下网址,过滤器可以正常工作:

http://www.mysite.com/foo
http://www.mysite.com/boo

但如果我输入一个斜杠,我会得到一个 404:

http://www.mysite.com/foo/
http://www.mysite.com/boo/

HTTP ERROR: 404
/foo/mypage.jsp

RequestURI=/foo/mypage.jsp

如果我输入尾部斜杠,那么过滤器认为我希望它在子文件夹 foo 或 boo 中查找 mypage.jsp,但我真的总是希望它只在以下位置找到它:

http://www.mysite.com/mypage.jsp

我该怎么做?

谢谢

【问题讨论】:

    标签: jsp servlets servlet-filters


    【解决方案1】:

    使请求调度程序路径成为绝对路径 - 使用“/mypage.jsp”而不是“mypage.jsp”。然后从 webapp 上下文的根中解析资源。

    【讨论】:

    • 感谢工作!我发现我的 css 文件和其他相关资源无法解析,我不得不在 mypage.jsp 中更新它们的路径,以便在路径前也使用正斜杠,例如“csspath=/mypage.css”而不是“csspath=mypage .css”,可以吗?谢谢!
    • 我很高兴它可以工作,但我不确定这是一个好主意。为什么要允许用户输入映射到根目录的任意 URL?
    • 嗯,我想支持类似 twitter 的东西,其中 www.mysite/username 由一个 jsp 页面处理,该页面只是为他们生成一个页面。我不能为每个用户创建一个真正的文件夹,所以认为这种类型的“url 重写”会起作用吗?谢谢
    • 好的,但不是在斜线中硬编码 - 使用方法调用来应用斜线,这样,您可以在必要时快速重新定位资源。
    猜你喜欢
    • 2015-09-15
    • 2018-08-04
    • 2021-07-06
    • 2015-10-27
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 2013-04-05
    相关资源
    最近更新 更多