ServletContext对象--三大域对象
Servlet三大域对象的应用 request、session、application(ServletContext)
ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。
request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。
1.获取servletcontext对象:
ServletContext sc = null; sc = request.getSession().getServletContext();
//或者使用
//ServletContext sc = this.getServletContext(); System.out.println("sc=" + sc);
2.方法:
域对象,获取全局对象中存储的数据:
所有用户共用一个
servletDemo1
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("处理前的名称:" + filename); ServletContext sc = this.getServletContext(); sc.setAttribute("name", "太谷饼"); }
然后再servletDemo2中获取该servletcontext对象
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext sc = request.getSession().getServletContext(); String a = (String)sc.getAttribute("name"); response.getWriter().write(a); }
在浏览器中访问该地址:http://localhost/app/servlet/servletDemo2
获取资源文件
1.采用ServletContext对象获取
特征:必须有web环境,任意文件,任意路径。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //拿到全局对象 ServletContext sc = this.getServletContext(); //获取p1.properties文件的路径 String path = sc.getRealPath("/WEB-INF/classes/p1.properties"); System.out.println("path=" + path); //创建一个Properties对象 Properties pro = new Properties(); pro.load(new FileReader(path)); System.out.println(pro.get("k")); }
2.采用resourceBundle获取
只能拿取properties文件,非web环境。
//采用resourceBundle拿取资源文件,获取p1资源文件的内容,专门用来获取.properties文件 ResourceBundle rb = ResourceBundle.getBundle("p1"); System.out.println(rb.getString("k"));
3.采用类加载器获取:
任意文件,任意路径。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //通过类加载器 //1.通过类名 ServletContext.class.getClassLoader() //2.通过对象 this.getClass().getClassLoader() //3.Class.forName() 获取 Class.forName("ServletContext").getClassLoader InputStream input = this.getClass().getClassLoader().getResourceAsStream("p1.properties"); //创建Properties对象 Properties pro = new Properties(); try { pro.load(input); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //拿取文件数据 System.out.println("class:" + pro.getProperty("k")); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架