研究: javax.servlet.ServletContext接口
1、javax.servlet.ServletContext接口,Servlet规范
2、Tomcat服务器对ServletContext接口的实现类的完整类名:org.apache.catalina.core.ApplicationContextFacade
javaweb程序员还是只需要面向ServletContext接口调用方法接口。
3、ServletContext到底是什么?什么时候被创建?什么时候被销毁?创建几个?
--ServletContext被翻译为:Servlet上下文【Context一般被翻译为上下文】
--一个webapp只有一个web.xml文件,web.xml文件服务器启动阶段被解析
--一个webapp只有一个ServletContext对象,ServletContext在服务器启动阶段被实例化
--ServletContext在服务器关闭的时候会被销毁
--ServletContext对应的是web.xml文件,是web.xml文件的代表
--ServletContext是所有Servlelt对象四周环境的代表【在同一个webapp中,所有Servlet对象共享同一个"四周环境对象",该对象就是ServletContext】
--所有的用户若想共享同一个数据,可以将这个数据放到ServletContext对象中。
--一般放到ServletContext对象中的数据是不建议涉及到修改操作,因为ServletContext是多线程共享的一个对象,修改的时候会存在线程安全问题。
4、ServletContext接口中有哪些常用的方法?
--void setAttribute(String name, Object obje) // 向ServletContext范围中添加数据
--Object getAttribute(String name) // 从ServletContext范围中获取数据
--void removeAttribute(String name) // 移除ServletContext范围中的数据
--String getInitParameter(String name)
--Enumeration getInitParamterNames()
--String getRealPath(String path)
5、ServletContext可以完成跨用户传递数据
package com.xxx.javaweb.servlet;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import com.bjpowernode.javaweb.entity.User;
public class ServletContextA implements Servlet {
private ServletConfig config;
@Override
public void destroy() {
}
@Override
public void init(ServletConfig config) throws ServletException {
this.config=config;
}
@Override
public void service(ServletRequest requsst, ServletResponse response)
throws ServletException, IOException {
//获取ServletConfig
ServletConfig config=getServletConfig();
//获取ServletContext
ServletContext application=config.getServletContext();
// Enumeration<String> names=application.getInitParameterNames();
/* while (names.hasMoreElements()) {
String name=names.nextElement();
String value=application.getInitParameter(name);
System.out.println("name:"+name+"value"+value);
}
//获取文件的绝对路径
String relpath=application.getRealPath("/index.html");
System.out.println(relpath);
*/
//创建user对象
User user=new User();
user.setUsercode("123456");
user.setUsername("javac");
//向ServletContext的环境范围中存储user数据
application.setAttribute("userObject", user);
//将上面建立的userObject删除掉
application.removeAttribute("userObject");
}
@Override
public ServletConfig getServletConfig() {
return config;
}
@Override
public String getServletInfo() {
return null;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<context-param>
<param-name>user</param-name>
<param-value>lihao</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.ServletContextA</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>context</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>context1</servlet-name>
<servlet-class>com.bjpowernode.javaweb.servlet.ServletContextB</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>context1</servlet-name>
<url-pattern>/b</url-pattern>
</servlet-mapping>
</web-app>
我对ServletContext的理解:
servletContext其实就是我么用到的web.xml我们通过ServletContext可以获取到web.xml中配置的内容