- 浏览: 109200 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
masuweng:
JAVA对数字证书的常用操作 -
beming:
org.springframework.beans.facto ...
利用Ant与Proguard混淆引用的子工程项目jar包及打war包 -
beming:
不错,挺清晰的
利用Ant与Proguard混淆引用的子工程项目jar包及打war包 -
sotired:
mark,看看
ExtJs2.0学习系列 - 索引贴
ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。
在JSP文件中,application 是 ServletContext 的实例,由JSP容器默认创建。Servlet 中调用 getServletContext()方法得到 ServletContext 的实例。
我们使用缓存的思路大概是:
服务器启动时,ServletContextListener 的 contextInitialized()方法被调用,所以在里面创建好缓存。可以从文件中或者从数据库中读取取缓存内容生成类,用 ervletContext.setAttribute()方法将缓存类保存在 ServletContext 的实例中。
程序使用 ServletContext.getAttribute()读取缓存。如果是 JSP,使用a pplication.getAttribute()。如果是 Servlet,使用 getServletContext().getAttribute()。如果缓存发生变化(如访问计数),你可以同时更改缓存和文件/数据库。或者你等 变化积累到一定程序再保存,也可以在下一步保存。
服务器将要关闭时,ServletContextListener 的 contextDestroyed()方法被调用,所以在里面保存缓存的更改。将更改后的缓存保存回文件或者数据库,更新原来的内容。
2 import DatabaseManager; // my own class
3 import javax.servlet.ServletContext;
4 import javax.servlet.ServletContextListener;
5
6 public class MyContextListener
7
8 implements ServletContextListener {
9 private ServletContext context = null;
10
11 public void contextInitialized(ServletContextEvent event) {
12 context = event.getServletContext();
13 User user = DatabaseManager.getUserById(1);
14 context.setAttribute("user1", user);
15 }
16
17 public void contextDestroyed(ServletContextEvent event) {
18 User user = (User)context.getAttribute("user1");
19 DatabaseManager.updateUserData(user);
20 this.context = null;
21 }
22 }
23
布署 ServletContextListener,你实现(implements)了 ServletContextListener 编译后,把它放在正确的WEB-INF/classes目录下,更改WEB-INF目录下的 web.xml文件,在web-app节点里添加
2 <listener-class>MyServletContextListener</listener-class>
3 </listener>
在Struts中实现系统的初始化工作
在Struts中,我们可以写一个Servlet让它继承于ActionServlet并覆 盖其init()方法,然后修改web.xml文件的Struts启动相关配置来达到目的。
2
3 import javax.servlet.ServletException;
4 import org.apache.struts.action.ActionServlet;
5
6 /**
7 * 系 统唯一的Servlet类BaseServlet<br>
8 * 完成系统初始化的工作
9 */
10 public class BaseServlet extends ActionServlet {
11
12 private static final long serialVersionUID = -4743066925691800288L;
13
14 @Override
15 /*
16 * 系 统初始化
17 */
18 public void init() throws ServletException {
19 super.init();
20
21 // 初始化系统全局变量
22 //
23
24 // 加载自定义配置文件
25 //
26
27 // 启动定时任务
28 //
29 }
30
31 }
package fangwei.servlet; import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; /** * 系统唯一的Servlet类BaseServlet<br> * 完成系统初始化的工作 */ public class BaseServlet extends ActionServlet { private static final long serialVersionUID = -4743066925691800288L; @Override /* * 系统初始化 */ public void init() throws ServletException { super.init(); // 初始化系统全局变量 // ... // 加载自定义配置文件 // ... // 启动定时任务 // ... } }
2 <web-app>
3 <!-- struts servlet begin -->
4 <servlet>
5 <servlet-name>struts</servlet-name>
6 <servlet-class>fangwei.servlet.BaseServlet</servlet-class>
7 <init-param>
8 <param-name>config</param-name>
9 <param-value>/WEB-INF/struts/struts-config.xml</param-value>
10 </init-param>
11 <load-on-startup>0</load-on-startup>
12 </servlet>
13 <servlet-mapping>
14 <servlet-name>struts</servlet-name>
15 <url-pattern>*.do</url-pattern>
16 </servlet-mapping>
17 <!-- struts servlet end -->
18 </web-app>
<?xml version="1.0" encoding="UTF-8"?> <web-app> <!-- struts servlet begin --> <servlet> <servlet-name>struts</servlet-name> <servlet-class>fangwei.servlet.BaseServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts/struts-config.xml</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>struts</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- struts servlet end --> </web-app>
那么,在Struts2中我 们应该怎么做呢?
在Struts2中实现系统的初始化工作
在Struts2中,我们可以写一个filter让它继承于FilterDispatcher并覆盖其 init()方法,然后修改web.xml文件的Struts2启动相关配置来达到目的。
2
3 import javax.servlet.FilterConfig;
4 import javax.servlet.ServletException;
5
6 import org.apache.struts2.dispatcher.FilterDispatcher;
7
8 public class BaseFilterDispatcher extends FilterDispatcher {
9
10 @Override
11 public void init(FilterConfig arg0) throws ServletException {
12 super.init(arg0);
13
14 // 初始化系统全局变量
15 //
16
17 // 加载自定义配置文件
18 //
19
20 // 启动定时任务
21 //
22 }
23
24 }
package fangwei.filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import org.apache.struts2.dispatcher.FilterDispatcher;
public class BaseFilterDispatcher extends FilterDispatcher {
@Override
public void init(FilterConfig arg0) throws ServletException {
super.init(arg0);
// 初始化系统全局变量
// ...
// 加载自定义配置文件
// ...
// 启动定时任务
// ...
}
}
<?xml version="1.0" encoding="UTF-8"?> <web-app> <filter> <filter-name>struts2</filter-name> <filter-class>fangwei.filter.BaseFilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
2 <web-app>
3 <filter>
4 <filter-name>struts2</filter-name>
5 <filter-class>fangwei.filter.BaseFilterDispatcher</filter-class>
6 </filter>
7 <filter-mapping>
8 <filter-name>struts2</filter-name>
9 <url-pattern>/*</url-pattern>
10 </filter-mapping>
11 </web-app>
思考
不管是Struts、Struts2还是其他的web层框架,它们目前基于的技术都是 Servlet,只要根据web.xml找到那个启动类,我们就能通过覆盖该类的的init()方法来实现系统的初始化工作。
比较优雅的实现系统的初始化工作
以上的实现方式都侵入了框架的原生类,利用Servlet 容器的特性我们可以更优雅的实现系统的初始化工作。我们可以写一个listener让它实现ServletContextListener接 口,在contextInitialized()方法中做想做的事情。将此listener配置到web.xml中,Servlet容器如tomcat会 在启动该web应用程序时调用此方法。
package fangwei.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class InitListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent sce) { System.out.println("web exit ... "); } public void contextInitialized(ServletContextEvent sce) { System.out.println("web init ... "); //系统的初始化工作 // ... } }
2
3 import javax.servlet.ServletContextEvent;
4 import javax.servlet.ServletContextListener;
5
6 public class InitListener implements ServletContextListener {
7
8 public void contextDestroyed(ServletContextEvent sce) {
9 System.out.println("web exit ");
10 }
11
12 public void contextInitialized(ServletContextEvent sce) {
13 System.out.println("web init ");
14 //系统的初始化工作
15 //
16 }
17
18 }
2 <web-app>
3 <listener>
4 <listener-class>fangwei.listener.InitListener</listener-class>
5 </listener>
6 <filter>
7 <filter-name>struts2</filter-name>
8 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
9 </filter>
10 <filter-mapping>
11 <filter-name>struts2</filter-name>
12 <url-pattern>/*</url-pattern>
13 </filter-mapping>
14 </web-app>
发表评论
-
分享J2EE学习的20个网站
2009-11-10 11:07 1063前人栽树,后人乘凉。 ... -
struts2标签集
2009-11-12 11:38 544A: <s:a xhref="" ... -
struts2标签使用 (#$%)/js命名空间
2009-11-13 14:49 779session中存有UserVO值对象,其中有networkL ... -
Struts2使用之值栈与OGNL-使用
2009-11-25 16:47 1008Struts2使用之值栈与OGNL-使用 ... -
jQuery+struts+json
2009-12-09 12:10 823在struts中采用jquery利用json数据来动态无刷新更 ... -
提高JAVA代码质量,减少代码缺陷
2009-12-09 14:10 1050这是最新一期IBM developworks的专题,摘录了一些 ... -
struts2.0标签应用–for循环的实现
2009-12-30 15:01 822<!--header.php end--> & ... -
JSP防止重复提交,重复刷新,后退
2010-01-06 12:24 1296一。前言 你在任何一个 ... -
用Session实现在线统计的功能(HttpSessionListener)
2010-01-18 16:52 1212如何用Session实现在线统计的功能,其实只要对Servle ... -
struts2:利用标签显示List嵌套Map
2010-02-01 17:12 1131List中存放一个Map,利用<s:iterator/& ... -
REFERER及jsp中request.getHeader() 相关详细
2010-02-23 17:42 935在三种情况下,<%=request.getHeader( ... -
Ubuntu下安装和配置Apache2
2010-03-05 10:15 992在Ubuntu中安装apache 安装 ... -
Struts2的Result Type
2010-03-07 15:46 0chain 用来处理Act<wbr> ... -
Java读写cookie
2010-04-02 09:51 757<!--<br><br> ... -
快速建立Subversion服务器
2010-05-20 16:19 705如何快速建立Subversion服务器,并且在项目中 ... -
Apache安装设置 - Ubuntu中文
2010-06-24 15:39 759Apache 安装设 ... -
Log4J使用完全手册(转)
2010-07-14 22:08 790Log4J是Apache的一个开放源代码项目(http:// ...
相关推荐
2. `GenericServlet`类:这是一个抽象类,实现了Servlet接口,提供了通用的生命周期方法,如`init()`和`destroy()`,方便开发者自定义初始化和销毁逻辑。 3. `HttpServlet`类:继承自`GenericServlet`,专为HTTP协议...
综合以上内容,可以理解为:Web系统与技术实验十的核心在于学习和实践Java Servlet技术,特别是与Web应用环境相关的高级特性,比如监听器的使用、会话管理、Web应用的初始化和销毁过程等。通过这些实验,学习者能够...
Servlet生命周期包括加载、初始化、服务、销毁四个阶段。 - HttpServlet是Servlet API提供的抽象类,为HTTP协议提供了一些基本功能,如doGet、doPost等方法,是大多数Servlet实现的基础。 2. **Servlet配置** - ...
JSP(JavaServer Pages)和Servlet是Java Web开发中两个核心的技术,它们主要用于构建动态网站。下面将详细阐述这两个概念以及它们在笔试中常遇到的问题。 1. JSP内置对象: - request:代表HttpServletRequest对象...
1. **Servlet生命周期**:Servlet的生命周期包括加载、初始化、服务和销毁四个阶段。开发者可以通过重写`init()`, `service()`, 和 `destroy()` 方法来处理这些阶段。 2. **Servlet容器**:Servlet API 2.5运行在...
- `Servlet`: 这是所有Servlet的基类,定义了Servlet的基本行为,如初始化、服务和销毁方法。 - `GenericServlet`: 一个抽象Servlet类,实现了Servlet和ServletConfig接口,提供了一种通用的方法来处理多种协议。 ...
- **init()**:初始化方法,在 Servlet 容器加载 Filter 时调用。 - **doFilter()**:拦截请求的方法,用于处理请求前后的逻辑。 - **destroy()**:销毁方法,在 Servlet 容器卸载 Filter 时调用。 在 `web.xml` 中...
- **Servlet生命周期**:Servlet的生命周期包括初始化(init)、服务(service)和销毁(destroy)三个主要阶段。当Servlet首次被调用时,服务器会调用init()方法进行初始化;每次客户端请求Servlet时,服务器都会...
JSP页面被转换成Servlet后,经历**加载、初始化、服务、销毁**四个阶段: - **加载**:JSP首次被请求时,容器将其转换为Servlet源码并编译为.class文件。 - **初始化**:Servlet实例化,执行`<jsp:useBean>`动作或...
- `ServletContext`常用于实现会话跟踪、共享全局变量、监听应用事件(如初始化、销毁)等。 - 如果需要在多个Servlet间共享非持久性的数据,`ServletContext`是一个理想的工具;而若需要持久化的数据存储,应考虑...
- `init()`和`destroy()`:初始化和销毁Servlet实例。 2. **HttpServlet类**: - `doGet()`和`doPost()`:处理GET和POST请求的方法,子类通常重写这些方法以实现业务逻辑。 3. **请求和响应对象**: - `...
- JSP有三个生命周期阶段:初始化、服务和销毁。 3. **EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)** - EL简化了数据访问,可以更方便地获取和设置JavaBean的属性。 - JSTL提供...
- `ServletContextListener`: 监听应用的初始化和销毁。 **总结** 在JSP中,过滤器和侦听器是提高应用程序性能和功能的重要工具。过滤器通过拦截请求和响应,可以实现数据过滤、安全控制、日志记录等功能;而侦听...
- 当Web容器首次加载Servlet时,它会调用Servlet的`init()`方法来进行初始化工作。 - 初始化过程可能包括设置配置参数、数据库连接等操作。 2. **服务阶段**: - 在初始化之后,Servlet会进入服务阶段。 - 当...
- Servlet生命周期包括初始化、服务、销毁三个方法。 - `doGet`和`doPost`处理GET和POST请求,`ServletContext`全局共享信息。 - 使用`response.sendRedirect()`和`request.getRequestDispatcher()`实现重定向和...
JSP页面经过编译、初始化、服务和销毁四个阶段。在服务阶段,JSP内置对象会被创建并使用,而页面中的Java代码会被执行。 ### 6. MVC模式与JSP JSP常与Model-View-Controller(MVC)设计模式一起使用,其中模型负责...
2. **生命周期**:Servlet具有初始化、服务、销毁三个阶段,JSP在首次被请求时会被转换为Servlet并进行初始化。 3. **请求处理**:Servlet通过HttpServlet的doGet或doPost方法处理HTTP请求,JSP则通过内置的脚本元素...
Servlet的生命周期由Servlet容器控制,主要分为初始化、服务和销毁三个阶段。在初始化阶段,容器调用`init()`方法;在服务阶段,根据请求调用`service()`方法;在销毁阶段,调用`destroy()`方法释放资源。 通过理解...
2. **JSP生命周期**:JSP页面经过翻译、编译和初始化三个阶段,最终变为一个Servlet执行。理解这个过程对于优化性能和解决问题至关重要。 3. **JSP基本元素**:包括脚本元素(scriptlet、声明、表达式)、指令元素...
4. **Servlet生命周期**:理解Servlet的加载、初始化、服务和销毁过程,以及如何使用ServletConfig和ServletContext。 5. **会话管理**:通过HttpSession对象实现用户会话跟踪,处理会话超时和会话失效问题。 6. *...