ServletConfig对象mysql
在Servlet的配置文件中,能够使用一个或者多个<init-param>标签为servlet配置一些初始化参数。程序员
当servlet配置了初始化参数后,web容器在建立servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中国,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员经过ServletConfig对象就能够获得当前servlet的初始化参数信息。web
配置文件web.xml中某个<servlet></servlet>中间有这么一段:sql
<init-param>数据库
<param-name>data</param-name>服务器
<parm-value>xxxxx</param-value>session
<init-param>app
<!--<load-on-startup>2</load-on-startup>-->jsp
那么该servlet实例化的时候会把这些内容一块儿加载。ui
servlet中的代码(复写了init):
……entends HttpServlet{
private ServletConfig config;
……doGet……
String value = config.getInitParameter("data");//获得xxxxx
……
……doPost……
public void init(ServletConfig config)throws ServletExceptio{
//super.init(config);
this.config = config;
}
其实父类HttpServlet的父类GenericSrvlet中已经定义了这么个私有的东西,并在其init方法中获取了。还提供了一个获取方法:
public ServletConfig getServletConfig(){
return config;
}
咱们能够在本身的类中直接用这个方法得到。
获得全部:
Enumeration e = this.getServletConfig().getInitParameterNames();
whie(e.hasMoreElements()){
String name = (String)e.nexElement();
String value = this.getServletConfig().getInitParameter(name);
}
用到的场合。
好比:
解码方式能够配置一个
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
ServletContext
web容器在启动时,它会为每一个web应用程序都建立一个对应的ServletContext对象,它表明当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,能够经过ServletConfig.getServletContext方法得到ServletContext对象。
获取方式:
方式一,
ServletContext context = this.getServletConfig().getServletContext();
方式二,
context = this.getServletContext();
ServletContext的应用:
因为一个web应用中全部的Servlet共享同一个ServletContext对象,因此多个Servlet经过ServletContext对象实现数据共享。
ServletContext对象一般也称之为context域对象。
域:范围。 context域对象:做用范围是整个应用程序的对象。除此以外还有request session page域对象。
一个Servlet1中有以下代码:
String data ="aaa";
this.getServletContext().setAttribute("data",data);
另外一个Servlet2中有以下代码:
String value = (String)this.getServletContext().getAttribute("data");
当Servlet1执行过,Servlet2就能够获取aaa。
好比聊天室就能够用这个servltContext。
web.xml中的<web-app></web-app>中间能够有这么一段:
<context-param>
<param-name>data</param-name>
<param-value>xxxx</param-value>
<param-name>data2</param-name>
<param-value>xxxx2</param-value>
</context-param>
加载该web应用就会自动把该参数加载。
在程序中获取:
this.getServletContext().getInitParameterNames();和ServletConfig相似。
在配置文件中配置改起来很方便。若是在程序中改要改代码,从新编译比较麻烦。
ServletContext还实现了Servlet的转发:
String data = "abc";
data = "<meta http-equiv='fresh' content='3;url=/myweb/index.jsp'>3秒后将跳转";
//this.getServletContext().setAttribute("data",data);因为servlet是单例子的,因此这样有可能最后加进去的data是bcd而非abc,因此这种设置全局的方式不要采用
//不过能够在jsp页面经过获取全局某个属性的方式显示这个data:<% String str = (String)Applcation.getAttribute("data");out.write(str); %>
RequestDispatcher rd = this.getServletContext().getRequestDispatcher("1.jsp");
rd.forward(request,response);//页面将转至1.jsp页面,与重定向不一样,这样仅请求了一次服务器,而重定向是两次。
Servletcontext读取资源文件.properties文件:
关于properties文件:
properties和xml都是资源文件,不一样之处是xml通常用来存有关系的数据,而properties文件则存放相似用户名、密码、数据库链接地址之类没有关系的数据。
properties文件内容样例:
url=jdbc:mysql://localhost:3306/test
username=admin
password=admin
如上面所写要带个等号。
下面写一下
Servletcontext读取资源文件代码示例:
Inputstream in = this.getServletContext().getResourceAdStrem("/db.properties");
关于这个相对路径的书写,用context读取,相对路径中的第一个"/"表示web应用目录。例如,你在开发的时候把properties放在src下,那么部署到服务器后会出如今“根目录/WEB-INF/classes/”下,这个时候应该写“/WEB-INF/classes/xx.properties”。若是直接用读取流,那么相对路径就变成了启动Tomcat服务器的目录,即Tomcat下的bin目录。
Properties props = new Properties();//map
props.load(in);
String url = props.getProperty("url");//获取键值
更多内容参见API