一种更优雅的方法来处理同一个servlet中的不同请求

时间:2014-06-09 08:45:04

标签: java forms jsp servlets request

这是我的servlet的代码:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        String result = (String)request.getParameter("action");

        switch (result)
        {
            case "init":
                request.setAttribute("CountriesList", signUpBean.getContriesList());
                String arg = "/signup.jsp";
                RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher(arg);
                dispatcher.forward(request, response);
                break;
            case "submit":
                //Code to handle the request
                break;
        }
    }

当我点击链接signup?action=init时,servlet被初始化,接收国家/地区列表并将其传递到signup.jsp页面,以便在选择表单元素上显示列表。当我编译注册表单时,我按下提交按钮,其中有action ="注册?action = submit"在servlet可以处理请求的方式。你知道一种更优雅的方式或正确的方法吗?

2 个答案:

答案 0 :(得分:1)

如果要在表单提交之前处理init情况并且之后提交提交案例,那么它总会有两个不同的请求。我猜在这种情况下最好的做法是使用两个不同的servlet。另外,我建议如果国家/地区列表不是动态的,最好从静态JSON / XML文件中获取它而不必发送servlet请求。这只是一个建议,你的判断有点不清楚。

答案 1 :(得分:1)

创建接口Action及其几个实现。在您的情况下InitSubmit。 在servlet的init方法中注册这些操作,以便它们存储在Map<String, Action> actions中。

现在您的processRequest()将如下所示:

String actionName = (String)request.getParameter("action");
Action action = actions.get(actionName);
action.perform();

然而,似乎你试图重新发明轮子。使用一个可用的框架。例如,Struts的功能大致与我在这里解释的相同。春天更强大,具有相同的概念。