チャレンジ:
名前がURLと一致するメソッドの束を含むサーブレットを作成する必要があります。
たとえば、3つのURLがあります。
myhost/userservice/registration
myhost/userservice/login
myhost/userservice/anotherAction
次のように、UserServiceServletサーブレットによって処理されます。
public class UserServiceServlet extends HttpServlet { public void registration(HttpServletRequest request, HttpServletResponse response) { //.... } public void login(HttpServletRequest request, HttpServletResponse response) { //.... } public void anotherAction(HttpServletRequest request, HttpServletResponse response) { //.... } }
これを行う方法?
まず、基本的なサーブレットを作成します。
public class BaseServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { String method = getMethod(req); // , "login" "trampampam"; if (method != null && !"".equals(method)) { callMethod(method, req, resp); // } } catch (Exception e) { // log exception req.getRequestDispatcher(WebPages.PAGE_404).forward(req, resp); } } private String getMethod(HttpServletRequest request) { String method = request.getPathInfo(); // , "/login" if (!"".equals(method)) { return method.substring(1, method.length()); // "/" } return null; } private void callMethod(String method, HttpServletRequest request, HttpServletResponse response) throws Exception // this.getClass().getDeclaredMethod(method, HttpServletRequest.class, HttpServletResponse.class).invoke(this, request, response); } }
次に、サーブレットを作成します。
public class UserServiceServlet extends BaseServlet { public void registration(HttpServletRequest request, HttpServletResponse response) { //.... } public void login(HttpServletRequest request, HttpServletResponse response) { //.... } public void anotherAction(HttpServletRequest request, HttpServletResponse response) { //.... } }
およびweb.xmlで:
<servlet> <servlet-name>User</servlet-name> <servlet-class>mypackage.UserServiceServlet</servlet-class> </servlet><servlet-mapping> <servlet-name>User</servlet-name> <url-pattern>/userservice/*</url-pattern> </servlet-mapping>
これで、サーブレットに任意の数のメソッドを作成できます! ロジックの分離は非常に簡単です! 頑張って ;-)