Servlet - url-pattern之类的Dispatcher请求

时间:2010-11-28 22:13:34

标签: java servlets dispatch url-pattern

我有一些关于在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。

1 个答案:

答案 0 :(得分:0)

那么,destination不是以/开头,这使得它的位置依赖于调用servlet的路径?

相应修复:

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

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