Servlet HttpServletRequest 接口

HttpServletRequest 接口

HttpServletRequest 接口是一个公共接口类,继承ServletRequest 接口,客户端浏览器发出的请求会封装成一个HttpServletRequest 对象,包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内,容器将HttpServletRequest 对象以参数的形式传入service()方法中,判断调用doget还是dopost方法,HTTP 请求消息分为请求行、请求消息头和请求体三部分。

请求行使用及其方法

返回类型方法名说明
StringgetMethod()获取请求方法,如get,post等
StringgetServletPath()获取servlet所映射的路径
StringgetRemoteHost()获取客户端的完整主机名,如果无法解析,则返回客户端的ip地址
StringgetRemoteAddr()直接获取客户端的ip地址
StringgetContextPath()返回servlet上下文的名字
StringgetQueryString()获取请求行的参数,也就是url中?后的所有内容
StringgetRequestURI()该方法用于获取请求行中的资源名称部分,即位于 URL 的主机和端口之后,参数部分之前的部分

请求头使用及方法

在浏览器发送请求后,请求头里面有上传进来的一些附加信息, HttpServletRequest 接口定义了许多获取 HTTP 请求头字段的方法。

返回类型方法名说明
StringgetHeader(String name)获取一个指定字段的值
EnumerationgetHeaders(String name)获取一个或者多个相同头字段的所有值返回一个枚举集合
EnumerationgetHeaderNames()返回请求头中所有头字段的枚举集合
StringgetContentType()获取 Content-Type 头字段的值
intgetContentLength()获取 Content-Length 头字段的值
StringgetCharacterEncoding()获取请求消息的字符集编码

请求体使用及方法

请求体是是指获取用户提交的表单数据,例如密码,账号等,但首先需要获取它们的参数。下面定义的是获取参数的方法。

返回类型方法名说明
StringgetParameter(String name)获取指定参数的值
StringgetParameterValues (String name)以字符串形式返回指定参数的所有参数值。
EnumerationgetParameterNames()以枚举集合返回请求中的所有参数名
MapgetParameterMap()将请求中的所有参数名和参数值装入一个Map集合返回

示例:

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <title>MyWeb</title>
</head>

<Style>

</Style>

<body>
    <form action="/MyWeb1/myservlet1" method="POST">
        账号: <input type="text" name="username"><br> 
        密码: <input type="password" name="password"><br>
        <input type="submit" value="提交">
    </form>
</body>

</html>
package com.by.qy;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/myservlet1")
public class RequestParam extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            
         response.setContentType("textml;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        
        String name=request.getParameter("username");
        String password=request.getParameter("password");
       
        writer.print("账号:"+name+"<br>"+"密码:"+password+"<br>");
}

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

中文乱码

  1. 以get形式发送请求,请求参数保存在请求头中,到达服务器之后,第一件事就时解码,在tomcat9.0中默认为utf-8字符集。
  2. 以post方式发送请求,第一件事也是解码,但默认的是ISO-8859-1字符集,修改缓冲区的字符集:request.setCharacterEncoding(“utf-8”);

编码与解码

  1. URLEncoder.encode(字符串, 字符集字符串); 编码。
  2. URLDecoder.decode(字符串,字符集字符串);解码
  3. new String(参数字符串.getBytes(字符集编码),字符集解码);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值