在同一个 servlet 中处理不同请求的更优雅的方法 [重复]

Posted

技术标签:

【中文标题】在同一个 servlet 中处理不同请求的更优雅的方法 [重复]【英文标题】:A more elegant way to handle different requests in the same servlet [duplicate] 【发布时间】: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 【参考方案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 更好。

以上是关于在同一个 servlet 中处理不同请求的更优雅的方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 应用程序中处理过滤值的更优雅的方式

JavaScript 复杂判断的更优雅写法

利用java 反射机制来实现一个servlet处理多种请求

Servlet快速入门:第一个Servlet程序

优雅记录 HTTP 请求/ 响应数据

优雅记录 HTTP 请求/ 响应数据