ServletConfig对象

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

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

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

    
encode 
    
 utf-8

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应用的初始化参数

password
123
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应用的路径。