ServletConfig对象

Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。

web容器在创建servlet实例对象时,会自动将该servlet对象的初始化参数封装到ServletConfig对象中,并在调用servletinit方法时,将ServletConfig对象作为参数传给init方法。GenericServlet已经用类变量的方式保存ServletConfig对象,自定义的Servlet使用this.getServletConfig()方法就可以获取ServletConfig对象。

作用:经常修改的数据,不能写死在程序里,利用配置文件的初始化参数保存,可以用ServletConfig对象获取参数的值,写到程序里。比如编码。

<init-param>
    <param-name>encode </param-name>
    <param-value> utf-8</param-value>
</init-param>

String getServletName()  -- 获取当前Servletweb.xml中配置的名字

String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值

Enumeration getInitParameterNames() -- 当前Servlet所有初始化参数的名字组成的枚举

ServletContext getServletContext()  -- 获取代表当前web应用的ServletContext对象

ServletConfig config=this.getServletConfig();
String value=config.getInitParameter(“name1”);
System.out.println(value);
Enumeration en= config.getInitParameterNames();
while(en.hasMoreElements()){
   String name=(String) en.nextElement();
   String value=config.getInitParameter(name);
   System.out.println(name+”:”+value);
}



ServletContext -- 代表当前web应用******

1WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

 

2、ServletContext对象通常也被称之为context域对象。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。

 

3、 生命周期:当服务器启动web应用加载后创建出ServletContext对象后,域产生。当web应用被移除出容器或服务器关闭,随着web应用的销毁域销毁。

4void setAttribute(String,Object);

Object getAttribute(String);

void removeAttribute(String);

 

5、用来获取web应用的初始化参数

<web-app>
<context-param>
<param-name>password</param-name>
<param-value>123</param-value>
</context-param>
</web-app>
ServletContext context=this.getServletContext();
Enumeration en = context.getInitParameterNames();
while(en.hasMoreElements()){
   String name=(String)en.nextElement();
   String value=context.getInitParameter(name);
   System.out.println(name+”:”+value); }


实现Servlet的转发getRequestDispatcher(  ).forward(request,reponse)

重定向 : 302+Location 浏览器会再发一次请求,两次请求两次响应,地址栏变

请求转发 : 服务器内部进行资源流转,一次请求一次响应实现资源流转,地址栏不变。

RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher (/servlet/Demo6Servlet);  //获取转发器

dispatcher.forward(request,response);  

 

加载资源文件

Servlet中读取资源文件时:

1、如果写相对路径和绝对路径,由于路径将会相对于程序启动的目录--web环境下,就是tomcat启动的目录即tomcat--所以找不到资源

2、如果写硬盘路径,可以找到资源,但是只要一换发布环境,这个硬盘路径很可能是错误的,同样不行.

3、为了解决这样的问题ServletContext提供了getRealPath方法,在这个方法中传入一个路径,这个方法的底层会在传入的路径拼接当前web应用的硬盘路径从而得到当前资源的硬盘路径,这种方式即使换了发布环境,方法的底层也能得到正确的web应用的路径。