在同一个 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
及其几个实现。在你的情况下Init
和Submit
。
在 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 中处理不同请求的更优雅的方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章