引言:在J2EE项目中,struts的应用无处不在,而在实际的项目中ServletConfig类和ServletContext类的如果恰当的应用的话,会 提高项目中的效率,同时,会减少一部分代码的编写工作。
ServletConfig类:
一、Servlet容器在初始化servlet的时候会初始化一个servletConfig对象,这个对象在任何可访问的客户端都是有效的,但是,需注意的是,该对象只能在本servlet中应用,不能在其他servlet中访问。
二、 ServletConfig类的父类是HttpServlet。ServletConfig对象在servletConfig初始化的时候被创建,因此可以在ServletConfig对象中获取Servlet的配置信息,这些信息可以在web.xml中进行配置(这就是避免“硬编码”).例如servlet的一些初始化参数的信息。在这里稍微将servlet在web.xml怎么配置说下......如下:
1 <servlet> 2 <!--名称--> 3 <servlet-name> 4 myTestservlet 5 </servlet-name> 6 <!--对应的类--> 7 <servlet-class> 8 com.dxb.init.SystemInit 9 </servlet-class> 10 <!--配置的初始化参数--> 11 <init-param> 12 <param-name> 13 systemVersion 14 </param-name> 15 <param-value> 16 dxb 17 </param-value> 18 </init-param> 19 <load-on-startup> 20 1 21 </load-on-startup> 22 </servlet>
三、在我做过的项目中,servletConfig应用做多就是在tomcat启动中,获取项目中配置的参数以及为项目的启动就需要加载的一些数据进行处理。就如上面的代码中的load-on-start,在xml中配置其实例化顺序(load-on-start的数字越小,越优先被实例化,实例化的对象就是servlet指向的类....)。
简单介绍servlet指向类中的使用方法:
1 public class SystemInit extends HttpServlet 2 { 3 private static final long serialVersionUID = 1L; 4 5 public void init(ServletConfig config) throws ServletException 6 { 7 super.init(); 8 //获取初始化参数 9 Object version = config.getInitParameter("systemVersion"); 10 System.out.println("***********"+version+"************"); 11 ServletContext servletContext=config.getServletContext(); 12 //为所有可访问的servlet设置参数,在任何servlet中访问该参数 13 servletContext.setAttribute("version", version); 14 } 15 }
四、servletConfig类的常用方法:
1.getInitParameter(String name):根据给定的初始化参数,返回匹配的初始化参数值。
2.getInitParameterNmes():返回一个Enumeration对象,里面包含了所有的初始化参数。
3.getServletContext():返回一个servletContext()对象。
ServletContext类:
真正的全局变量!在web项目中,ServletContext对象被所有的servlet共享,所以,在项目中servlet之间的通讯可以使用serrvletContext对象来完成。
在我参与过的项目中,在初始化项目的时候,一般会加载数据字典,将数据字典里的值(一般在项目中比较通用)放在servletContext对象中,这样,在不同的servlet中就可以访问。例如,上面代码中将项目的版本号放在servletContext对象中,这样就可以实现servlvet的通信。
当然,servletContext对象的用法远不止这些。
一、先介绍一下在J2EE项目中获取servletContext对象的几种方法:
1.使用servletConfig对象获取:
servletConfig对象可以维护servletContext对象。ServletContext context = config.getServletContext();就可以获得到。
2.在继承了HttpServlet类的类中:
ServletContext context=this.getservletContext;
3.使用ServletActionContext获取:
ServletContext context= ServletActionContext.getServletContext();
4.继承了ServletContextAware接口的类(这个我真心没用过....)。
二、ServletContext的用途
1.实现多个servlet数据的共享:使用servletContext.setAttibute("version","dxb");可以在其他servlet中获取到servletContext对象后,使用servletContext.getAttibute("version");获取你设置的数据。
2.读取配置文件(当然,这不是唯一的读取配置文件的方法,还可以使用PropertityConfigration类去操作)
我比较常用下面这种方式:
InputStream is = context.getResourceAsStream("WEB-INF/classes/db.properties "); /*解析properties的文件*/ Properties prop = new Properties(); //从输入流中读取属性列表(键和元素对)。 prop.load(is); Set<String> set = prop.stringPropertyNames();
这就是我对这两个对象的一些理解,希望大家提出改善的意见......当然可以喷......