私の Web アプリケーションには、コントローラーとして機能する 2 つのサーブレットがあります。1 つのサーブレットは Web 要求の処理に使用され、別のサーブレットは 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
したがって、 の前にロードすることがわかりますAJAXController
。
のinit()
方法ではwebController
、すべての初期化タスクを行います。
loading the database driver
initializing the configuration
and other stuff that I need for my web application
起動時のロードにより、AJAX 要求がサーバーに到達する前に Web アプリが初期化され、データベースに確実にアクセスできるようになります。
ただし、Web アプリケーションを 1 つのサーブレットで初期化するという考えは好きではありません。別のサーブレットを呼び出しInitServlet
て、コードをWebController
の init メソッドからInitServlet
のinit()
メソッドに移動することを考えています。
質問
- それは良い考えですか?この問題を解決する他のアプローチはありますか?
- initサーブレットの唯一の目的がWebアプリケーションを初期化することであり、そのため、どのURLにもマップされるべきではないことを考えると、私のサーブレットマッピングはどのように見えるべきですか
私はHttpServletResponse.SC_FORBIDDEN
彼らdoPost()
とdoGet()
方法で送信します。しかし、可能であれば、このサーブレットを何にもマップしないでください。