有一个servlet来设置Web应用程序

时间:2013-04-24 22:14:24

标签: java servlets

在我的Web应用程序中,我有两个servlet充当控制器。一个servlet用于处理Web请求,另一个servlet用于处理AJAX请求。

//This servlet manages web requests, and forwards to JSP to display data
WebController extends HttpServlet: 

// This servlet manages AJAX requests. And returns JSON to user
AJAXController extends HttpServlet: This servlet manages 

在我的web.xml中,我定义了以下映射:

<servlet>
  <servlet-name>WebController</servlet-name>
  <servlet-class>com.frontend.WebController</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>WebController</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet>

  <servlet-name>AJAXController</servlet-name>
  <servlet-class>com.AJAXController</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>AJAXController</servlet-name>
  <url-pattern>*.xhr</url-pattern>
</servlet-mapping>

因此,您可以看到我在WebController之前加载AJAXControllerinit()的{​​{1}}方法中,我执行所有初始化任务。

webController

load-on-startup确保在任何AJAX请求到达服务器之前,Web应用程序已初始化,我可以确保访问数据库。

但是,我不喜欢在一个servlet中初始化Web应用程序的想法。我正在考虑使用一个名为loading the database driver initializing the configuration and other stuff that I need for my web application 的单独servlet,并将代码从InitServlet的init方法移到WebController的{​​{1}}方法

问题

  1. 这是个好主意吗?还有其他方法可以解决这个问题吗?
  2. 我的servlet映射应该是什么样的,因为init servlet的唯一目的是初始化Web应用程序,因此它不应该映射到任何URL
  3. 我会在InitServletinit()方法中发送HttpServletResponse.SC_FORBIDDEN。但是如果可能的话,我希望servlet不被映射到任何东西。

2 个答案:

答案 0 :(得分:2)

最好将初始化代码移至ServletContextListener

当您的应用启动时,它将执行contextInitialized(ServletContextEvent sce),您将有机会初始化所有内容。

this是你如何将它挂钩到你的web.xml

答案 1 :(得分:-1)

我认为这不一定是个坏主意。只需将您的初始化服务器定义为首先在web.xml中加载。就条目而言,它需要定义servlet类,当然还有启动顺序的负载。

将初始化代码放在已实现的init方法中。将doGet doPost方法留空,如果它们被调用则没有任何反应。只有在加载servlet时才会调用init方法。

我看到的唯一问题是,如果将其运行到集群应用程序服务器的上下文中,并且您拥有真正的单例资源(如连接池),但在这种情况下,您可以通过应用程序配置初始化这些资源在应用程序服务器中。当应用程序启动时以及加载servlet之前,它们将被初始化。