Servlet学习之HttpServletRequest

1.概述

  • HttpServletRequest是一个接口,带包名为jakarta.servlet.http.HttpServletRequest。

  • 该接口是Servlet规范中的一员,其父接口是ServletRequest。

  • 在Tomcat中该接口的实现类是RequestFacade

    • public class RequestFacade implements HttpServletRequest {}
      
  • 该接口的实例化对象封装了请求体数据。请求体可以看一下我的另一篇博客(https://blog.csdn.net/qq_52002412/article/details/124292946)

2.常用方法

Map<String,String[]> getParameterMap() // 这个是获取Map
    
Enumeration<String> getParameterNames() // 这个是获取Map集合中所有的key
    
String[] getParameterValues(String name) // 根据key获取Map集合的value
    
String getParameter(String name)  // 获取value这个一维数组当中的第一个元素。这个方法最常用。
    
String remoteAddr = request.getRemoteAddr();// 获取客户端的IP地址

void setCharacterEncoding(String encoding);// 设置请求体的字符集

String contextPath = request.getContextPath();// 获取应用的根路径

String method = request.getMethod();// 获取请求方式

String uri = request.getRequestURI();// 获取请求的URI

String servletPath = request.getServletPath();// 获取servlet path

以上三个方法都与用户所提交的数据有关系。

3.HttpServletRequest存放的信息

HttpServletRequest对象是由Tomcat实现,该接口的实例化对象封装了HTTP的请求协议。

而我们作为javaweb程序员只需要面向接口编程就可以获得请求信息。

4.HttpServletRequest存放数据的思考

  • 首先我们知道当我们向服务器提交数据时,其提交的格式是:url?username=abc&userpwd=111&hobby=s&hobby=d&hobby=tt,那么不难联想到使用哪种数据结来存储用户提交的数据:Map。

  • 但是我们应该考虑到,如果用户提交的数据如果是多选,那么就没办法做到一个键对应多个值,所以我们可以想到使用Map<String, String[]>就可以做到一个键对应多个值。

  • 由上我们可以知道,当用户向服务器提交数据时,不管是何种数据都是以字符串的形式上交到服务器的。

像上面提到的数据我们就可以这样存:

key				value
-------------------------------
username		{"abc"}
userpwd			{"111"}
hobby			{"s","d","tt"}

因为大多数情况下,都是一个键对应一个值,很多时候我们没必要获取用来存放的value的数组,所以一般情况我们使用getParameter()来获取用来存放value的数组的第一个值。

5.应用域与请求域

应用域是指的是ServletContext,请求域指的是HttpServletRequest。Servlet一共由三大域对象,后面我们还会学习到HttpSession。

关于应用域不懂的话可以看看我的这一篇博客(https://blog.csdn.net/qq_52002412/article/details/124375227),提到了ServletContext,不过谈的很浅,毕竟我也是个小白。

操作域的方法:不管是应用域还是请求域,他们都具有相同的操作域的方法

  • void setAttribute(String name, Object obj); // 向域当中绑定数据。
    Object getAttribute(String name); // 从域当中根据name获取数据。
    void removeAttribute(String name); // 将域当中绑定的数据移除
    
  • 其实上面三个方法有点像Map存取数据的方法。总而言之就是三个方法就是向域中存取信息。

  • 在这里要注意区分getAttribute()和geParameter()两个方法。

    • 第一个方法:获取的是请求域当中绑定的数据。
    • 第二个方法:获取的是用户在浏览器上提交的数据。

生命周期:ServletContext的生命周期明显长于HttpServletRequest。

  • ServletContext的生命周期从服务器启动到服务器结束
  • HttpServletRequest的生命周期从一次请求发出到结束

作用范围:ServletContext的作用范围相较于HttpServletRequest更广泛

  • ServletContext是对一个项目中的所有App生效,因此我们最好将所有用户共享的并且不打算做修改的小数据放在ServletContext中,否则服务器会很有压力。
  • HttpServletRequest中的信息只对单次请求起作用。
  • 在实际使用中我们如果要操作域中的内容的时候,多个域可用的情况下,我们要优先选择小的域,避免占用过多的系统资源。
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少不入川。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值