博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Servlet(三):Servlet中ServletConfig对象和ServletContext对象
阅读量:6438 次
发布时间:2019-06-23

本文共 8746 字,大约阅读时间需要 29 分钟。

本文将记录ServletConfig/ServletContext中提供了哪些方法,及方法的用法。

ServletConfig是一个抽象接口,它是由Servlet容器使用,在一个servlet对象初始化时,Servlet容器传递信息给正在初始化的servlet对象。

public abstract interface javax.servlet.ServletConfig {  public abstract java.lang.String getServletName();  public abstract javax.servlet.ServletContext getServletContext();  public abstract java.lang.String getInitParameter(java.lang.String arg0);  public abstract java.util.Enumeration getInitParameterNames();}
  • getServletName()方法:

用来返回当前servlet在web.xml注册的servlet-name;

  • getServletContext()方法:

获取servlet上下文信息。

  • getInitParameter(String arg0)方法:

根据一个指定的参数名称,获取在servlet初始化时传递的参数值,而这样的参数信息往往配置在web.xml。

  • getInitParameters()方法:

返回servlet初始化时,传递进来的所有参数名称集合。

为了能了解到ServletConfig相关的使用,我们需要在之前新建的MyServlet001工程中,修改web.xml,在<servlet>节点中添加<init-param>节点:

1 
2
6 7
8
9
10
helloServlet
11
12
com.dx.hello.HelloServlet
13 14
15
16
username
17
user001
18
19
20
password
21
123456
22
23 24
25
-1
26
27
28
29
helloServlet
30
31
/hello
32
33 34

在配置参数时,需要注意事项:

<load-on-startup>节点必须在<init-param>节点的下边,否则会抛出异常信息,配置不通过。

之后再HelloServlet的init方法中,添加代码:

