请求转发(forword())和请求包含(include())

it2024-07-18  42

描述:

一个请求往往需要多个servlet协同合作才能完成,此时我需要请求转发 或 请求包含(不常用)

请求转发: 由下一个servlet完成响应体(通过response两个流发送给浏览器的叫做响应体),当前servlet完成响应头(setHeader()) 请求包含: 由两个(多个)servlet共同完成响应体

特点: url中的地址不会改变

请求转发示意图:

由图我们可以知道属于一次请求,一次响应。而重定向数据多次请求对次响应

代码

请求转发: servlet1:

response.setContentType("text/html; charset=utf-8") //设置编码格式 response.setHeader("aa","AA") //设置响应头 response.getWriter().print("你好,我是servlet1") //设置响应体 request.getRequestDispatcher("/servlet2").forword(request,response);

servlet2:

response.setContentType("text/html; charset=utf-8") response.getWriter().print("你好,我是servlet2") //设置响应体

结果: 你好,我是servlet2 解释:因为通过servlet1向servlet2转发了,所以servlet1中的响应体是不会输出带浏览器上的

请求包含: 如果想让servlet1中的响应体输出到浏览器上,那么就要使用请求包含 servlet1:

response.setContentType("text/html; charset=utf-8") response.setHeader("aa","AA") //设置响应头 response.getWriter().print("你好,我是servlet1") //设置响应体 request.getRequestDispatcher("/servlet2").include(request,response);

servlet2:

response.setContentType("text/html; charset=utf-8") response.getWriter().print("你好,我是servlet2") //设置响应体

结果: 你好,我是servlet1 你好,我是servlet2

注意:如果你是用的是请求转发,但是你在被转发的servlet中做了太多的响应体,那么被转发的servlet中的响应体也会被打印到浏览器,此时会抛出异常

最新回复(0)