Web容器管理Servlet/JSP相关的生命周期,若对HttpServletRequest对象、HttpSession对象、ServletContxt对象在生成、销毁或相关属性设置发生的时机点有兴趣,可以实现对应的监听器(Listener)。

 

 

    与ServletContext相关的监听器有两个,ServletContextListener、ServletContextAttributeListener

 

1、ServletContextListener

 

    它是生命周期监听器,如果想要知道何时web应用程序已经初始化或者即将结束销毁,可以实现该监听器。

 

    例如,可以实现ServletContextListener,在此应用程序初始过程中,准备好数据库连接线对象、读取应用程序设置等动作,如放置使用头像的目录信息,就不适合将目录名称写死,这时候可以这么做:

 1 package cc.openhome;
 2 import javax.servlet.*;
 3 @WebListener  //使用@weblistener标注
 4 public class ContextParameterReader implements ServletContextListener{
 5        public void contextInitialized(ServletContextEvent e){
 6            ServletContext context = sce.getServletContext();//取得ServletContext
 7            String avatars = context.getInitParameter("AVATAR");//取得初始参数
 8            context.setAttribute("avatars",avatars);//设置ServletContext属性
 9 }
10       public void contextDestroyed(ServletContextEvent sce){}
11 }

  整个web应用程序生命周期,Servlet共享的资料可以设置为ServletContext属性。这些属性数据会一直存在于web应用程序中。可以通过setAttribute()方法设置对象为ServletContext属性,之后可通过ServletContext的getAttribute()方法取出该属性。如果移除属性,用removeAttribute()。

 1 package ServletAPI;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.annotation.WebInitParam;
 8 import javax.servlet.annotation.WebServlet;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 
13 /**
14  * Servlet implementation class Avatar
15  */
16 @WebServlet(
17         urlPatterns = { "/avatar.view" }, 
18         initParams = { 
19                 @WebInitParam(name = "AVATAR_DIR", value = "/image")//根目录WebContent内部
20         })
21 public class Avatar extends HttpServlet {
22     private static final long serialVersionUID = 1L;
23     private String AVATAR_DIR;
24     /**
25      * @see HttpServlet#HttpServlet()
26      */
27     public Avatar() {
28         super();
29         // TODO Auto-generated constructor stub
30     }
31     public void init() throws ServletException{
32         //AVATAR_DIR=getInitParameter("AVATAR_DIR");
33         AVATAR_DIR=(String) getServletContext().getAttribute("avatars");
34     }
35     
36 
37     /**
38      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
39      */
40     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
41         // TODO Auto-generated method stub
42         response.setContentType("text/html;charset=UTF-8");
43         PrintWriter out=response.getWriter();
44         out.println("<!DOCTYPE html>");
45         out.println("<html>");
46         out.println("<head>");
47         out.println("<meta content='text/html; charset=UTF-8' http-equiv='content-type'>");
48         out.println("<title>头像显示</title>");
49         out.println("</head>");
50         out.println("<body>");
51         for(String avatar:getServletContext().getResourcePaths(AVATAR_DIR)){//取得头像路径
52             avatar=avatar.replaceFirst("/", "");
53             out.println("<img src='"+avatar+"'>");
54         }
55         out.println("</body>");
56         out.println("</html>");
57         out.close();
58     }
59 
60     /**
61      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
62      */
63     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
64         // TODO Auto-generated method stub
65     }
66 
67 }
avatar.java

相关文章:

  • 2021-06-07
  • 2021-08-21
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-17
  • 2021-06-06
  • 2021-10-14
相关资源
相似解决方案