zoukankan      html  css  js  c++  java
  • Servlet中的request与response

    了解这方面的知识可以查看以下博客
     

    1.掌握HttpServletRequest与HttpServletResponse的概述

    我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。
    service方法中的request的类型是ServletRequest,response的类型是ServletResponse

    doGet/doPost方法的request的类型是HttpServletRequest,response的类型是HttpServletResponse,他们都是ServletRequest,ServletResponse的子接口,功能更加强大。

    2.掌握抓包工具的使用

    3.了解HttpServletRequest与HttpServletResponse的请求行,请求头,请求体

    3.1:HttpServletRequest的请求行请求头请求体

    比如抓取request请求:掌握post或者get提交的区别,了解request请求行请求头请求体有哪些重要的key和对应的api

    比如请求行

    String getContextPath() ---web应用的名称(常用)

    比如请求头

    String getHeader(String name)

    Refer头的作用是用来做防盗链的,获取访问的来源

    比如请求体 掌握request与表单获取有关的方法的使用

    String getParameter(String name)

    String[] getParameterValues(String name)

    Enumeration getParameterNames()

    Map<String,String[]> getParameterMap() 很好用!!!!与框架一起使用

    掌握解决获取表单数据乱码的解决方案

     解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

     解决get提交的方式的乱码: parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

    3.2:HttpServletResponse的请求行请求头请求体

    了解响应行响应头响应体有哪些重要的Key和value,重点掌握几个设置响应行响应头响应体的api的使用

    掌握常见的状态码有哪些和代表什么意思:200,404,500,302,

    设置响应行的状态码

    setStatus(int sc),如果你手动设置了的话,tomcat那边就不会在帮你设置了

    设置响应头

    • addHeader(String name, String value)
    • addIntHeader(String name, int value) :有些头的值要求设置时是int类型的
    • addDateHeader(String name, long date):比如有个头  date: "Thu, 09 Nov 2017 07:32:09 GMT"
    • setHeader(String name, String value)
    • setDateHeader(String name, long date)
    • setIntHeader(String name, int value)

    设置响应体文本:

    PrintWriter getWriter()

    获得字符流,通过字符流的write(String s)方法可以将字符串设置到response缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。

    解决中文输出乱码的问题:

    原因:response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过response的setCharacterEncoding(String charset) 设置response的编码

    但是我们发现还是客户端还是不能正常显示文字。

    原因:我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以 手动修改浏览器的编码是UTF-8。

    我们还可以在代码中指定浏览器解析页面的编码方式

    通过response的setContentType(String type)方法指定页面解析时的编码是UTF-8

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

    在实际开发中只要编写 response.setContentType("text/html;charset=UTF-8");即可解决

     4.掌握HttpServletRequest与HttpServletResponse的运行流程

    5.掌握转发与重定向的区别

    转发的api:

     request.getRequestDispatcher(转发的地址).forward(req,resp);

     重定向的api:

    HttpServletResponse(httpServletResponse).sendRedirect();

     转发是服务器行为比如servlet1没有这个资源但是知道servlet2有于是转发到servlet2进行获取。url地址栏不会发生改变,浏览器只做了一次访问请求

    重定向是比如你在某个商城注册成功就给你重定向到登陆页面去,url地址栏会发生改变,浏览器至少做了两次请求。重定向之后之前的数据全部丢失(request域的作用范围所限),而转发不会。

    总的来说,转发的性能优于重定向,因为少让浏览器跳来跳去了,但是使用哪个根据实际场景分析。

    使用转发与重定向目标地址的写法:

    因为转发只能在服务器之间进行:可以直接写目标地址比如   request.getRequestDispatcher("/login.jsp").forward(request, response);

    重定向是可以在不同站点之间进行跳转的,所以必须加上当前web应用的名称比如    response.sendRedirect(request.getContextPath() + "/login.jsp");

    6.其他

     request是一个域对象:其作用范围为一次请求中,具有下列三个通用的api

    request.setAttribute(name,value)

    request.getAttribute(name)

     request.removeAttribute(name)

    7.ServeletContext域与Request域比较

    ServletContext

      创建:服务器启动

      销毁:服务器关闭

      域的作用范围:整个web应用

    request

      创建:访问时创建request

      销毁:响应结束request销毁

      域的作用范围:一次请求中

  • 相关阅读:
    安卓手机!用swiper做轮播效果,两张图片之间会有一个像素的空白
    手机端swiper快速滑动会有白屏
    axios请求下载excel文件
    人人都能学会的webpack5搭建vue3项目(二)配置Vue
    人人都能学会的webpack5搭建vue3.0项目,可应用于生产环境 (一)
    mybatis 生成 mapper文件
    超强工具类系列
    mybatis 自动生成mapper文件
    面试
    linux安装mysql8.0.25
  • 原文地址:https://www.cnblogs.com/zengcongcong/p/10426828.html
Copyright © 2011-2022 走看看