菜单宣传网站怎么做,某产品网络营销推广方案,做钢材销售客户哪里去开发网站,哪些网站是用asp.net开发的在Web应用程序中#xff0c;提供用户界面#xff08;UI#xff09;通常只是工作的一半。 许多应用程序都有后端服务支持的要求。 后端服务的一些示例是调度程序进程#xff08;批处理#xff09;#xff0c;侦听队列并在消息进入时作出响应#xff0c;或者是简单的事情提供用户界面UI通常只是工作的一半。 许多应用程序都有后端服务支持的要求。 后端服务的一些示例是调度程序进程批处理侦听队列并在消息进入时作出响应或者是简单的事情例如存储供整个应用程序使用的信息。 这些全局数据通常需要在所有Servlet类对于每个请求处理器之间共享。 在这里我将向您展示如何在基于Servlet的应用程序中以及在何处添加此类后端服务。 在开始之前我想解释一下Servlet应用程序如何存储数据变量毕竟所有后端服务只是Java对象。 您可以在3个主要区域中添加和共享数据我们有时将这些区域称为不同的“空间”“范围”或“上下文”。 您可能还会将每个区域都视为具有唯一键和数据值的哈希映射。 应用程序范围 –这是为您的Web应用程序实例分配的全局应用程序范围的存储映射空间。 每个Web应用程序都有其独特的空间。 即使将相同的WAR文件部署到域服务器中它们每个都将获得自己的空间。 您可以通过实现javax.servlet.ServletContextListener接口来获取此空间。 此接口还具有两个回调方法当您的应用程序启动初始化或关闭销毁时将调用它们。 使用这些方法您可以执行自己的一次性应用程序或服务设置和清理逻辑。 您可以使用ServletContext#setAttribute(key, value)方法存储任何Java对象。 此存储在外部不是持久性的而仅在服务器内存中。 因此添加的内容越多所需的内存就越多通常您只想保留对服务对象的引用因此通常不会出现内存问题。 这是您应该在其中创建后端服务并对其进行初始化然后将实例添加到该空间中的位置以便稍后可以检索它。 您还可以使用Singleton Pattern创建一个Application范围的上下文区域以将您自己的业务服务作为空间保存但是如果需要在Web应用程序环境中对其进行初始化则仍然需要ServletContextListener 。 请求范围 –这是单个HTTP请求过程存储映射空间仅针对特定请求或临时退出。 该地图空间也不是持久的。 您可以通过处理一种HTTP操作方法来访问Servlet代码中的该空间。 您将使用HttpServletRequest#setAttribute(key, value)方法添加数据。 通常这些存储的数据用于传递到VIEW处理层例如JSP以构造HTML输出。 您已经看过我的一些预览文章该文章在Servlet组件中使用了该文章。 还要注意在处理请求的Servlet方法内部您还将可以使用HttpServletRequest#getServletContext()#getAttribute(key)方法访问上述“应用程序空间”方法。 会话范围 –这是一个特殊的空间您可以在其中跟踪特定的用户与应用程序的交互作为一系列的会话请求或称为用户会话。 请记住HTTP请求是无状态的因此如果要存储一些数据以在多个请求之间共享则将需要此空间但是对于每个客户端浏览器用户它们应该是隔离的。 通常在应用程序中实现用户登录和资源限制时使用。 您可以使用Serlvet类中的HttpServletRequest#getSession(true)#setAttribute(key, value)方法添加到此空间。 每次针对该特定客户端用户 application服务器将自动为您返回相同的会话对象或空间。 但是处理用户会话可能很棘手因此您必须花时间并仔细设计应用程序以实现需要的适当解决方案。 我将在未来写一篇单独的文章介绍如何使用Session作用域但是现在我可以向您展示如何使用内部自定义服务初始化Web应用程序的示例。 您可以在我的servlet3-example中找到此代码。 package zemian.servlet3example.web;import javax.servlet.ServletContext;
import zemian.servlet3example.service.Application;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import zemian.service.logging.Logger;WebListener
public class WebAppStartup implements ServletContextListener {private static final Logger LOGGER new Logger(WebAppStartup.class);Overridepublic void contextInitialized(ServletContextEvent event) {LOGGER.debug(WebApp is starting up.);Application app Application.getInstance();app.init();// Store the app instances. event.getServletContext().setAttribute(Application.SERVLET_CONTEXT_KEY, app);LOGGER.info(WebApp initialized.); }Overridepublic void contextDestroyed(ServletContextEvent event) {Application app Application.getInstance();app.destroy();LOGGER.info(WebApp destroyed.);}
} 有了这个我可以轻松地在Application类中添加任何自定义业务后端服务然后让任何Servlet代码访问它。 注意我使用的是Servlet 3的WebListener批注因此不需要配置。 您只需将WAR应用程序打包在一起它将被EE应用程序服务器检测到 翻译自: https://www.javacodegeeks.com/2015/01/ee-servlet-3-how-to-setup-backend-services-in-a-web-application.html