Servlet Java Web开发(3.1) request response
0.Servlet get 如何发送流
a.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter.print(yourString);}
b
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { byte [] tosend="good king".getBytes(); response.getOutputStream().write(tosend);}
注意:两者只能用一个,不可混用。
1.重定向。
关键点:2次请求。
client请求A资源,A资源返回302,还有B的地址。client请求B。
BServlet中的代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Location", "/HelloWorld/CServlet"); response.setStatus(302);
注意:或者使用response.sendRedirect("/HelloWorld/CServlet");
注意重定向位置是相对于主机的,比如localhost:8080,当然也可以不加/,response.sendRedirect("http://www.baidu.com");直接重定向到百度。
BServlet回复内容:
HTTP/1.1 302 Found
Server: Apache-Coyote/1.1
Location: /HelloWorld/CServlet
Content-Length: 0
Date: Fri, 08 Jun 2018 12:43:09 GMT
然后客户端就按照地址直接访问CServlet去了。
1.1延时重定向
访问后,客户端等待几秒后再重定向。BServlet代码如下
PrintWriter w=response.getWriter(); w.print("welcome to this page..Redirect in 5 seconds.?"); response.setHeader("Refresh", "5;URL=/HelloWorld/CServlet");
客户端访问BServlet,BServlet返回
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Refresh: 5;URL=/HelloWorld/CServlet
Content-Length: 50
Date: Fri, 08 Jun 2018 13:19:37 GMT
welcome to this page..Redirect in 5 seconds.
客户端5秒后访问CServlet
2.请求URL的含义
3.Referer
String referer=request.getHeader("Referer");
System.out.println(referer);
a,如果使用浏览器直接访问,或者直接链接BServlet,referer值为null
b项目新建一个html文件,位置是项目(HelloWorld)下的hi.html,主要内容
<a href="/HelloWorld/BServlet">I am a Link</a>此时,点击链接访问BServlet,http协议中的referer就会是:
4.请求转发和请求包含
和重定向不同的是,对于客户端来说,只有一个请求。
相关代码request.getRequestDispatcher("/anotherServlet").forward(request,response);
请求转发的例子:
创建BServlet,get方法中代码,BServlet中不应该设置响应体。
创建CServlet,get方法中代码
用户访问BServlet,地址栏不会变化,浏览器输出you're now at CServlet
控制台输出
i am BServlet
i am CSerlet
请求包含的例子
和请求转发的区别:BServlet中可以设置响应体。
浏览器输出something in BServletyou're now at CServlet