ServletConfig:
所属的位置:servlet容器(tomcat)启动的时候会去实例化servlet这个类调用这个方法,public void init(ServletConfig config);
ServletConfig涵盖哪些方法:这个ServletConfig 参数实际上是个接口,里面有四种要实现的方法(见下),这个接口不需要sdk实现,也不需要servlet实现,它是通过toncat实现的。这个ServletConfig参数的部分参数值在web.xml可以找到
1.getServletName() 获取到当前这个servlet 在web.xml配置的名字
2.getServletContext() 获取当前web应用的ServletContext对象
3.getInitParameter() 获取web.xml的配置的初始化参数值
4.getInitParameterNames() 获取web.xml的配置的所有初始化参数值的键的枚举
ServletConfig的作用:可以获取web.xml配置文件的本servlet 的初始化参数值
web.xml文件:
Myservlet
com.hjw.Myservlet
user
admin
psw
123456
在servlet类里获取:
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
System.out.println("ervletName:"+config.getServletName());
//可以获取多个参数值
Enumeration names = config.getInitParameterNames();
while(names.hasMoreElements()){
String key = names.nextElement();
String value = config.getInitParameter(key);
System.out.println("key:" + key + "\t" + "value:" + value);
}
// this.servletContext = config.getServletContext();
}
这里初始化的参数仅仅属于这个servlet,不属于其他servlet,如果要设置多个servlet共有的参数,见下:
context-param标签里设置
zzz
yyy
MyFirstServlet
com.sf.hw.MyFirstServlet
user
MyFirstServlet_admin
MyFirstServlet_psw
123456
MySecondServlet
com.sf.hw.MySecondServlet
MyFirstServlet
/MyFirstServlet
MySecondServlet
/MySecondServlet
获取公共参数:
@Override
public void init(ServletConfig config) throws ServletException {
this.servletContext = config.getServletContext();
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// 获取公共的参数值
HttpServletResponse httpRes = (HttpServletResponse) res;
res.getWriter().println(servletContext.getInitParameter("zzz"));
}
为什么要把初始化参数写到web.xml里不写到servlet里,原因是发布到tomcat里的项目会编译成class文件,无法获取到值。再者,不能把用户的账号密码写死在java文件里,最好写在配置文件里,即使打包发布了这个配置文件还是可以修改的。
servletContext:(Context域对象,整个作用域是web应用)
servletContext也是接口,代表当前web应用的。当web容器启动的时候,会对web应用创建对应的servletContext对象。可以通过servletConfig.getservletConfig() 获取servletContext对象。
servletContext作用:一个web应用中的所有servlet对象共享一个servletContext,所以使用它可以进行servlet之间的通信。另外整个web应用的类、servlet都可以利用它共享数据。
servletContext常用的方法:
1.void setAttribute(string,object);
2.Object getAttribute(String name);
3.void removeAttribute(String name);
2个servlet如何实现通信:假如把第一个servlet的内容传递给第二个servlet
1.定义两个servlet类,同时在web.xml 进行servlet的配置,另外在第一个servlet设置传递的内容,使用servletContext的setAttribute()
@Override
public void init(ServletConfig config) throws ServletException {
//获取上下文
this.servletContext = config.getServletContext();
//获取该servlet指定的参数
String user = config.getInitParameter("user");
System.out.println(user);
//利用this.servletContext实现servlet之间的通信
this.servletContext = config.getServletContext();
this.servletContext.setAttribute("aaaa", "1111");
}
2.在第二个servlet 的init()方法里设置获取servletContext,然后再次通过利用这个上下文用getAttribute()获取传递的内容
private ServletContext servletContext;//全局变量
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
this.servletContext = config.getServletContext();
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
// 获取第一个servlet设置的参数
String str = (String) this.servletContext.getAttribute("aaaa");
HttpServletResponse hsr = (HttpServletResponse) res;
hsr.getWriter().write(str);
}