欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HttpServletResponse和HTTPServletRequest

程序员文章站 2022-06-19 11:24:04
...

HttpServletResponse

    1、介绍

        1)HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在于servlet-api.jar

        2)HttpServletResponse接口实现类由Http服务器负责提供

        3)HttpServletResponse接口负责将doGet/doPost方法执行结果写入到【响应体】中交给浏览器

        4)开发人员习惯于将HttpServletResponse接口修饰的对象称为【响应对象】

    2、主要功能

        1)将执行结果以二进制的形式写入到【响应体】中

        2)设置响应头中【content-type】属性值,控制浏览器使用对应的编译器将响应体中的二进制数据编译为【文字,图片,视频,相关命令】

        3)设置响应头中的location属性,将一个请求地址赋值给location。控制浏览器向指定的服务器发送请求。

将执行结果以二进制的形式写入到【响应体】中

public class OneServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //响应结果
        String result="Hello World!!!";

        //-------------响应对象将结果写入到响应体中----------------start
        //1、通过响应对象,向Tomcat服务器索要输出流
        PrintWriter out=response.getWriter();

        //通过输出流,将执行结果以二进制形式写入响应体中
        out.write(result);
        //-------------响应对象将结果写入到响应体中----------------end
    }//doGet执行完毕
    //Tomcat将响应包推给浏览器
}

 

设置响应头中【content-type】属性值,控制浏览器使用对应的编译器将响应体中的二进制数据编译为【文字,图片,视频,相关命令】

不改变content-type属性的值所得结果如下

HttpServletResponse和HTTPServletRequest

public class ThreeServlet extends HttpServlet {


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String result="Java<br/>MYSQL<br/>HTML<br/>";
        String result2="林允儿<br/>李智恩<br/>鞠婧祎<br/>";
        String result3="<a href=\"第二版互联网通信流程图.png\">图片</a>";

        //设置响应头content-type
        response.setContentType("text/html;charset=utf-8");

        //向Tomcat索要输出流
        PrintWriter out=response.getWriter();
        //通过输出流将结果写入到响应体中
        out.print(result);
        out.print(result2);
        out.print(result3);

    }
}

执行

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

HttpServletResponse和HTTPServletRequest

设置响应头中的location属性,将一个请求地址赋值给location。控制浏览器向指定的服务器发送请求。

public class FourServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String result="http://www.baidu.com?username=\"zhangsan\"";

        //通过响应对象,将地址赋值个给响应头中的location属性
        response.sendRedirect(result);


    }
    /*
    * 浏览器在接收响应包之后,如果
    * 发现响应头中存在location属性
    * 自动通过地址栏向location指定网站发送请求
    *
    *
    * sendRedirect方法远程控制浏览器请求行为【请求地址,请求方式,请求参数】
    */

}

当访问该Servlet接口实现类时会直接跳转到百度。

HttpServletRequest

    1、介绍

        1)HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在于servlet-api.jar

        2)HttpServletRequest接口实现类由Http服务器负责提供

        3)HttpServletRequest接口负责在doGet()/doPost()方法运行的时候读取Http请求协议包中信息

        4)开发人员与习惯于将HTTPServletRequest接口修饰的对象称为【请求对象】

    2、主要功能

        1)可以读取Http请求协议包中【请求行】信息

        2)可以读取Http请求协议包中【请求头】或【请求体】中请求参数信息

        3)可以代替浏览器向Http服务器申请资源文件的调用

可以读取Http请求协议包中【请求行】信息

public class OneServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通过请求对象,读取【请求行】中的URL信息
        String url=request.getRequestURL().toString();
        //通过请求对象,读取【请求行】中的method信息
        String method=request.getMethod();
        //通过请求对象,读取【请求行】中uri属性
        /*
        URI:资源文件精准定位地址,在请求行中并没有URI这个属性。
            实际上是从URL中截取的一个字符串,这个字符串的格式"/网站名/资源文件名"
            URI用于让Http服务器对被访问的资源文件进行定位处理
         */
        String uri=request.getRequestURI();
        System.out.println("URL:"+url);
        System.out.println("method:"+method);
        System.out.println("URI:"+uri);
    }
}

HttpServletResponse和HTTPServletRequest

可以读取Http请求协议包中【请求头】或【请求体】中请求参数信息

 浏览器以GET方式发送请求,请求参数保存在【请求头】中。在Http请求协议包到达Http服务器之后,第一件事就是进行解码

    请求头二进制内容由Tomcat负责解码,Tomcat9.0默认使用【utf-8】字符集,可以解释一切国家的文字

 

    浏览器以POST方式发送请求,请求参数保存在【请求体】中,在Http请求协议包到达Http服务器之后,第一件事就是进行解码

    请求体二进内容由当前请求对象(request)负责解码,request默认情况下使用的是【ISO-8859-1】字符集,一个东欧语系的字符集

    此时如果请求体参数内容是中文,将无法解码,只能得到乱码。

    在Post请求方式下,在读取请求的内容之前,应该通知请求对象去使用【utf-8】字符集

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<center>
    <form action="/myWeb/three" method="get">
        请求参数<input type="text" name=username />
        <input type="submit" value="get方式访问ThreeServlet"/>
    </form>
    <form action="/myWeb/three" method="post">
        请求参数<input type="text" name=username />
        <input type="submit" value="post方式访问ThreeServlet"/>
    </form>

</center>
</body>
</html>
public class ThreeServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通知请求对象,使用utf-8字符集对请求体二进制内容进行解码
        request.setCharacterEncoding("utf-8");
        //通过请求对象,读取【请求体】中参数
        Enumeration paraNames=request.getParameterNames();
        while(paraNames.hasMoreElements()){
            String paraName=(String)paraNames.nextElement();
            //通过请求对象获取【请求体】中参数对象的值
            String value=request.getParameter(paraName);
            System.out.println("Post----"+paraName+"-------"+value);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通过请求对象,读取【请求头】中参数
        Enumeration paraNames=request.getParameterNames();
        while(paraNames.hasMoreElements()){
            String paraName=(String)paraNames.nextElement();
            //通过请求对象获取【请求头】中参数对象的值
            String value=request.getParameter(paraName);
            System.out.println("Get----"+paraName+"-------"+value);
        }
    }
}

   请求对象和响应对象的生命周期

HttpServletResponse和HTTPServletRequest

    1、在Http服务器接收到浏览器发送的【http请求协议包】之后

       自动为当前的【http请求协议包】生成一个【请求对象】和一个【响应对象】

    2、在Http服务器调用doGet和doPost方法时,负责将【请求对象】和【响应对象】作为实参传递给doGet和doPost方法,确保方法正常执行

    3、在Http服务器准备推送Http响应协议包之前,负责将本次请求关联的【请求对象】和【响应对象】销毁。

        ***【请求对象】和【响应对象】的生命周期贯穿一次请求处理过程中

        ***【请求对象】和【响应对象】相当于用户在服务端的代言人。

 

 

 

 

 

 

 

 

 

 

相关标签: servlet