java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要为大家详细介绍了 javaweb 如何实现请求和响应, 具有一定的参考价值,感兴趣的小伙伴们可以参考一下
先来看一个流程图:
服务器处理请求的流程:
(1)服务器每次收到请求时,都会为这个请求开辟一个新的线程。
(2)服务器会把客户端的请求数据封装到 request 对象中,request 就是请求数据的载体!
(3)服务器还会创建 response 对象,这个对象与客户端连接在一起,它可以用来向客户端发送响应。
由流程图可以看出,在 JavaWeb 的请求与响应中,最重要的两个参数为 request 以及 response,这两参数在 Servlet 的 service( ) 方法中。
1、response 概念:
response 是 Servlet.service 方法的一个参数,类型为 javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个 response 对象,并传入给 Servlet.service() 方法。response 对象是用来对客户端进行响应的,这说明在 service() 方法中使用 response 对象可以完成对客户端的响应工作。
response 对象的功能分为以下四种:
(1)设置响应头信息
(2)发送状态码
(3)设置响应正文
(4)重定向
2、response 响应正文
response 是响应对象,向客户端输出响应正文(响应体)可以使用 response 的响应流,repsonse 一共提供了两个响应流对象:
(1)PrintWriter out = response.getWriter():获取字符流;
(2)ServletOutputStream out = response.getOutputStream():获取字节流;
当然,如果响应正文内容为字符,那么使用 response.getWriter(),如果响应内容是字节,例如下载时,那么可以使用 response.getOutputStream()。
注意,在一个请求中,不能同时使用这两个流!也就是说,要么你使用 repsonse.getWriter(),要么使用 response.getOutputStream(),但不能同时使用这两个流。不然会抛出 illegalStateException 异常。
3、设置响应头信息
可以使用 response 对象的 setHeader() 方法来设置响应头!使用该方法设置的响应头最终会发送给客户端浏览器!
(1)response.setHeader("content-type", "text/html;charset=utf-8"):设置 content-type 响应头,该头的作用是告诉浏览器响应内容为 html 类型,编码为 utf-8。而且同时会设置 response 的字符流编码为 utf-8,即 response.setCharaceterEncoding("utf-8");
(2)response.setHeader("Refresh","5; URL=http://www.baidu.com"):5 秒后自动跳转到百度主页。
4、设置状态码及其他方法
(1)response.setContentType("text/html;charset=utf-8"):等同与调用 response.setHeader("content-type", "text/html;charset=utf-8");
(2)response.setCharacterEncoding("utf-8"):设置字符响应流的字符编码为 utf-8;
(3)response.setStatus(200):设置状态码;
(4)response.sendError(404," 您要查找的资源不存在 "):当发送错误状态码时,Tomcat 会跳转到固定的错误页面去,但可以显示错误信息。
5、重定向(***** 重点 *****)
5.1 什么是重定向(两次请求)
当你访问 http://www.sun.com 时,你会发现浏览器地址栏中的 URL 会变成 http://www.oracle.com/us/sun/index.htm,这就是重定向了。重定向是服务器通知浏览器去访问另一个地址,即再发出另一个请求。
5.2 如何完成重定向?
答:重定向的状态码为 302,我们首先使用 response 对象向浏览器发送 302 的状态码,之后再设置一个 Location,即给出一个可用的 URL,由浏览器去访问新的 URL,实现重定向。
举例:
- public class AServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- response.setStatus(302);
- response.setHeader("Location", "http://www.baidu.com");
- }
- }
上面代码的作用是:当访问 AServlet 后,会通知浏览器重定向到百度主页。客户端浏览器解析到响应码为 302 后,就知道服务器让它重定向,所以它会马上获取响应头 Location,然发出第二个请求。
还有一种快捷的重定向方法,即使用 response.sendRedirect() 方法。比如上面例子中的两句可以使用 response.sendRedirect("http://www.baidu.com") 代替。
request—封装了客户端所有的请求数据
1、request 概述
来源: http://www.phperz.com/article/17/1126/359609.html