【发布时间】:2013-04-18 15:54:23
【问题描述】:
在我的 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>
所以你可以看到我在AJAXController之前加载了WebController。
在webController 的init() 方法中,我完成了所有的初始化任务。
loading the database driver
initializing the configuration
and other stuff that I need for my web application
启动时加载确保在任何 AJAX 请求到达服务器之前,Web 应用程序已初始化并且我可以确保进行数据库访问。
但是,我不喜欢在一个 servlet 中初始化 Web 应用程序的想法。我正在考虑有一个名为InitServlet 的单独servlet,并将代码从WebController 的init 方法移动到InitServlet 的init() 方法
问题
- 这是个好主意吗?是否有其他方法可以解决此问题?
- 我的 servlet 映射应该是什么样子,因为 init servlet 的唯一目的是初始化 Web 应用程序,因此它不应该映射到任何 URL
我将在他们的doPost() 和doGet() 方法中发送HttpServletResponse.SC_FORBIDDEN。但如果可能的话,我希望这个 servlet 不被映射到任何东西。
【问题讨论】: