我有一些关于在servlet中调度请求的问题。
总而言之,我在一个公共服务器上部署了一个网站,迫使我为所有servlet都有一个类似于/ servlet / *的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
参数始终是我的webapp juste根目录下的*.jsp
,如“/index.jsp”,“home.jsp”等。
当我在localhost上使用我的应用程序时,我的servlet有这个url模式:
<url-pattern>/MainController</url-pattern>
并且一切正常,因为请求调度程序始终在webapp的根目录下搜索.jsp。但是现在使用我的新url-pattern,它试图在servlet / *上发送我所有的.jsp,就像servlet/index.jsp
一样,而corse就把我扔了
HTTP Status 404 - /servlet/index.jsp
我完全理解为什么它表现得像那样,如果我记得很清楚,Servlets不能超出当前的背景。
但我的问题是,我注定了吗?是不是有办法告诉请求调度员转到.jsp我问的是没有处理“/ servlet / *”模式? 我绝对需要请求的对象,因为我在转发它之前使用它。
我真的不知道如何解决这个问题,所以我在这里寻求一些帮助,希望有人已经面对这种情况,或者至少比我对情况有更清晰的认识。
感谢您花时间阅读本文并帮助我。
致以最诚挚的问候,
Sampawende。
答案 0 :(得分:0)
那么,destination
不是以/
开头,这使得它的位置依赖于调用servlet的路径?
相应修复:
request.getRequestDispatcher("/" + destination).forward(request, response);
顺便说一下,如果您还想阻止直接访问JSP(最终用户可以在不先调用控制器的情况下将URL更改为指向JSP),那么考虑将JSP放在/WEB-INF
文件夹中。不要忘记相应地更改RequestDispatcher
路径:"/WEB-INF/" + destination
。