Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取JSP页面之外的web应用程序路径?_Java_Jsp - Fatal编程技术网

Java 如何获取JSP页面之外的web应用程序路径?

Java 如何获取JSP页面之外的web应用程序路径?,java,jsp,Java,Jsp,我不熟悉JSP和JavaEE。所以,也许我错过了一些非常明显的东西 我有一个web筛选器类,它需要将web请求重定向回当前web应用程序的根目录。但是由于我们的应用程序没有部署在根目录中,所以我需要知道当前web应用程序的路径 e、 g 我需要得到“我的申请”部分 我尝试了ServletContext和ApplicationContext,但没有成功。我意识到我可以从HttpServletRequest获得它,但在我的filter类中我没有访问它的权限 请帮忙。我被卡住了。我来自.NET世界。这

我不熟悉JSP和JavaEE。所以,也许我错过了一些非常明显的东西

我有一个web筛选器类,它需要将web请求重定向回当前web应用程序的根目录。但是由于我们的应用程序没有部署在根目录中,所以我需要知道当前web应用程序的路径

e、 g

我需要得到“我的申请”部分

我尝试了ServletContext和ApplicationContext,但没有成功。我意识到我可以从HttpServletRequest获得它,但在我的filter类中我没有访问它的权限


请帮忙。我被卡住了。我来自.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()中执行此操作。