请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php
ServletContext的概念
1. WEB程序在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
2. ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
3. 由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
4. 针对web应用的信息共享区域,被所有的客户端共享。
5. web服务器一启动的时候,就会为每个web应用创建一个对应ServletContext对象。
6. 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。
7. 当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
8. web.xml的代码:
方法一:
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appxmlns:xsi=http://www.w3.org/2001/XMLSchema-instancexmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5">
<!-- 配置一些参数:整个应用共享的参数 -->
<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
<!-- 某个servlet的初始化参数,放到servlet配置的里面 -->
<servlet>
<servlet-name>ServletContextDemo</servlet-name>
<servlet-class>servletContext.ServletContextDemo</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>test</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletContextDemo</servlet-name>
<url-pattern>/ServletContextDemo</url-pattern>
</servlet-mapping>
</web-app>
方法二:在ServletContextDemo中配置(自动生成)
@WebServlet(
urlPatterns = { "/ServletContextDemo" },
initParams = {
@WebInitParam(name ="name", value = "test")
})
9. ServletContextDemo的代码:
doGet方法的代码:
protected void doGet(HttpServletRequestrequest, HttpServletResponseresponse) throws ServletException, IOException {
// TODO Auto-generatedmethod stub
//取得初始化参数
//1.得到servletContext对象
ServletContext context =request.getServletContext();
//2.得到初始化参数
String encoding = context.getInitParameter("encoding");
System.out.println(encoding);
//1.得到当前servlet的config对象
ServletConfig config = this.getServletConfig();
//2.从config对象中得到当前servlet的初始化参数
String name = config.getInitParameter("name");
System.out.println(name);
}
10. SimpleServlet的代码:
doGet方法的代码:
protected voiddoGet(HttpServletRequest request, HttpServletResponseresponse) throwsServletException, IOException {
// TODO Auto-generatedmethod stub
//取得初始化参数
//1.得到servletContext对象
ServletContext context =request.getServletContext();
this.getServletContext();
this.getServletConfig().getServletContext();
//2.得到初始化参数
String encoding = context.getInitParameter("encoding");
System.out.println(encoding);
//1.得到当前servlet的config对象
ServletConfig config = this.getServletConfig();
//2.从config对象中得到当前servlet的初始化参数
String name = config.getInitParameter("name");
System.out.println(name);
}
ServletContext的应用
1. 多个Servlet通过ServletContext对象实现数据共享。
2. 获取WEB应用的初始化参数。
3. 利用ServletContext对象读取资源文件。
4. ContextServlet的代码:
login.jsp的代码(body主体代码):
<body>
<formaction="ContextServlet"method="post">
<inputtype="text"name="name"/>
<inputtype="submit"/>
</form>
</body>
doPost方法的代码:
protected voiddoPost(HttpServletRequest request, HttpServletResponseresponse) throwsServletException, IOException {
// TODO Auto-generatedmethod stub
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//1.得到客户端输入的名字
String name = request.getParameter("name");
//2.将这个名字存入来访用户列表,列表再存入servletContext中
List<String> nameList;
nameList = (List<String>)this.getServletContext().getAttribute("nameList");
if(nameList==null){
nameList = new ArrayList<String>();
}
nameList.add(name);
this.getServletContext().setAttribute("nameList",nameList);
for(StringaccessName:nameList){
out.print(accessName);
}
}
5. SessionServlet的代码:
doPost方法的代码:
protected voiddoPost(HttpServletRequest request, HttpServletResponseresponse) throws ServletException,IOException {
// TODO Auto-generatedmethod stub
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//1.得到客户端输入的名字
String name = request.getParameter("name");
//2.将这个名字存入来访用户列表,列表再存入servletContext中
HttpSession session = request.getSession();
List<String> nameList;
nameList = (List<String>)session.getAttribute("nameList");
if(nameList==null){
nameList = new ArrayList<String>();
}
nameList.add(name);
session.setAttribute("nameList",nameList);
for(StringaccessName:nameList){
out.print(accessName);
}
}