我是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。
答案 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响应