文章目录
1、ServletContext
ServletContext 官 方 叫 Servlet 上 下 文 。 服 务 器 会 为 每 一 个 Web 应 用 创 建 一 个ServletContext 对象。这个对象全局唯一,而且 Web 应用中的所有 Servlet 都共享这个对象。所以叫全局应用程序共享对象。
1.1、ServletContext 对象的作用
1.1.1、相对路径转绝对路径
文件下载:
public class DownFileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取ServletContext对象
ServletContext servletContext = this.getServletContext();
//路径转换
String realPath = servletContext.getRealPath("/test.jpg");
System.out.println(realPath);
//读文件
File file = new File(realPath);
System.out.println(file);
FileInputStream fis = new FileInputStream(file);
byte[] buff = new byte[fis.available()];
fis.read(buff);
//在响应中添加附加信息
resp.addHeader("Content-Disposition","attachment;filename="+new String(file.getName().getBytes("gbk"),"iso-8859-1"));
OutputStream os = resp.getOutputStream();
os.write(buff);
os.flush();
os.close();
}
}
1.1.2、获取容器的附加信息
1.1.3、读取配置信息
<context-param>
<param-name>math</param-name>
<param-value>145</param-value>
</context-param>
<context-param>
<param-name>english</param-name>
<param-value>90</param-value>
</context-param>
/**
* ServletContext对象读取web.xml文件中的信息
*/
public class ContextReadInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取ServletContext
ServletContext servletContext = this.getServletContext();
Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
while(initParameterNames.hasMoreElements()){
String name = initParameterNames.nextElement();
out.println("Name:"+name+" Value: "+servletContext.getInitParameter(name));
}
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
1.1.4、全局容器
2、Servletconfig
ServletConfig 对象对应 web.xml 文件中的<servlet>节点。当 Tomcat 初始化一个 Servlet时,会将该 Servlet 的配置信息,封装到一个 ServletConfig 对象中。我们可以通过该对象读取<servlet>节点中的配置信息
servletConfig.getInitParameter("key");
//该方法可以读取 web.xml 文件中<servlet>标签中<init-param>标签中的配置信息。
servletConfig.getInitParameterNames();
//该方法可以读取 web.xml 文件中当前<servlet>标签中所有<init-param>标签中的值。
- 获取web中的配置信息:
<servlet>
<servlet-name>GetConfigInfoServlet</servlet-name>
<servlet-class>com.pan.GetConfigInfoServlet</servlet-class>
<init-param>
<param-name>key1</param-name>
<param-value>pan</param-value>
</init-param>
<init-param>
<param-name>key2</param-name>
<param-value>hai</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>GetConfigInfoServlet</servlet-name>
<url-pattern>/config.do</url-pattern>
</servlet-mapping>
/**
* 通过ServletConfig对象读取配置信息
*/
public class GetConfigInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
//获取ServletConfig对象
ServletConfig servletConfig = this.getServletConfig();
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
PrintWriter out = resp.getWriter();
out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");
out.println("<HTML>");
out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");
out.println("<BODY>");
while(initParameterNames.hasMoreElements()){
String key = initParameterNames.nextElement();
out.println("Key: "+key+" Value: "+servletConfig.getInitParameter(key)+"<br/>");
}
out.println("</BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
输出:
- ServletConfig读<servlet>下的<nit-param>标签,而ServletContext读取的是<web-app>下的<context-param>标签
- 任何Servlet都可以读取ServletContext中的信息,而ServletConfig只能读取相应的Servlet中的信息。