将单个Servlet用于多个HTML表单

时间:2015-08-18 16:37:54

标签: html jsp servlets

我是Java的JSP和Servlets的新手。

我试图用单个Servlet Controller控制两个不同的HTML表单。我正在遵循的方法是在两种形式中创建隐藏字段,然后,在我编写的Servlet中:

String extra= request.getParameter("value"); 
//value is name of hidden textbox in my both forms

然后,使用if-else

if(extra.equals(x))
  do this....
else if(extra.equals(y))
  do this...

我的问题是,有没有更好的方法来解决这个问题?我的实现非常繁琐,我想在整个应用程序中使用单个servlet。

5 个答案:

答案 0 :(得分:1)

这是可行的,但我不会考虑可扩展性 您是否有任何限制只使用一个servlet?
如果您打算开发更大的东西,可以尝试一些框架,例如JSF或者让您以Springboot开始项目。
您也可以尝试使用Web服务与您的应用程序进行交互。在这种情况下,Jackson + Jersey可以很好地协同工作(example)。

答案 1 :(得分:1)

这取决于你如何处理不同的形式。由于Servlet只能有一个“doPost”方法,所以你正在使用的方法可以解决这个问题,但是,我宁愿考虑引入一个像Spring MVC这样的框架来保存几行代码,并且会允许你以多种形式使用Servlet(MVC模式中的Controller)。

我一直遵循的最佳实践是每页都有一个servlet / controller,如果你的表单嵌入在不同的页面中,我认为你可以考虑使用两个servlet而不是一个。

答案 2 :(得分:1)

如果您为forms请求相同的方法(GET,POST等),并且您对JSPs都有共同的任务,则可以创建单Servlet,就像您一样那样。

但如果它不限于一个或两个字段,那么代码将变得复杂,可读性和难以维护。因此,在这种情况下,我建议您为单独的表单单独Servlet

答案 3 :(得分:1)

很好的解决方案,但我建议为每个表单指定专用路径,其中所有路径都是针对一个servlet的。

servlet路径就像{"/path","/path/*"}一样,形成一个会调用/path/cgi0/path/cgi1,......

然后只需检查请求的路径而不是参数。

这将使繁忙的业务和代码保持在服务器端,但为客户提供更好的API系统(如果他们关心)

答案 4 :(得分:0)

你可以做的是包括来自同一个servlet的doGet和doPost响应,然后使用你的action x,向你的servlet的post部分发送一个Get响应