该问题已在 guice 和 guice servlet 3.1.1 中得到部分修复,但仍然存在一个问题:
使用星号模式“/*”映射 servlet 时,如下所示:
serve("/myservlet/*").with(MyServlet.class);
并让 MyServlet.java 转发到 jsp 页面,然后 forward() 将仅在 jsp 页面没有下划线时才起作用(因此,myservlet.jsp 将起作用,my_servlet.jsp 将不起作用)。
// This WORKS
req.getRequestDispatcher("/myservlet.jsp").forward(req,resp);
// These DONT WORK (any file having _ or - characetsrs wont work)
req.getRequestDispatcher("/my_servlet.jsp").forward(req,resp);
req.getRequestDispatcher("/my-servlet.jsp").forward(req,resp);
req.getRequestDispatcher("/WEB-INF/myservlet.jsp").forward(req,resp);
现在这就解释了为什么 WEB-INF 转发对于使用 /* 映射的 servlet 不起作用。原因是 WEB-INF 包含一个破折号字符,由于某种原因,它给 guice servlet 造成了问题。尝试上述示例时,请确保在尝试验证上述案例时将文件 myservlet.jsp 重命名为 my_servlet.jsp。
我不知道为什么会发生这种奇怪的情况。注意:我使用的是 Tomcat 6.0.35
要让 Guice 3.1.1 将这些添加到您的 pom.xml
<dependency>
<groupId>org.sonatype.sisu</groupId>
<artifactId>sisu-guice</artifactId>
<version>3.1.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.sonatype.sisu.inject</groupId>
<artifactId>guice-servlet</artifactId>
<version>3.1.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.sonatype.sisu.inject</groupId>
<artifactId>guice-assistedinject</artifactId>
<version>3.1.1</version>
<scope>compile</scope>
</dependency>
或者,您可以从以下位置下载 jar:
Guice Servlet 罐子
http://repo1.maven.org/maven2/org/sonatype/sisu/inject/guice-servlet/3.1.1/
吉斯罐
http://repo1.maven.org/maven2/org/sonatype/sisu/sisu-guice/3.1.1/