Java 如何获取JSP页面之外的web应用程序路径?
我不熟悉JSP和JavaEE。所以,也许我错过了一些非常明显的东西 我有一个web筛选器类,它需要将web请求重定向回当前web应用程序的根目录。但是由于我们的应用程序没有部署在根目录中,所以我需要知道当前web应用程序的路径 e、 g 我需要得到“我的申请”部分 我尝试了ServletContext和ApplicationContext,但没有成功。我意识到我可以从HttpServletRequest获得它,但在我的filter类中我没有访问它的权限Java 如何获取JSP页面之外的web应用程序路径?,java,jsp,Java,Jsp,我不熟悉JSP和JavaEE。所以,也许我错过了一些非常明显的东西 我有一个web筛选器类,它需要将web请求重定向回当前web应用程序的根目录。但是由于我们的应用程序没有部署在根目录中,所以我需要知道当前web应用程序的路径 e、 g 我需要得到“我的申请”部分 我尝试了ServletContext和ApplicationContext,但没有成功。我意识到我可以从HttpServletRequest获得它,但在我的filter类中我没有访问它的权限 请帮忙。我被卡住了。我来自.NET世界。这
请帮忙。我被卡住了。我来自.NET世界。这非常简单。您正在寻找的方法取决于您的Servlet版本,如果没有请求,您可能无法获得它。在Servlet2.5之前,它假设一个Servlet可能有多个上下文路径,所以您只能从请求中获取它。这在2.5中有所更改,并添加了
ServletContext.getContexPath()
如果您在doFilter()中需要此选项,则可以访问该请求。如果您真的想在Tomcat5.5或更早版本上的init()
中执行此操作,您可以执行以下操作:
String contextPath = ((org.apache.catalina.core.ApplicationContext)filterConfig.getSevletContext()).getContextPath();
当然,这是不可移植的。您要查找的部分是contextPath,直到Servlet版本2.5,获取contextPath的唯一方法是在HttpServletRequest类上调用getContextPath()方法。这意味着您只能逐个请求获得它。这与您的webapp可以映射到多个contextPath有关。从2.5版开始,您可以从ServletContext类获得contextPath,如果您的webapp映射到多个contextPath,则您将获得主要或首选contextPath(由容器决定)
通常情况下,您需要知道筛选器或servlet中init()方法中的contextPath。使用2.5版,您可以,但您将无法支持映射到多个contextPath(尽管这很少是一个问题)。如果您只想将用户转发到根上下文,您可以在筛选器的
doFilter
方法中执行此操作。这假设您从Filter init方法内部的FilterConfig获取了上下文
context.getRequestDispatcher("/").forward(request, response);
从:
路径名必须以“/”开头,并解释为相对于当前上下文根
如果您确实想让字符串处理它,那么大多数其他解决方案就足够了。前面有人提到了一个hack,它允许您使用Catalina ApplicationContext对象来获取上下文路径
String contextPath = ((org.apache.catalina.core.ApplicationContext)filterConfig.getSevletContext()).getContextPath();
您还可以在ServletContextListener中使用此选项,并在webapp启动时转储路径:
ApplicationContext tomcatContext = (ApplicationContext)event.getServletContext();
String contextPath = tomcatContext.getContextPath();
但是,这些攻击只适用于Tomcat 5.5.16或更高版本中的catalina.jar文件,因为该方法在以前的版本中没有实现 为什么您认为您无权访问筛选器类中的HttpServletRequest。对于通过HTTP工作的web应用程序,您可以这样做。您可以在doFilter()方法中将ServletRequest强制转换为HttpServletRequest。@asah-假设我们讨论的是doFilter()
方法,您是对的。OP可能在init()中执行此操作。