Java EE 7 Servlet3.0学习笔记
17.Servlet技术
17.7Servlet调用其他资源
Web组件(此处指Servlet)可以直接或者间接调用其他Web资源:
调用服务器中其他Servlet资源,需要获得一个 RequestDispatcher 对象,可以通过两种方式获得:
方法1:
request.getRequestDispatcher("URL");方法2:
request.getServletContext().getRequestDispatcher("URL");这两种方法的区别在于:前者的URL可以是一个相对地址也可以是一个绝对地址,当URL带有"/"时则认为是绝对地址(ContextPath);否则当做相对地址处理,相对于当前请求路径。后者则必须是绝对地址,也就是说通过ServletContext来获得RequestDispatcher的话作为参数的URL必须以"/"开头,否则会抛出异常(JavaEE7)。
17.7.1 Response中包含其他资源
可以调用RequestDispacher的include(request,response)方法来包含其他组件,这个方法实现了这样的效果:将request传递给被包含的的Servlet;执行被包含的Servlet并将执行结果包含进response。被包含的组件可以对request对象执行任何的操作,但是对于response对象的操作却是有限制的:
- 可以向响应体中添加内容并提交响应;
- 不能修改响应头,不能调用任何可以修改响应头的函数,诸如setCookie()之类。
17.7.2 请求定向到其他组件
一旦你调用了forwad方法,那么你就放弃了答复client的权利,要是你在servlet中访问了ServletOutStream或者PrintWriter对象,你将不能使用forward方法,否则将会引发IllegalStateException。
