转发对JSP的请求

Pie*_*rre 4 java jsp servlets guice guice-servlet

上周我发现了Guice ...我正在尝试一些简单的技巧.但是,我目前被封锁......

我正在尝试将请求转发到由包含" * " 的url-pattern服务的Servlet中的JSP .但我一直收到"错误404":(

一步步 :


ServletModule :
serve("/test/*").with(TestServlet.class);
Run Code Online (Sandbox Code Playgroud)
TestServlet :
public void doGet(HttpServletRequest req, HttpServletResponse resp)  
{

    System.err.println("Start");
    try 
    {
        req.getRequestDispatcher("/WEB-INF/layout/test.jsp").forward(req, resp);
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }

}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

HTTP错误404
访问/WEB-INF/layout/test.jsp时出现问题.原因:/
WEB-INF/layout/test.jsp

我测试了"serve("/ test").with(TestServlet.class);" 它工作
我没有Guice测试(通过在web.xml中定义servlet),它工作...

  • 我做错了什么?

感谢阅读!

Sta*_*lin 7

客户端无法直接从Web-INF访问资源(通过url).因此在这种情况下转发不起作用.但你的servlet可以.所以只需使用include而不是forward.


小智 6

你根本没有做错任何事情.Guice中存在一个错误,因为它们对servlet标准的Include和Forward属性处理不当,如此处所述... http://code.google.com/p/google-guice/issues/detail?id=647

结果是接收servlet被错误地描述了路径,因此加载资源的请求即使正确指定它们也找不到正确的目标,即使相同的代码在使用web.xml时也是如此(由servlet解释)引擎而不是Guice).

我无休止的困惑为什么这对于Guice中的许多项目来说并不是一个死胡同,所以也许其他servlet引擎配置的行为掩盖了这个错误.我正在使用Server #start()在Java中显式启动Jetty; 它是许多服务器逻辑的交易破坏者.

然而,即使在针对v2.0向他们提供补丁的情况下,Guice团队似乎已经刻意忽略了这个bug很长一段时间.他们需要的是一个测试用例编写对他们的SVN构建但我从来没有得手给予创造出模拟servlet引擎等存根所需的全部工作.