【问题标题】:MVC, JSP + Servlets - How to put/attach certain object to application scope on application loading?MVC,JSP + Servlets - 如何在应用程序加载时将某些对象放置/附加到应用程序范围?
【发布时间】:2014-01-10 23:03:32
【问题描述】:

MVC - JSP + Servlets、TomEE、MySQL、Eclipse

我知道如何在servlet 中将某些内容放入应用程序范围,并将请求转发到某个jsp 页面,在那里我从scopes(request, session, aplication) 的某些页面中读取数据。但是,当我加载我的应用程序时,我希望在应用程序范围(Servlet 上下文)中有某个对象。 在web.xml我已经指定了应用入口点:

   <welcome-file-list>
        <welcome-file>/home.jsp</welcome-file>
   </welcome-file-list>

我想在应用程序范围内有一些数据,因为我正在从这些数据创建菜单项。 因此,当应用程序启动时,尚未处理任何 servlet,应用程序直接转到home.jsp,因此任何范围都没有附加任何内容。或者当用户将其他一些应用程序 jsp 页面添加为书签,然后直接前往那里的情况。

【问题讨论】:

    标签: java jsp servlets model-view-controller jstl


    【解决方案1】:

    您可以使用ServletContextListener

    用于接收有关 ServletContext 的通知事件的接口 生命周期变化。

    您实现其contextInitialized(ServletContextEvent) 方法,使您可以通过ServletContextEvent 访问ServletContext。然后,您可以为其添加任何属性并在 jsp 中引用该属性。

    显然,您必须在部署描述符中使用 &lt;listener&gt; 元素注册 ServletContextListener

    <listener>
        com.yourcomp.listeners.YourListener
    </listener>
    

    容器将负责初始化此类并在 Web 应用程序启动时调用其 contextInitialized() 方法。

    【讨论】:

    • 非常感谢,这正是我所需要的。
    • @Wlad 不客气。在相关的说明中,如果您使用的是 Servlet 3.0,您也可以使用 @WebListener 注释您的类,而不是使用 &lt;listener&gt; 注册它。
    • 我正在使用我的项目,其中包含一些旧 Tomcat 版本中的servlet-api.jar。所以我在web.xml 中声明了servlet 及其映射。现在,正如您所建议的,我想声明带有注释的 servlet。我正在使用 Tomee plus 1.5.2,删除旧的servlet-api.jar,从tomee/lib 文件夹中添加servlet-api.jar 以构建路径,在web.xml 中版本设置为3.0。我用@WebServlet("/LoginController") 注释了servlet,Eclipse 没有显示任何错误。但是,在部署时出现错误:package javax.servlet.annotation does not exist
    • 没关系。项目清理并重建修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多