首页 > 编程知识 正文

servlet手动配置举例,servlet filter

时间:2023-05-03 22:11:51 阅读:41559 作者:2082

33558www.Sina.com/servletapi提供了一个ServletContextListener界面,它是ServletContext对象的生命周期,也就是web APP应用程序的生命周期

当servlet容器启动或退出web APP应用程序时,将触发ServletContextEvent事件并由ServletContextListener处理。 ServletContextListener接口定义了两种处理ServletContextEvent事件的方法。

上下文初始化(servletcontexteventsce ) :在servlet容器启动web APP应用程序时调用。 调用方法后,容器初始化Filter并初始化在web APP应用程序启动时必须初始化的servlet。 上下文发现(servletcontexteventsce ) :在servlet容器退出web APP应用程序时调用。 在调用方法之前,容器将销毁所有servlet和过滤器。概述例1 :启动服务时,将数据库中的数据加载到内存中并分配给属性名称后,其他servlet可以通过getAttribute访问属性值。 包括以下两个步骤:

ServletContext对象为整个web APP应用程序提供共享内存,任何请求都可以访问其内容

如何在服务开始时实现动态参与的内容? 我们应该做的事情如下。

实现servletContextListerner接口,通过共享的setattribute(name,data )方法提交到内存,应用项目,然后通过setattribute(name ) 导入Java.SQL.connection; 导入Java.SQL.prepared statement; import java.sql.ResultSet; import java.util.HashMap; import java.util.Map; 导入javax.servlet.servlet context; 导入javax.servlet.servletcontextevent; import javax.servlet.servletcontextlistener; import util.ConnectTool; publicclassservletcontextltestimplementsservletcontextlistener {//其中的销毁函数实现Publicvoidcontextdestroyed(//其中的初始化函数, 事件发生时publicvoidcontextinitialized (servletcontexteventsce (servletcontextsct=SCE.getservletcontext ) ); MapInteger,String depts=new HashMapInteger,String (; 连接连接=null; 预准备语句pstm=null; ResultSet rs=null; try { connection=connect tool.getconnection (; String sql='select deptNo,dname from dept '; PTM=connection.preparestatement (SQL; rs=pstm.executeQuery (; while(RS.next ) ) depts.put ) RS.getint(1),rs.getString(2) )2); //将获取的值存储在属性键值对中的SCT.setattribute('dept ',depts ); system.out.println ((=====listenertestisbeginning=======) () ) ); }catch(exceptione ) { e.printStackTrace ); } finally { connect tool.release RSC (RS,pstm,connection ); }

} }

  在完成上述编码后,仍需在 web.xml 中进行如下配置,以使得该监听器可以起作用。

<listener>   <listener-class>ServletContextTest.ServletContextLTest</listener-class></listener>

  在完成上述配置后, web 服务器在启动时,会直接加载该监听器,通过以下的应用程序就可以进行数据的访问。

package ServletContextTest; import java.io.IOException; import java.io.PrintWriter; import java.util.*; 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 CreateEmployee extends HttpServlet{ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext sct=getServletConfig().getServletContext(); // 从上下文环境中通过属性名获取属性值 Map<Integer,String> dept=(Map<Integer,String>)sct.getAttribute("dept"); Set<Integer> key=dept.keySet();      response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<form action='/register' action='post'>"); out.println("<table alignb='center'>"); out.println("<tr>"); out.println("<td>"); out.println("username:"); out.println("</td>"); out.println("<td>"); out.println("<input type='text' name='username'"); out.println("</tr>"); out.println("<tr>"); out.println("<td>"); out.println("city:"); out.println("</td>"); out.println("<td>"); out.println("<select name='dept'"); for(Integer i:key){ out.println("<option value='"+i+"'>"+dept.get(i)+"</option>"); } out.println("</select>"); out.println("</td>"); out.println("<tr>"); out.println("</table>"); out.println("</form>"); out.println("</body>");   out.println("</html>"); out.flush(); } }

  即可以非常清楚的了解到 ServletContextListener 接口的使用方法及技巧。 在Container 加载Web 应用程序时(例如启动 Container 之后),会呼叫contextInitialized() ,而当容器移除Web 应用程序时,会呼叫contextDestroyed () 方法。 通过 Tomcat 控制台的打印结果的先后顺序,会发现当 Web 应用启动时,Servlet 容器先调用contextInitialized() 方法,再调用lifeInit 的init() 方法;当Web 应用终止时,Servlet 容器先调用lifeInit 的destroy() 方法,再调用contextDestroyed() 方法。由此可见,在Web 应用的生命周期中,ServletContext 对象最早被创建,最晚被销毁。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。