1 public void init(ServletConfig config) throws ServletException { 2         System.out.println("init"); 3  4         // 根据ServletConfig的getInitParameter()方法,根据特定初始化参数名称,获取对应的初始化参数值。 5         String username = config.getInitParameter("username"); 6         String password = config.getInitParameter("password"); 7         System.out.println("username:" + username); 8         System.out.println("password:" + password); 9 10         // 根据ServletConfig的getInitParameterNames()方法,获取初始化参数信息。11         Enumeration
names = config.getInitParameterNames();12 while (names.hasMoreElements()) {13 String name = names.nextElement();14 String value = config.getInitParameter(name);15 System.out.println(name + ":" + value);16 }17 18 // 获取Servlet名称。19 String servletName = config.getServletName();20 System.out.println(servletName);21 22 ServletContext servletContext = config.getServletContext();23 }

重新启动tomcat,并在浏览器中输入地址:http://localhost:8080/MyServlet001/hello,回车,之后查看tomcat服务器输出信息:

INFO: Server startup in 1262 msHelloServlet constructorinitusername:user001password:123456username:user001password:123456helloServletservice

从上边的输出信息,及代码中,就可以理解,getInitParameter(),getInitParameters(),getServletName()的用法。

ServletContext servletContext=config.getServletContext();

这个ServletContext是怎么解释,有什么用处呢?

我们查看官网对ServletContext的介绍:

public interface 
ServletContext

Defines a set of methods that a servlet uses to communicate with its servlet container, for example, to get the MIME type of a file, dispatch requests, or write to a log file.

There is one context per "web application" per Java Virtual Machine. (A "web application" is a collection of servlets and content installed under a specific subset of the server's URL namespace such as /catalog and possibly installed via a .war file.)

In the case of a web application marked "distributed" in its deployment descriptor, there will be one context instance for each virtual machine. In this situation, the context cannot be used as a location to share global information (because the information won't be truly global). Use an external resource like a database instead.

The ServletContext object is contained within the  object, which the Web server provides the servlet when the servlet is initialized.

ServletContext接口:

1、Servlet引擎为每个web应用程序都创建了一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServletConfig.getServletContext()方法就可以返回ServletContext对象的引用。

2、由于一个web应用程序中的所有Servlet都共享一个ServletContext对象,所以ServletContext对象被称之为application对象(web应用程序对象)。

3、功能:

     获取web应用程序的初始化参数;

     记录日志;

     application域范围的属性;

     访问资源文件;

     获取虚拟路径所映射的本地路径; 

     web应用程序之间的访问;

     ServletContext的其他方法。

  •      获取web应用程序的初始化参数;

首先,需要在web.xml中配置应用程序级别(<context-param>)的参数信息;

1 
2
6 7
8
9
driver
10
com.mysql.jdbc.Driver
11
12
13
jdbcUrl
14
jdbc:mysql://test
15
16 17
18
19
20
helloServlet
21
22
com.dx.hello.HelloServlet
23 24
25
26
username
27
user001
28
29
30
password
31
123456
32
33 34
35
-1
36
37
38
39
helloServlet
40
41
/hello
42
43 44

注意:

  这里的context-param是应用程级别的初始化参数,<servlet>节点下的<init-param>属于servlet局部的初始化参数,他们具有作用域范围不同。

然后,使用:

1     public void init(ServletConfig config) throws ServletException { 2         System.out.println("init"); 3  4         // 根据ServletConfig的getInitParameter()方法,根据特定初始化参数名称,获取对应的初始化参数值。 5         String username = config.getInitParameter("username"); 6         String password = config.getInitParameter("password"); 7         System.out.println("username:" + username); 8         System.out.println("password:" + password); 9 10         // 根据ServletConfig的getInitParameterNames()方法,获取初始化参数信息。11         Enumeration
names = config.getInitParameterNames();12 while (names.hasMoreElements()) {13 String name = names.nextElement();14 String value = config.getInitParameter(name);15 System.out.println(name + ":" + value);16 }17 18 // 获取Servlet名称。19 String servletName = config.getServletName();20 System.out.println(servletName);21 22 // 使用getServletContext(),获取ServletContext对象。23 ServletContext servletContext = config.getServletContext();24 25 // ServletContext获取初始化参数函数getInitParameter(String arg0)26 String driver=servletContext.getInitParameter("driver");27 String jdbc=servletContext.getInitParameter("jdbc");28 System.out.println("driver:"+driver);29 System.out.println("jdbc:"+jdbc);30 31 // ServletContext获取初始化参数集合函数getInitParameterNames()32 Enumeration
names2= servletContext.getInitParameterNames();33 while (names2.hasMoreElements()) {34 String name = names2.nextElement();35 String value = servletContext.getInitParameter(name);36 System.out.println(name + ":" + value);37 }38 }

查看输出信息:

HelloServlet constructorinitusername:user001password:123456username:user001password:123456helloServletdriver:com.mysql.jdbc.DriverjdbcUrl:jdbc:mysql://testdriver:com.mysql.jdbc.DriverjdbcUrl:jdbc:mysql://testservice
  •      访问资源文件(获取当前web应用的某一个文件对应的输入流。);
1     // 获取当前web应用的某一个文件对应的输入流。 2         try { 3             ClassLoader classLoader = this.getClass().getClassLoader(); 4             InputStream stream = classLoader.getResourceAsStream("jdbc.properties"); 5             //stream with method0:java.io.BufferedInputStream@1cd3bd82 6             System.out.println("stream with method0:"+stream); 7         } catch (Exception e) { 8             e.printStackTrace(); 9         }10 11         try {12             InputStream stream = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");13             // stream with method1:java.io.FileInputStream@113eb097 14             System.out.println("stream with method1:"+stream);            15         } catch (Exception e) {16             e.printStackTrace();17         }

 

  •      获取当前web应用的某一个文件,在服务器上的一个绝对路径
1         // 获取当前web应用的某一个文件,在服务器上的一个绝对路径:2         // D:\java\workset\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyServlet001\WEB-INF\web.xml3         String realPath=servletContext.getRealPath("/WEB-INF/web.xml");4         System.out.println(realPath);

 

  •      获取web当前应用的名称;
// 获取web当前应用的名称        String webName=servletContext.getContextPath();        // "/MyServlet001"        System.out.println(webName);

 

转载地址:http://cxzwo.baihongyu.com/

你可能感兴趣的文章
STP生成树算法
查看>>
nginx常用配置
查看>>
英语考试(最小生成树)
查看>>
JS数组操作
查看>>
设置组件局部样式原理-属性选择器
查看>>
慕课-北京理工大学 机器学习 大学生上网时间 聚类,小白学习
查看>>
实用算法实现-第6篇 线段树
查看>>
webclientt和httpwebrequest
查看>>
第一个C#控制台程序
查看>>
python练习---购物车
查看>>
[C++基础]025_虚函数和虚函数表
查看>>
ARC的原理详解
查看>>
php代码审计基础笔记
查看>>
hdu1160 dp
查看>>
java服务器端编程
查看>>
绘制机制
查看>>
Notepad++ JSON关键字自动提示
查看>>
大学物理复习-静电场
查看>>
jsp页面模块的来源
查看>>
关于Redis与关系型数据的一些区别
查看>>