重新学javaweb---ServletContext

  WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。这个对象创建出来之后就一直在内存中驻留,代表当前的web应用。它可以通过我们上一篇介绍的ServletConfig对象获取,通过ServletConfig.getServletContext方法获得ServletContext对象。因为GenericServlet重写了 getServletContext 所以也可以 直接this.getServletContext()获得。(也可以通过request来获取)
  1.由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象(这是其中一个域对象,后面我们还要学习其他的几个session,page,request )。
  作用范围:整个web应用范围内共享数据
   生命周期:当服务器启动web应用加载后创建出ServletContext对象后,域产生。当web应用被移除出容器或服务器关闭,随着web应用的销毁域销毁。

 void setAttribute(String,Object);
Object getAttribute(String);
void removeAttribute(String);

2.前一篇讲的config只能获取某一个特定的servlet的配置信息,当我们需要获取在每个servlet都能生效的配置信息(在web.xml servlet标签外面 context-param内的配置信息)时就要用到,servletContext了。函数和前一篇中的用法一样。
3.实现Servlet的转发

    重定向 : 302+Location
    请求转发 : 服务器内不进行资源流转

    ***请求转发是一次请求一次响应实现资源流转.请求重定向两次请求两次响应.**
//demo5中  转发到demo6
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/servlet/Demo6Servlet");
        dispatcher.forward(request, response);

4.加载资源文件
如果直接写文件名,应用会去tomcat的bin目录去找这个文件。其实是去当前程序启动的目录去找。直接写tomcat下的全目录可以,但这个全目录之前的不要手写,要通过ServletContext去获取tomcat的路径。
为了解决这样的问题ServletContext提供了getRealPath方法,在这个方法中传入一个路径,这个方法的底层会在传入的路径前拼接当前web应用的硬盘路径从而得到当前资源的硬盘路径,这种方式即使换了发布环境,方法的底层也能得到正确的web应用的路径从而永远都是正确的资源的路径

//文件放在webroot根目录下
     this.getServletContext().getRealPath("config.properties")

如果在非Servlet环境(某个servlet调用自己写的普通java类)下要读取资源文件时可以采用类加载器加载文件的方式读取资源

//config.properties(放在src根目录时)这个文件发布之后 启动目录在 Day03/WEB-INF/classess/  
    Service.class.getClassLoader().getResource("config.properties").getPath()
//config.properties(webroot根目录时)这个文件发布之后 启动目录在 Day03/WEB-INF/   
//但classLoader是从    Day03/WEB-INF/classess/  找 所以得../ 向上找
Service.class.getClassLoader().getResource("../config.properties").getPath()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值