java四大域总结

Posted ꧁༺空༒白༻꧂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java四大域总结相关的知识,希望对你有一定的参考价值。

Java四大作用域对象

1、为什么他们是域对象

  • 同样都内置了map集合,都有setAttribute和getAttribute方法

2、四大作用域

  • page(jsp页面)域–>PageContext
  • request(请求)域–>request HttpServletContext
  • session(会话)域–>session HttpSession
  • application域(web应用)–>application ServletContext

3、作用范围

从小到大依次排序为

  • Page域:四大域中最小的一个,作用在当前的jsp页面
  • request域:在整一个请求链,请求转发也存在
  • session域:一次会话
  • application域:整一个的web应用

4、生命周期

  • Page域:Jsp请求时开始,响应结束时销毁

  • request域:在service方法调用前由服务器创建,传入service方法,整个请求结束

  • session域:

    简单点来说就是:创建、活动、销毁

    第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。

    当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。如果调用session提供的invalidate() ,可以立即销毁session。

    Session的销毁只有三种方式:
    1.调用了session.invalidate()方法
    2.session过期(超时)
    3.服务器重新启动

  • application域:web应用被加载到容器时创建代表整个web应用的ServletContext对象,服务器关闭或者Web应用被移除是,ServletContext跟着被销毁。

5、作用

  • Page域
    • 可以实现在前端写入后端Java代码
    • 获取八大隐式对象
    • 获取其中所有域的数据
    • 在跳转到其他资源的过程中,自身携带有forword和include方法,简化了重定向和转发的操作
  • request域
    • 共享数据
    • 请求转发
    • 实现Servlet和servlet之间的数据传输功能
  • session域
    • 可以把信息或数据存在session中
    • 多个页面都可以访问到
  • application域:整一个的web应用
    • 在不同的servlet之间转发
    • 读取资源文件

6、代码实现举例

  • Page域

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <% int x=10;%>//定义一个x变量
    x=<%=x%>//输出到页面
    </body>
    </html>
    

    启动tomcat页面输出

    x=10
    

    但是如果说,在除此之外的页面访问,都会报一个500错误,说明page页面的变量不能在该页面以外访问

  • request域

    • Servlet1(存数据)

      public class Servlet1 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              ServletContext context = this.getServletContext();
      
              String name="kong";
              context.setAttribute("name",name);
          }
        @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      
          }
      }
      
    • Servlet2(取数据)

      public class Servlet2 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              ServletContext context = this.getServletContext();
              String name = (String) context.getAttribute("name");
      
              resp.getWriter().print(name);
          }
      
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      
          }
      }
      
    • 转发请求数据

      public class Servlet3 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              ServletContext context = this.getServletContext();
              //RequestDispatcher requestDispatcher = context.getRequestDispatcher("/g");//转发请求路径
              //requestDispatcher.forward(req,resp);//调用forward实现转发
              context.getRequestDispatcher("/ser").forward(req,resp);
          }
      
    • 读取资源文件

      public class Servlet4 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              InputStream is=this.getServletContext().getResourceAsStream("/com/kongkong/servlet/aa.properties");
              Properties prop = new Properties();
              prop.load(is);
              String user = prop.getProperty("userName");
              String pwd = prop.getProperty("password");
              resp.getWriter().print(user+":"+pwd);
          }
      
  • session域

    public class session1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            //乱码解决
    //        req.setCharacterEncoding("gbk");
            resp.setCharacterEncoding("gbk");
            //得到session
            HttpSession session = req.getSession();
            //给Session存东西
            session.setAttribute("name","kongkong");
            //获取sessionId
            String sessionId = session.getId();
    
            if(session.isNew()){
                resp.getWriter().write("这是一个新的SessionId"+sessionId);
            }else {
                resp.getWriter().write("这是一个已经存在的sessionId"+sessionId);
            }
    
            session1 session1 = new session1();
    
        }
    
  • application域

    • 数据量较小
    • 所有用户共享
    • 一般不会轻易的修改

    监听器

    public class Listen implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            ServletContext servletContext = servletContextEvent.getServletContext();
            //调用service获取所有字典
            
            //读取资源文件
            ResourceBundle bundle = ResourceBundle.getBundle("com.xxx.xxx");
            
        }
    

    业务层代码

    //获取所有的字典类型
    //遍历字典类型
    

以上是关于java四大域总结的主要内容,如果未能解决你的问题,请参考以下文章

java四大域总结

JAVA四大域对象总结

JAVA四大域对象总结

Java 四大域对象总结

JAVA 四大域对象总结

java-四大域对象总结