首页 > 其他分享 >ServletRequest接口

ServletRequest接口

时间:2022-12-06 11:36:08浏览次数:34  
标签:HttpServletRequest 请求 对象 数据 request 接口 ServletRequest String

WEB-INF目录

  • WEB-INF目录下的资源是受保护的,在浏览器上不能通过路径直接访问,所以HTML,CSS,JS,image等一些静态资源一定放到WEB-INF之外。

ServletRequest接口

HttpServletRequest是一个接口,全限定名称:javax.servlet.http.HttpServletRequest

HttpServletRequest接口是Servlet规范中的一员

HttpServletRequest接口的父接口是ServletRequest

  • public interface HttpServletRequest extends ServletRequest {}
    

HttpServletRequest接口是谁实现的?HttpServletRequest对象是谁创建的?

  • 通过测试:org.apache.catalina.connector.RequestFacade@17796a02 实现了HttpServletRequest接口

  • public class RequestFacade implements HttpServletRequest {}
    
  • 测试结果:说明Tomcat服务器实现了 HttpServletRequest接口

HttpServletRequest对象中都包装了什么信息?

  • HttpServletRequest是Tomcat服务器创建的,封装了Http请求协议的全部信息
  • 实际上在用户发送请求时遵循了Http协议,发送的是Http请求协议,Tomcat服务器将Http协议中的数据和信息全部解析出来,然后Tomcat服务器将这些信息封装在HttpServletRequest对象中,传给了我们
  • 对于我们来说,只需要面向HttpServletRequest接口调用方法即可

request和response对象的生命周期?

  • request和response对象的生命周期极短
  • 一次请求/响应 对应一个request/response 只在一次请求,响应中有效

HttpServletRequest对象中有哪些常用方法?这些方法可以完成哪些功能?

  • 怎么获取前端浏览器用户提交的数据?

    • //四个常用方法
      String getParameter(String name)	//获取key对应的value集合中的第一个元素,大部分前端提交的数据都是Key,Value	一对一关系,这个方法最常用
      Map<String,String[]> getParameterMap()	//获取Map为什么是String[]?
      //因为用户表单提交的数据可能一个key对应多个value
      Enumeration<String> getParameterNames()	//获取Map集合中的key
      String[] getParameterValues(String var1)//根据Key值获取对应的Value集合对象,需要循环遍历输出
      //以上的四个方法,和获取用户提交的数据有关
          
      //其他常用方法
          String getRemoteAddr();//获取客户端的IP地址、
      	RequestDispatcher getRequestDispatcher();//请求转发器,用来跳转
      
    • 前端form表单提交了数据之后,用什么来存储这个数据?

      前端提交的数据:username=122&password=12&sex=1&hobby=s&hobby=d

      • Map<String,String>
            key		value
         -----------------------------------   
          username	122
          password  12
           sex		1
           hobby	s
           hobby	d
        ---------------------------------------------
         //以上这种存储方式有问题,当key一样时,键值会覆盖
            
        //采用这种Map<String,String[]>类型来存储最合适
        Map<String,String[]>
            key		value
         ------------------------------------------
          username	{"122"}
          password	{"12"}
          sex		{"1"}
          hobby		{"s","d"}
        
  • 应用域对象是什么?

    • ServletContext(Servlet上下文对象)

    • 什么时候会考虑向ServletContext这个应用域当中绑定数据?

      • 1,所以用户共享的数据

      • 2,这个共享的数据量很小

      • 3,这个共享的数据很少的修改操作

      • 以上三个条件都满足的情况下,使用应用域对象,可以大大的提高程序的执行效率

      • 实际上向应用域中绑定数据,就相当于把数据放在了缓存中,然后用户在访问数据时,直接从缓存中取,减少了IO操作,提高系统性能。

    • ServletContext当中有三个操作域的方法:

      • void setAttribute(String name,Object obj);//向域中绑定数据
        Object getAttribute(String name);//向域中获取数据
        void removeAttribute(String name);//将域中绑定的数据移除
        
  • “请求域”对象

    • ”请求域“对象比“应用域”对象范围小很多,生命周期短很多,只在一次请求内有效

    • 一个请求对象request对应一个请求域对象,一次请求结束后这个请求域就销毁了

    • 请求域对象也有这三个方法:

      • void setAttribute(String name,Object obj);//向域中绑定数据
        Object getAttribute(String name);//向域中获取数据
        void removeAttribute(String name);//将域中绑定的数据移除
        
    • 请求域和应用域的选用原则?

      • 尽量使用小的域对象,小的域对象占用的资源较少
  • 有哪些缓存技术?

    • 字符串常量池

    • 整数型常量池[-128---127],(只要是在这个范围当中的Interger对象不在创建,直接从这个整数型常量池获取)

    • 数据库连接池(提前创建N个连接对象,将连接对象放在集合中,使用连接对象时,直接从缓存中取,省去了连接对象的操作,提升效率)

    • 线程池(Tomcat服务器是支持多线程的,提前创建好N个线程对象,将线程对象放在集合中,当用户请求过来后,直接从线程池中获取线程对象,直接拿来用,提升系统性能)

  • 跳转(转发)

    • 转发(一次请求)

    • 当想要在AServelet调用BServlet时,如果自己创建BServlet则这个Servlet是不受服务器管理的,是一个占用资源的违法程序

      • 比如:
        BServlet servlet = new Bservlet();
        servlet.doGet(request,response);
        --------------------------------------
            //上述的解决方法存在问题
        //一般用到转发机制,这种机制可以被服务器识别
            //第一步:获取请求转发器对象,传入请求路径
        RequestDispatcher dispatcher = request.getRequestDispatcher("/b");
        	//第二步:调用转发器的forward方法完成转发
        dispatcher.forward(request,response);
        //第一步和第二步合并在一起,实际上是把下一个资源的跳转路径告知给Tomcat服务器,并且调用其方法
        request.getRequestDispatcher("/b").forward(request,response);
        
    • 当两个Servlet需要共享数据时可以将共享的数据放在request请求域对象中,再使用转发机制,保证AServlet和BServlet在同一次请求中,这样就可以实现两个Servlet对象的数据共享。当然也可以放在ServletContext应用域对象中,只是这样范围太大,占用资源。

    • 转发机制不仅可以转发动态的Servlet资源,也可以转发静态的html资源,只要是WEB容器中的合法资源都可以转发。

