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文件:
<servlet>
<servlet-name>Myservlet</servlet-name>
<servlet-class>com.hjw.Myservlet</servlet-class>
<!-- <load-on-startup>1</load-on-startup> -->
<!-- 为本servlet配置初始化参数 键值对方式-->
<init-param>
<param-name>user</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>psw</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
在servlet类里获取:
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init");
System.out.println("ervletName:"+config.getServletName());
//可以获取多个参数值
Enumeration<String> 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标签里设置
<context-param>
<param-name>zzz</param-name>
<param-value>yyy</param-value>
</context-param>
<servlet>
<servlet-name>MyFirstServlet</servlet-name>
<servlet-class>com.sf.hw.MyFirstServlet</servlet-class>
<!-- 配置优先调用哪个servlet 数字越小优先级越大 负数就相当于默认跟没配一样 -->
<!-- <load-on-startup>1</load-on-startup> -->
<!-- 这里初始化的参数仅仅属于这个servlet,不属于其他servlet -->
<init-param>
<param-name>user</param-name>
<param-value>MyFirstServlet_admin</param-value>
</init-param>
<init-param>
<param-name>MyFirstServlet_psw</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>MySecondServlet</servlet-name>
<servlet-class>com.sf.hw.MySecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<url-pattern>/MyFirstServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MySecondServlet</servlet-name>
<url-pattern>/MySecondServlet</url-pattern>
</servlet-mapping>
</web-app>
获取公共参数:
@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);
}