听说你JavaWeb学的不好?(二十八)

68 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

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

        void setAttribute(String name, Object obj); // 向域当中绑定数据。
        Object getAttribute(String name); // 从域当中根据name获取数据。
        void removeAttribute(String name); // 将域当中绑定的数据移除
         
        // 以上的操作类似于Map集合的操作。
        Map<String, Object> map;
        map.put("name", obj); // 向map集合中放key和value
        Object obj = map.get("name"); // 通过map集合的key获取value
        map.remove("name"); // 通过Map集合的key删除key和value这个键值对。
        
  • “请求域”对象

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

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

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

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

          • 尽量使用小的域对象,因为小的域对象占用的资源较少。
        • 如何让两个Servlet放到同一次请求当中呢?使得请求不同的的Servlet公用同一块请求域呢?后面说

        • 转发(一次请求)

          • // 第一步:获取请求转发器对象(下面的 /b 为url-pattern),如果下面是转发的不是Servlet资源,则从web的根开始写路径就行
            RequestDispatcher dispatcher = request.getRequestDispatcher("/b");
            ​
            // 第二步:调用转发器的forward方法完成跳转/转发
            dispatcher.forward(request,response);
            ​
            ​
            // 第一步和第二步代码可以联合在一起。
            request.getRequestDispatcher("/b").forward(request,response);
            
        • 两个Servlet怎么共享数据?

          • 将数据放到ServletContext应用域当中,当然是可以的,但是应用域范围太大,占用资源太多。不建议使用。
          • 可以将数据放到request域当中,然后AServlet转发到BServlet,保证AServlet和BServlet在同一次请求当中,这样就可以做到两个Servlet,或者多个Servlet共享同一份数据。
        • 转发的下一个资源必须是一个Servlet吗?

          • 不一定,只要是Tomcat服务器当中的合法资源,都是可以转发的。例如:html....
          • 注意:转发的时候,路径的写法要注意,转发的路径以“/”开始,不加项目名。