标签:HttpServletRequest,请求,对象,数据,request,接口,ServletRequest,String
From: https://www.cnblogs.com/RepublicLine/p/16954729.html

相关文章

  • 基于Xilinx FPGA的以太网接口的链接状态获取方法
    链接状态:pg138-axi-ethernet.pdf  《AXI1G/2.5GEthernetSubsystemv7.2》Figure2-38:PCSPMATEMACStatusRegister(0x0000_0030)比特位:PhyLinkStatuspg051-tri-......
  • java 如何正确使用接口返回对象Result
    1.Result的使用Result的使用,是java项目中开发接口的必备,它经常被我们用作接口的返回对象,方便前端或者其他程序的远程调用后处理业务。它一般包括以下几个属性:code:一般......
  • 2023年第 13期《python接口web自动化+测试开发》课程,12月24号开学!
    2023年第13期《python接口web自动化+测试开发》课程,12月24号开学(课程全面升级!)主讲老师:上海-悠悠上课方式:微信群视频在线教学,方便交流本期上课时间:2022年12月24号-20......
  • mapper接口中常见的增删改查
    前言相信大家在使用mybatis写mapper接口的时候,最常用且简单的方法就是增删改查了。我也是刚开始做项目,在本篇文章中,我将根据自己在vhr微人力项目中的mapper接口方法为......
  • webservice接口调用OA方法
    【背景】  最近一直在做这样一个需求,在OA中写一个webservice接口,通过调用OA中更新的方法来同步上级主管,我们公司的OA系统是买的产品,一无所知的我就这样开启了无悔......
  • 函数式接口的使用
    1. 什么是函数式接口只包含一个抽象方法的接口,称为函数式接口我们可以在任意函数式接口上使用@FunctionInterface注解,这样做可以检查它是否是一个函数式接口,同时javad......
  • ServletRequest 【专题】
     获取所有headerprivatestaticMap<String,String>getHeaders(HttpServletRequestrequest){Map<String,String>headerMap=newHashMap<>();......
  • C++接口工程实践
    https://zhuanlan.zhihu.com/p/213902091还没有学习完简介:程序开发的时候经常会使用到接口。众所周知,C++语言层面并没有接口的概念,但并不意味着C++不能实现接口的功能。......
  • 获取网易云音乐开放接口api的推荐歌单
    网易云音乐开放api接口网址:https://binaryify.github.io/NeteaseCloudMusicApi/#/?id=neteasecloudmusicapi项目地址:https://github.com/Binaryify/NeteaseCloudMusicAp......
  • JDK的dt.jar和Java BeanInfo接口
    在JAVA_HOME/lib下面有两个比较重要的jar文件,tools.jar和dt.jar。 tools.jar在上篇文章中做了简单的介绍。这里来介绍下dt.jar。在Oracle官方网站搜dt.jar,找到JDKand......