【问题标题】:A more elegant way to handle different requests in the same servlet [duplicate]在同一个 servlet 中处理不同请求的更优雅的方法 [重复]
【发布时间】:2014-07-29 18:40:57
【问题描述】:

这是我的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 页面,以便在选择表单元素上显示该列表。当我编译注册表单时,我以 servlet 可以处理请求的方式按下具有 action="signup?action=submit" 的提交按钮。你知道一种更优雅或更正确的方式来做我的意思吗?

【问题讨论】:

  • 更优雅是什么意思?为您的 jsp 提交代码。
  • 我的意思是,以这种方式在同一个 servlet 中处理不同请求是否正确?是否存在在同一个 servlet 中处理更多请求的不同方式?
  • 我建议最好对不同的请求使用不同的 servlet 作为一个好习惯。有几个原因是它无论如何都会用完资源,而 Java 会同步处理这些请求(Java 8 除外) .
  • @Mazzy 定义不同的请求。目前我看不出它们有什么不同。与其问我相反的问题,不如回答我的 cmets 并按照他们所说的去做。
  • @RomanC 对于不同的请求我的意思是我两次调用 Servlet。对于初始化 porpouse 并提交 porpouse

标签: java forms jsp servlets request


【解决方案1】:

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

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

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

但是,您似乎试图重新发明轮子。使用可用的框架之一。例如,Struts 大致完成了我在此处解释的内容。 Spring 更强大,并且具有相同的概念。

【讨论】:

  • 不幸的是,我只能使用 java。 EE 与 GlassFish 没有任何框架
  • 无论强弱主要是基于意见,FYI Struts 与 Spring 无缝集成。
【解决方案2】:

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

【讨论】:

  • 我通过 JPA 从 MySQL dB 获取国家/地区列表。无论如何,使用不同 Servlet 的想法似乎不错
  • 是的,在这种情况下使用不同的 servlet 更好。
猜你喜欢
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 2019-02-28
  • 2016-04-17
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 2020-03-02
相关资源
最近更新 更多