HttpServletResponse和HTTPServletRequest

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属性的值所得结果如下

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");

设置响应头中的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);
    }
}

可以读取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);
        }
    }
}

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

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

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

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

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

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

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

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值