ServletConfig对象
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。
web容器在创建servlet实例对象时,会自动将该servlet对象的初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将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() -- 获取当前Servlet在web.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应用******
1、WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
2、ServletContext对象通常也被称之为context域对象。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。
3、 生命周期:当服务器启动web应用加载后创建出ServletContext对象后,域产生。当web应用被移除出容器或服务器关闭,随着web应用的销毁域销毁。
4、void 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应用的路径。