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四大域总结的主要内容,如果未能解决你的问题,请参考以下文章