为什么
getRequestDispatcher(String path) ServletRequest接口不能 延伸到当前servlet之外 上下文
其中
getRequestDispatcher(String path) ServletContext可以使用 getContext(String uripath)方法 获取资源的RequestDispatcher 在国外。
以及如何
请帮忙
答案 0 :(得分:37)
如果使用绝对路径,例如("/index.jsp"
),则没有区别。
如果使用相对路径,则必须使用HttpServletRequest.getRequestDispatcher()
。 ServletContext.getRequestDispatcher()
不允许这样做。
例如,如果您在http://example.com/myapp/subdir
上收到了请求,
RequestDispatcher dispatcher =
request.getRequestDispatcher("index.jsp");
dispatcher.forward( request, response );
将请求转发到页面http://example.com/myapp/subdir/index.jsp
。
在任何情况下,您都无法将请求转发到上下文之外的资源。
答案 1 :(得分:1)
请求方法getRequestDispatcher()
可用于在单个webapp中引用本地servlet。
基于Servlet上下文的getRequestDispatcher()
方法可用于引用部署在 SAME 服务器上的其他Web应用程序的servlet。
答案 2 :(得分:0)
我认为你的第一个问题只是范围问题。 ServletContext是一个比ServletRequest更宽泛的范围对象(整个servlet上下文),它只是一个请求。您可以查看Servlet规范本身以获取更多详细信息。
关于如何,我很抱歉,但此时我将不得不留下让其他人回答。
答案 3 :(得分:0)
上下文存储在应用程序级别的范围内,其中请求存储在页面级别,即
Web容器逐个启动应用程序并在其JVM中运行它们。它在其jvm中存储一个singleton对象,它注册放在其中的anyobject。这个singleton在其中运行的所有应用程序中共享,因为它存储在容器本身的JVM中。
然而,对于请求,容器创建一个请求对象,该请求对象填充了来自请求的数据,并从一个线程传递到另一个线程(每个线程是一个新的请求到达服务器),请求也传递给相同应用程序的线程。
答案 4 :(得分:0)
request.getRequestDispatcher(“url”)表示调度与当前的HTTP请求相关。这是为了在同一个Web应用程序中链接两个servlet 实施例
RequestDispatcher reqDispObj = request.getRequestDispatcher("/home.jsp");
getServletContext()。getRequestDispatcher(“url”)表示调度是相对于ServletContext的根目录。这是用于在同一服务器/两个不同服务器中链接两个Web应用程序
实施例
RequestDispatcher reqDispObj = getServletContext().getRequestDispatcher("/ContextRoot/home.jsp");
答案 5 :(得分:0)
我想您会通过下面的示例了解它。
源代码结构:
/src/main/webapp/subdir/sample.jsp
/src/main/webapp/sample.jsp
上下文是:TestApp
所以入口点是:http://yourhostname-and-port/TestApp
转到相对路径:
使用servletRequest.getRequestDispatcher("sample.jsp")
:
http://yourhostname-and-port/TestApp/subdir/fwdServlet ==> \subdir\sample.jsp
http://yourhostname-and-port/TestApp/fwdServlet ==> /sample.jsp
使用servletContext.getRequestDispatcher("sample.jsp")
:
http://yourhostname-and-port/TestApp/subdir/fwdServlet ==> java.lang.IllegalArgumentException: Path sample.jsp does not start with a "/" character
http://yourhostname-and-port/TestApp/fwdServlet ==> java.lang.IllegalArgumentException: Path sample.jsp does not start with a "/" character
转到绝对路径:
使用servletRequest.getRequestDispatcher("/sample.jsp")
:
http://yourhostname-and-port/TestApp/subdir/fwdServlet ==> /sample.jsp
http://yourhostname-and-port/TestApp/fwdServlet ==> /sample.jsp
使用servletContext.getRequestDispatcher("/sample.jsp")
:
http://yourhostname-and-port/TestApp/subdir/fwdServlet ==> /sample.jsp
http://yourhostname-and-port/TestApp/fwdServlet ==> /sample.jsp