0

我有一些关于在 servlet 中分派请求的问题。

总而言之,我在公共服务器上部署了一个网站,这迫使我为我的所有 servlet 使用像 /servlet/* 这样的 url 模式(我听说它无论如何都是默认配置)。问题是,在开发应用程序时,我没有这样的限制,因此没有构建它来支持这样的模式......现在,我的应用程序只是因为 url 而无法工作。假设我的 servlet 是这样声明和映射的:

 <servlet>
  <servlet-name>MainController</servlet-name>
  <servlet-class>controller.controllers.MainController</servlet-class>
 </servlet>

 <servlet-mapping>
  <servlet-name>MainController</servlet-name>
  <url-pattern>/servlet/MainController</url-pattern>
 </servlet-mapping>

问题是我在我的 Servlet 中使用了这段代码:

this.getServletContext()
           .getRequestDispatcher(destination).forward(request, response);

destination参数始终*.jsp位于我的 webapp 的根目录中,例如“/index.jsp”、“home.jsp”等。

当我在 localhost 上使用我的应用程序时,我的 servlet 具有以下 url 模式:

<url-pattern>/MainController</url-pattern>

一切正常,因为请求调度程序总是在 webapp 的根目录中搜索 .jsp。servlet/index.jsp但是现在有了我的新 url 模式,它会尝试在 servlet/* 上搜索我所有的 .jspHTTP Status 404 - /servlet/index.jsp

我完全理解为什么它会这样,如果我记得清楚的话,Servlet 不能扩展到它们当前的上下文之外。

但我的问题是,我注定要失败吗?有没有办法告诉请求调度程序转到我要求的 .jsp 而不考虑“/servlet/*”模式?我绝对需要请求的对象,因为我在转发它之前使用它。

我真的不知道如何度过这个难关,所以我在这里寻求一些帮助,希望有人已经面临过这种情况,或者至少比我对这种情况有更清晰的认识。

感谢您花时间阅读本文并帮助我。

最好的祝福,

桑帕文德。

4

1 回答 1

0

那么,它的位置destination/依赖于调用 servlet 的路径吗?

相应地修复它:

request.getRequestDispatcher("/" + destination).forward(request, response);

顺便说一句,如果您还想阻止对 JSP 的直接访问(最终用户可以更改 URL 以指向 JSP 而无需先调用控制器),那么请考虑将 JSP 放在/WEB-INF文件夹中。不要忘记RequestDispatcher相应地更改路径:"/WEB-INF/" + destination.

于 2010-11-28T23:04:11.013 回答