Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
事件,如.net';s";应用程序“启动”;及;开始“请求”;对于java/tomcat/JSP?_Java_Jsp_Tomcat_Servlets_Page Lifecycle - Fatal编程技术网

事件,如.net';s";应用程序“启动”;及;开始“请求”;对于java/tomcat/JSP?

事件,如.net';s";应用程序“启动”;及;开始“请求”;对于java/tomcat/JSP?,java,jsp,tomcat,servlets,page-lifecycle,Java,Jsp,Tomcat,Servlets,Page Lifecycle,在Java/Tomcat/JSP web项目中,是否有一种方法可以附加到asp.net的“应用程序启动”和“开始请求”之类的事件?我真的不想使用JSF或额外的框架(Spring、Struts)。我不想在每页的基础上使用类似“jspInit”的东西,目标是一个全局事件处理程序 如果我陷入.net的工作方式中,关键是要有一个中心位置来初始化IoC容器(应用程序启动),并实现“每个请求一个数据库事务”工作流(启动请求) 谢谢。处理请求 我认为,如果您研究可以为您解决许多问题的框架,那么最终您会有更好的

在Java/Tomcat/JSP web项目中,是否有一种方法可以附加到asp.net的“应用程序启动”和“开始请求”之类的事件?我真的不想使用JSF或额外的框架(Spring、Struts)。我不想在每页的基础上使用类似“jspInit”的东西,目标是一个全局事件处理程序

如果我陷入.net的工作方式中,关键是要有一个中心位置来初始化IoC容器(应用程序启动),并实现“每个请求一个数据库事务”工作流(启动请求)

谢谢。

处理请求

我认为,如果您研究可以为您解决许多问题的框架,那么最终您会有更好的运气,并且代码更易于维护。要在“应用程序启动”时做一些事情,您需要实现。它是标准servlet API的一部分。正如其他人已经提到的,您可以在“过滤器链”中实现一个或多个过滤器,以便在servlet处理每个传入请求之前进行特殊处理。

在JavaEE(servlet+JSP)世界中,通过实现JavaEE规范标准化的相关接口,可以获得等效的功能

应用程序概念的等价物是Web上下文或Servlet上下文。会话和请求在JavaEE中的概念与.Net相同。有一些相关的侦听器类需要实现,以便挂接到中的相关事件

  • 应用程序的生命周期(ServletContextListener和ServletContextAttributeListener)
  • 应用程序提供的请求(ServletRequestListener和ServletRequestAttributeListener)或
  • 由相同的会话(HttpSessionListener和HttpSessionActivationListener)建立的会话
有关这方面的更多信息,请参阅。接口也继续保持良好的性能

过滤器与ServletRequestListener 如果您已经阅读了注释,您会注意到通过实现
ServletRequestListener
过滤器可以对请求进行预处理和后处理

我建议您使用
Filter
s(就像BalusC一样)。这是因为每次向特定URL发送请求时都会调用
过滤器
,这通常是确保对URL的所有请求都得到相同“处理”的最有效方式

出现这种情况的原因可在以下网站上的Java EE API文档中找到:

接收通知的接口 有关进入和的请求的事件 超出web的范围 应用程序

ServletRequest被定义为即将到来 当 它即将进入第一个servlet 或web应用程序的过滤器,以及 当它退出时超出范围 中的最后一个servlet或第一个筛选器 链条

使用
ServletRequestListener
时,必须注意每个请求只触发一次requestInitialized和requestDestroyed事件(不同于
Filter
在处理管道中每次调用
Filter
时都会调用doFilter方法)。由于过滤器是在请求之前和之后执行操作的常用方式(我没有看到很多人使用ServletRequestListeners),我建议您在这样的上下文中使用过滤器。

ServletAPI中有“类似”事件(event不是最好的词)。对于应用程序启动,您应该使用上下文侦听器
以及有关要求:

在这个问题上,Servlets可以为您提供更多。在Java世界中,事件被称为侦听器。有一些有用的侦听器:

javax.servlet.ServletContextListener

void contextdestromed(ServletContextEvent sce)
在即将销毁servlet上下文时调用

void contextInitialized(ServletContextEvent sce)
在web应用程序准备好处理请求时调用

javax.servlet.ServletContextAttributeListener

void attributeaded(ServletContextAttributeEvent scae)
在向servlet上下文添加新属性时调用

void attributeRemoved(ServletContextAttributeEvent scae)
从servlet上下文中删除属性时调用

void attributereplace(ServletContextAttributeEvent scae)
在替换servlet上下文上的属性时调用

javax.servlet.http.HttpSessionListener

void sessionCreated(HttpSessionEvent se)
在创建会话时调用

void sessionDestroyed(HttpSessionEvent se)
在会话无效时调用

javax.servlet.http.HttpSessionAttributeListener

void attributeAdded(HttpSessionBindingEvent se)
在将属性添加到会话时调用

void attributeRemoved(HttpSessionBindingEvent se)
从会话中删除属性时调用


void AttributeReplace(HttpSessionBindingEvent se)
在会话中替换属性时调用

这可能会更好,但有几个原因我不能。首先,我真的不喜欢流行的java框架。第二,最后这是一个本科班,我必须管理一个由3-4名没有网络应用经验的学生组成的团队,所以我不想加入额外的框架,附录:
ServletRequestListener
的功能也可以通过
Filter
实现,只要你想挂接更具体的URL(例如,当你想忽略静态文件上的请求)。@BalusC,你说得对。我在考虑什么时候使用每一个;当然是其中之一