请求和响应

1. 请求和响应的概述: 

请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程。

响应:服务器根据浏览器发生的请求,返回数据到浏览器在网页上进行显示,这个过程称之为响应。

2.HttpServletResponse对象

HttpServletResponse是一个接口,它的父接口是ServletResponse,在开发中通常使用HttpServletResponse

响应信息分为三部分:响应行,响应头,响应正文(响应体)

发生状态码的相关方法:

        setStatus(int sc ):参数就是状态码。

        常见的状态码:200 响应成功,302 重定向, 404 请求资源找不到,500 服务器代码出现异常。

        错误信息方法:

        setError(iint sc ):参数状态码

        setStatus(int sc , String sm):第一个参数表示状态码,第二个参数是状态码的描述。

3.发送响应消息头的相关的方法:

        响应消息头的数据格式 key-value的形式,有的是一个key,一个value,有的是一个key,多个value。

        设置响应消息头:

        一个key,一个value:setHeader(String key , String value );

        一个key,多个value:addHeader(String key , String value );

        设置相应数据的长度:setContentLength(int src )方法

        设置处理乱码的方法:

        setCharacterEncoding(String a );参数就是一个码表格式,比如:utf-8

        setContentType(String a ):参数代表响应数据的类型和码表格式,比如:"text/html;charset=utf-8".

4.发送响应体相关的方法:

        ①方法一:getOutputStream(),通过response想浏览器返回图片、视频等二进制数据的文件,当然也可以向浏览器返回文本数据。

        ②方法二:getWriter(),通常response向浏览器返回文本数据,不能像浏览器返回图片,视频等二进制文件。

5.实现重定向

        第一种方式:302和Location配合使用,实现重定向。

        response.setStatus(302);

        response.setHeader("Location","/包名/项目名称");

        第二种方式:sendRedirect("/包名/项目名称");

请求和响应_第1张图片

6.HttpServletRequest请求对象

        HttpServletRequest它是一个接口,它的父接口ServletRequest,在开发中常用的是带协议的请求对象。

        请求消息:请求行,请求头,请求参数

请求行

@WebServlet(name = "RequestLineServlet4and10", urlPatterns = "/ch03/RequestLineServlet4and10")
public class RequestLineServlet4and10 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter pw = response.getWriter();
        pw.println("getMethod : "+request.getMethod()+"
");//用于获取HTTP请求消息中的请求方式,GET,POST等 pw.println("getRequestURI : "+request.getRequestURI()+"
");//用于获取请求行中资源名称部分, pw.println("getQueryString : "+request.getQueryString()+"
");//用于获取请求行中的参数部分, pw.println("getProtocol : "+request.getProtocol()+"
");//用于获取请求行中的协议 pw.println("getContextPath : "+request.getContextPath()+"
");//用于获取请求URL中属于web应用程序的路径 pw.println("getPathInfo : "+request.getPathInfo()+"
");// pw.println("getPathTranslated : "+request.getPathTranslated()+"
");// pw.println("getServletPath : "+request.getServletPath()+"
");//用于获取servlet路径 pw.println("getRemoteAddr : "+request.getRemoteAddr()+"
");//用于获取web服务器上接收当前请求网络连接的IP地址 pw.println("getRemoteHost : "+request.getRemoteHost()+"
");//用于获取请求客户端的完整主机名 pw.println("getRemotePort : "+request.getRemotePort()+"
");//用于获取请求客户端网络连接的端口号 pw.println("etServerName : "+request.getServerName()+"
");//用于获取请求所指向的主机名 pw.println("getServerPort : "+request.getServerPort()+"
");//用于获取请求所连接的服务器端口号 pw.println("getScheme : "+request.getScheme()+"
");//用于获取请求的协议名 pw.println("getRequestURL : "+request.getRequestURL()+"
");//用于获取客户端发出请求时的完整URL } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }

7.获取请求消息头的相关方法:

        ①根据消息头,获取值: String value = getHeader(消息头的名称);

        ②获取所有的消息头:Enumeration er = getHeaderNames( );

8. 获取请求参数相关的方法:

        ①根据name属性值,获取用户输入的值:String value = getParameter(属性对应的值);

        ②根据name属性值,获取用户选择的值:String[ ] values = getParameterValues(name属性对应的值);

        ③没有参数,获取所有值:Map map = getParamerterMap( );

9.通过Request对象传递数据

        request域对象:在一次请求中,可以存值和取值

        存值:setAttribute(String key,Object obj);

        取值:Object obj = getAttribute(String key);

        移除:removeAttribute(String key);

10.RequestDispatcher接口

        (1)在开发中访问到一个web资源后,需要服务器跳转到另一个资源去处理请求,可以通过sendRedirect重定向方法来实现,也可以RequestDispatcher转发对象的forward方法来实现。

        前提是得到转发对象:

        RequestDispatcher forwardObj = request.getRequestDispatcher("另一个资源的路径");

        常用方法:

        ①实现请求转发:forwardObj.forward(request,response);

        ②实现请求包含:forwardObj.include(request,response);

        过程分析:

转发:发送了一次请求,响应一次。

重定向:发送了两次请求,响应两次。

请求和响应_第2张图片

        (2)请求转发:

        特点:发送了一次请求 ,响应一次,和request域对象配合使用,可以实现值的传递。

        转发路径:转发动作是在服务器内部完成的,所以转发路径不要携带项目名称。

        请求重定向:

        特点:发送了两次请求,响应了两次,不能和request域对象配合使用。

        重定向路径:重定向动作在浏览器端执行的,所以路径需要携带项目名称。

        (3)请求包含:在服务器内部完成的,路径不需要携带项目名称。

11.处理乱码问题:

        在处理字符流和字节流输出中文乱码时,都采用

         response.setContentType("text/html;charset=utf-8");

        

你可能感兴趣的:(http,html)