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



我发现

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

重构的容忍度不是很高。是否有一些等效的做法:

response.sendRedirect(lookupPath("NameOfMyServlet"))

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

如果你可以转发到命名的 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 栏中......

相关内容

  • 没有找到相关文章

最新更新