首页 > 其他分享 >ServletContext

ServletContext

时间:2022-09-22 16:34:24浏览次数:49  
标签:web 读取 配置文件 ServletContext Servlet properties 加载

 

ServletContext类中有这么四个方法:

  1. getRealPath(String path)

  2. getResource(String path)

  3. getResourceAsStream(String path)

  4. getResourcePaths(String path)

这四个方法都使用web工程下某个web资源路径的字符串表现形式作为参数,而每个方法返回不同的类型,我们通过这四个方法之一可以获取某个资源,并对其进行读取和修改操作。

假设我们的【servlet】web工程中有一个数据库的配置文件:db.properties,在这个数据库中已经有了一些参数,而我们在web工程中希望读取这个配置文件中的有关信息:

 

 

 

 先来看看ServletContext中的getResourceAsStream()方法,这个方法返回InputStream对象。

由于我们的配置文件为properties文件,所以可以用Properties对象来装载这个输入流,代码如下:

 最后在浏览器中访问这个Servlet,那么在浏览器就能看到db.properties中我们配置的信息:

 

 接下来看看ServletContext中的getRealPath()方法,这个方法返回String对象。

由于我们的配置文件为properties文件,所以可以用Properties对象来装载这个输入流,代码如下:

 

 同样也能访问Servlet,浏览器也显示配置内容

 

使用getRealPath()方法的好处在于这个方法还可以获取文件名,而getResourceAsStream()方法就只能获取文件流了。

例如获取文件名:

 

 

 

 

 

 接着来看看ServletContext中的getResource()方法,这个方法返回URL对象。

而URL对象具有打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream的openStream()方法。

由于我们的配置文件为properties文件,所以可以用Properties对象来装载这个输入流,代码如下:

 

以上说完了几种通过ServletContext对象来读取web应用下的某个资源文件,只要通过读取的方法,并将资源相对于web工程的路径作为参数传入其中便可。

我们上述的例子都是直接在web工程中,或者web工程的某个目录下,而如果我们把某个web资源放置在idea中的【src】目录中,那么该如何读取呢?

(此处父框架是最干净的maven框架,后面再加的web框架支持)

我们在【src】下的resources资源包中建立(注意,在resources之外建立的.properties,服务器不会放置在classes文件夹下)

 

 

例一、这个web应用在发布时,会将【src】目录下的.java文件编译成为.class字节码文件,由服务器自动将这些字节码文件放置在该web应用中的【WEB-INF】下的【classes】目录里,

如果没有【classes】目录,服务器会自动帮我们创建,因此,只要是放置在【src】目录中的资源,最后也会被服务器自动放置在【classes】目录中,这样我们可以继续通过ServletContext对象来获取:

 

 

 

由于我们的配置文件为properties文件,所以可以用Properties对象来装载这个输入流,代码如下:

 

 

 

访问这个servlet,在浏览器中依旧显示aa.properties中的信息;

 

 

例二:在【servlet-demo-01】的servlet包中创建一个Context的Java文件,并在【resources】创建一个aa的配置文件aa.properties,而这个配置文件内容如下图所示:

 

 

 

 

在Context类中,我们需要通过类加载器来获取输入流来读取这个文件:

 

 

另外创建一个Servlet作为可以供浏览器访问的对象,在该Servlet中创建Context的示例来获取配置文件中的内容

这样就达到了从非Servlet对象读取web资源内容并向Servlet对象传递数据:

 

 

 从浏览器中访问该Servlet,可以看到通过类加载器读取的配置文件中的内容:

 

注意,这种方法只能是web资源放置在【src】目录中才可以使用,如果要读取的web资源是放置在web工程的目录下,使用类加载器也还是无法读取

因为类加载器只能读取类目录下的文件,这时候非Servlet类就无法读取资源文件,只能使用ServletContext来读取了。

 

 

 “类加载器只能加载【classes】目录下的所有文件一次,这样在服务器运行web工程的过程中,如果我们修改【classes】目录下的student.properties配置文件,

则由于类加载器不再加载,因此使用类加载器的方式不能读取修改后的内容”      修改后最好再跑一次服务器。

使用类加载器加载【classes】目录中的资源,得到的路径取决是哪个虚拟机(或服务器)调用,

例如上面的代码test()方法,如果是在非Servlet的类的方法中被调用,那么就是使用JVM虚拟机,那么得到的资源路径并不是Tomcat的应用【webapps】目录的路径。

因此如果是要为Servlet中提供资源,那么非Servlet类中获取资源的方法,请一定要使用Servlet来调用,

这样才能保证得到的资源路径是在Tomcat服务器下的自己的web应用所在目录中的正确位置。

 

标签:web,读取,配置文件,ServletContext,Servlet,properties,加载
From: https://www.cnblogs.com/mo-de/p/16717523.html

相关文章

  • ServletContextListener使用
    ServletContextListener使用步骤:1,定义一个类,实现servletcontextListener接口2。复写方法3。配置1.web.xml<klistener><listener......
  • ServletContext对象概述、ServletContext获取
    ServletContext对象概述1,概念:代表整web应用,可以和程序容器(服务器)来通信2,功能:获取MIME类型域对象:共享数据获取文件的真实(服务器)路径......