Servlet的ServletContext和ServletConfig
1.ServletContext的使用
参考网址: https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247484755&idx=4&sn=01aa36130bc5b2d5ff5b9f67375d9ac5&chksm=ebd74452dca0cd447ed0845e12746e4c8828ec858ce24db0cd890c7e2fc95f8569f729e1fb36&scene=21#wechat_redirect
1.1ServletContext的作用
- 什么是ServletContext对象?
当Tomcat启动的时候,就会创建一个ServletContext对象。它代表着当前web站点
- ServletContext有什么用?
- ServletContext既然代表着当前web站点,那么所有Servlet都共享着一个ServletContext对象,所以Servlet之间可以通过ServletContext实现通讯。
- ServletConfig获取的是配置的是单个Servlet的参数信息,ServletContext可以获取的是配置整个web站点的参数信息
- 利用ServletContext读取web站点的资源文件
- 实现Servlet的转发【用ServletContext转发不多,主要用request转发】
- ServletContext对象可以被称之为域对象
1.2获取ServletContext的方法
1.在javax.servlet.Filter中直接获取
ServletContext context = filterConfig.getServletContext();
2.在HttpServlet中直接获取
this.getServletContext()
3.在其他方法中,通过ServeltRequest、HttpServletRequest获得
request.getServletContext();
request.getSession().getServletContext();
1.3 ServletContext在springmvc的使用
setAttribute()方法:在ServletContext设置值
/**
* 测试ServletContext对象的设置值
*/
@RequestMapping("/servletcontext")
@ResponseBody
public Msg testServlettext (HttpServletRequest request , HttpServletResponse response) {
ServletContext servletContext = request.getSession().getServletContext();
servletContext.setAttribute("name", "我是name的值");
return Msg.success().add("name的值", "我是name的值");
}
getAttribute()方法:获取ServletContext的值
/**
* 测试ServletContext对象的设置值
*/
@RequestMapping("/getservletcontext")
@ResponseBody
public Msg testGetServlettext (HttpServletRequest request , HttpServletResponse response) {
ServletContext servletContext = request.getSession().getServletContext();
Object attribute = servletContext.getAttribute("name");
return Msg.success().add("name的值", "得到的值为: "+attribute);
}
1.4 ServletContext在HttpServlet中的使用
- web.xml文件支持**对整个站点进行配置参数信息
<context-param>
<param-name>name</param-name>
<param-value>zhongfucheng</param-value>
</context-param>
- 在Servlet获取
package com.shaoming.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
*/
public class ServletContextServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// >>处理POST请求参数乱码
request.setCharacterEncoding("utf-8");
// >>处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
// TODO...
// 获取到ServletContext对象
ServletContext servletContext = this.getServletContext();
//设置值
servletContext.setAttribute("myname", "mynamevaluemyname的值");
// 通过名称获取值
String value = servletContext.getInitParameter("name");
System.out.println(value);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.shaoming.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
*/
public class ServletContextServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// >>处理POST请求参数乱码
request.setCharacterEncoding("utf-8");
// >>处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
// 获取到ServletContext对象
ServletContext servletContext = this.getServletContext();
// 通过名称获取值
String value = servletContext.getInitParameter("name");
String value2 = (String) servletContext.getAttribute("myname");
System.out.println(value);
System.out.println(value2);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
说明:
ServletContext域对象的k-v可以在web.xml设置
也可以在HttpServlet里面进行设置
2.ServletConfig的使用
2.1在web.xml里面设置值
<servlet>
<description></description>
<display-name>ServletConfigServlet</display-name>
<servlet-name>ServletConfigServlet</servlet-name>
<servlet-class>com.shaoming.servlet.ServletConfigServlet</servlet-class>
<init-param>
<param-name>configdata</param-name>
<param-value>我是ServletConfig设置的参数</param-value>
</init-param>
</servlet>
说明:
ServletConfig是当前Servlet的配置信息
从web.xml可以看出,参数只是属于这个Servlet
2.2 ServletConfig在HttpServlet的使用
package com.shaoming.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* ServletConfig设置参数 它只是属于这个servlet,不能同时使用
*/
public class ServletConfigServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// >>处理POST请求参数乱码
request.setCharacterEncoding("utf-8");
// >>处理响应正文乱码
response.setContentType("text/html;charset=utf-8");
// TODO...
ServletConfig servletConfig = this.getServletConfig();
String initParameter = servletConfig.getInitParameter("configdata");
PrintWriter out = response.getWriter();
out.write(initParameter);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
说明;
获取参数值的方法是 getInitParameter(xxx);