我有一些关于在 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/*”模式?我绝对需要请求的对象,因为我在转发它之前使用它。
我真的不知道如何度过这个难关,所以我在这里寻求一些帮助,希望有人已经面临过这种情况,或者至少比我对这种情况有更清晰的认识。
感谢您花时间阅读本文并帮助我。
最好的祝福,
桑帕文德。