JavaEE day5:Servlet的request和respose 2

本文详细介绍了HTTP请求与响应的工作原理,包括如何从请求中获取响应信息、请求转发的实现方式及转发路径的选择,以及解决乱码问题的方法。此外,还深入探讨了HttpServletResponse对象的应用,例如设置响应状态码、发送响应头控制浏览器刷新与缓存,以及请求重定向的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Request回顾

1、从请求中拿到响应信息

  • 请求行:GET/request/servelet/haha HTTP/1.1
  • 请求头内容:request.getHeader()
  • 请求报文中所携带的(请求参数)的数据,比如用户名、密码等表单数据:
    • request.getParameter(key) 一个key对应一个value
    • request.getParameterValue(key) 一个key对应多个value
  • 请求表单中的路径:绝对路径和相对路径
    2、请求转发
  • 转发对象(目标组件):Servlet,jsp,html
  • 请求转发的路径问题:绝对路径和相对路径(请求转发只限于当前应用)
  • 实际转发的api:
    • 转发器 Request.getDispatcher()得到一个转发器
    • 调用Dispatcher对象的forward或者include方法实现请求转发的区别:最大的区别体现在源组件的响应是否包含在最终的响应结果中

简介

  • request和response对象代表请求和响应,那我们要获取哭护短提交过来的数据只需要找request对象就行了。要想容器或者客户机输出数据,只需要找response对象就行了

HttpServletResponse

  • HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头、发送响应状态码的方法。
    1、发送响应状态码
    2、向客户端发送信息

出现乱码:编解码不一致

  • 方式1
    getCharacterEncoding()可以得出发送信息(编码)时默认的的字符集是ISO-8859-1,可以使用SetCharacterEncoding设定编码方式,然后在浏览器中调整解码字符集(浏览器自带或三方插件)。
  • 方式2通过api既指明编码方式也指明解码方式
    response.setContentType(“text/html;charset=utf-8”);
  • 方式3 使用字节流
    首先对于字节流本身没有字符集这个改变,但是要将字符串转化成字节流必须经过一次编码过程(jvm默认的字符集 utf-8)
    response.getOutputStream().write(“你好 “.getBytes(“utf-8”));
    System.out.println(“jvm default:”+Charset.defaultCharset()); response.setContentType(“text/html;charset=utf-8”);
  • 方式4:
        response.setCharacterEncoding("utf-8");
        response.getWriter().write(
            "<html lang=\"en\">\n"
            + "<head>\n"
            + "    <meta charset=\"UTF-8\">\n"
            + "    <title>Title</title>\n"
            + "</head>\n"
            + "<body>\n"
            + "你好\n"
            + "\n"
            + "</body>\n"
            + "</html>");

操作编码的字符集的api:response。setCharacterEncoding();getBytes()
操作浏览器解码的字符集:response。setContentType()

response常见应用 请求头

  • 发送http头,控制浏览器定时刷新网页
    1、输入一个随机数,控制浏览器每2s刷新一次
form action="servlet/responseheader" method="get" 

int i=new Random().nextInt(10000);
//通过http协议,告诉浏览器,以2s的频率,刷新页面(即重新发出请求,并获取响应)
response.setHeader("refresh","2");
response.getWriter().println(i);

2、利用refresh刷新到其他组件。模拟注册页面,注册梳理并交给一个Servlet,在Servlet处理完成后,显示注册成功并转向主页

response.setHeader("Refrash","5;http://www.baidu.com");
    response.setHeader("Refresh", "3;/response/login.html");
    response.setContentType("text/html;charset=utf-8");
    response.getWriter().write("恭喜你注册成功");

response常见应用 Expires

response.setDateHeader(“Expires”, System.currentTimeMillis() + 60 * 1000);
- 发送http头,控制浏览器缓存当前文档内容
- 作用:利用缓存能够减轻服务器的负担

response常见应用 请求重定向

  • 请求重定向指:一个web资源受到客户端请求后,通知另外一个web资源,这称之为请求重定向
    -这里写图片描述

重定向与Refresh不同,重定向并未直接跳转,而是向浏览器指明,下一次请求的目标,由浏览器自己重新构建http请求,访问重定向响应报文所指向的地址

response.sendRedirect(“http://www.baidu.com“);

// 自己模拟重定向的响应报文(sendRedirect),自己实现重定向
response.setStatus(302);
response.setHeader("Location", "http://www.baidu.com");
response.getWriter().write("hello, redirect");

重定向之后的代码仍然会执行

指定自己的默认字符集为utf-8;分为tomcat和idea

  • tomcat
    这里写图片描述

  • idea
    这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值