[Java学习笔记]请求Request和响应Response

本文详细解析了JavaEE中请求(Request)和响应(Response)的工作过程,包括如何通过Response设置响应行、响应头和响应体,以及Request获取请求行、请求头和请求体的方法。针对中文乱码问题,提供了设置Response编码和Content-Type的解决方案。

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

图解请求和响应的过程

我们知道Servlet本身是单例模式的,每类Servlet在工作过程中只有一个对象参与响应请求,而每次Servlet对象对客户端的请求进行响应时是通过下面这个过程的:
在这里插入图片描述

响应 Response

response代表响应,所以我们可以通过该对象分别设置Http响应的响应行,响应头和响应体,在这里插入图片描述

通过response设置响应行

  • 设置响应行的状态码
    setStatus(int sc)

通过response设置响应头

  • addHeader(String name, String value)
    addIntHeader(String name, int value)

    addDateHeader(String name, long date)

    setHeader(String name,String value)

    setDateHeader(String name, long date)

    setIntHeader(String name, int value)

    其中,add表示添加键值对(允许存在重复的键),而set表示设置

通过response设置响应体

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

关于设置中文的乱码问题

  • 解决方法一:
    response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过response的setCharacterEncoding(String charset) 设置response的编码,但浏览器的默认编码是本地系统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以手动修改浏览器的编码是UTF-8。
  • 解决方法二:
    通过response的setContentType(String type)方法指定页面解析时的编码是UTF-8
    response.setContentType(“text/html;charset=UTF-8”);
    上面的代码不仅可以指定浏览器解析页面时的编码,同时也内含setCharacterEncoding的功能,所以在实际开发中只要编写response.setContentType(“text/html;charset=UTF-8”);就可以解决页面输出中文乱码问题。

请求 Request

request代表请求,所以我们可以通过该对象分别获得Http请求的请求行、请求头和请求体。(几乎没办法设置请求体,并且这也没必要,因为在服务端接受到请求后去修改它意义不大)。

在这里插入图片描述

通过request获得请求行

获得客户端的请求方式:

String getMethod()

获得请求的资源:

String getRequestURI()

StringBuffer getRequestURL()

String getContextPath() — web应用的名称如/WebAppName

String getQueryString() — get提交url地址后的参数字符串如:username=zhangsan&password=123
注意:

request获得客户机(客户端)的一些信息

request.getRemoteAddr() — 获得访问的客户端IP地址

通过request获得请求头

long getDateHeader(String name)

String getHeader(String name)

Enumeration getHeaderNames()

Enumeration getHeaders(String name)

int getIntHeader(String name)

request.getHeader(“referer”)
//作用:执行该此访问的来源,做防盗链。

通过request获得请求体

请求体中的内容是通过post提交的请求参数,格式是:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
username [zhangsan]
password [123]
hobby [football,basketball]

以上面参数为例,通过一下方法获得请求参数:
String getParameter(String name)

String[] getParameterValues(String name)

Enumeration getParameterNames()

Map<String, String[]> getParameterMap()

注意:get请求方式的请求参数,上述的方法一样可以获得。

解决post提交方式的乱码:

request.setCharacterEncoding(“UTF-8”);

解决get提交的方式的乱码:

parameter = new String(parameter.getbytes(“iso8859-1”),“utf-8”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值