在进行重定向时,我可以按名称查找servlet的路径吗?

时间:2017-03-18 12:44:08

标签: servlets

我找到了

response.sendRedirect("/some-path/")

不是非常重构宽容。是否有一些相同的做法:

response.sendRedirect(lookupPath("NameOfMyServlet"))

即。查找servlet的路径,而不是硬编码。

1 个答案:

答案 0 :(得分:0)

如果您转发到指定的servlet而不是重定向,ServletContext.getNamedDispatcher(String name)就是您所需要的。它的javadoc说:

  

RequestDispatcher getNamedDispatcher(String name)

     

返回一个RequestDispatcher对象,该对象充当命名servlet的包装器。

假设sc是当前的servlet上下文(您可以从请求对象获取它):

sc.getNamedDispatcher("NameOfMyServlet").forward(request, response);

会将控件传递给servlet。

但是如果你真的需要进行重定向,那么你只能重定向到一个URL,并且没有直接的方法来知道命名的servlet将处理什么URL。

所以替代方法是:

  • 存储在您应用中的某个位置映射{servletname:path}并使用它来查找要使用的路径
  • 将您的servlet映射到技术路径,该路径将永远不会在应用程序的其他地方使用,除了它的正常路径并使用该技术路径进行内部重定向 - 坏的新的,它就是这个技术路径将显示在浏览器的URL栏中......