我正在学习EJB3。
我有一个 session bean,它提供创建/更新客户帐户的服务。
该 session bean 提供以下服务:
public void addCustomer(Customer c);
public void updateCustomer(Customer c);
理想情况下,我希望有一个 servlet:CustomerServlet,它将调用我上面列出的 session bean。
问题是我有两个 JSP:UpdateAccount.jsp 和 CreateAccount.jsp。这两个 JSP 都有一个带有方法 POST 和操作“CustomerServlet”的表单。
如何在客户 servlet 中区分我应该执行哪个操作:createAccount 或 updateAccount?
我想替代方案是为每个操作都有一个单独的 servlet...
谢谢
最佳答案
我不太确定最佳实践,但我有一些可能有效的建议:
如果您的表单是使用提交按钮提交的,您可以根据
参数的值来区分请求。因此,如果您的按钮具有值 Update
和Create
且名为account-submit
,请检查使用request 获得的值。 getParameter('account-submit')
,您可以知道单击了哪个按钮来生成此请求。如果您以不同的方式命名它们,您也可以只检查两个参数中哪一个不为空,然后您就知道您正在处理哪个表单提交。请注意,如果表单中只有一个文本字段,并且用户按
Enter
而不是单击按钮,您将在 servlet 中得到null
!请参阅my blog post about this behaviour.检查
Referer
header - 我真的不建议这样做,因为您并不总是知道已部署应用程序的上下文,该值可能并不总是存在,也可能是很容易被欺骗。为您的 servlet 添加另一个映射,以便可以在 http://myapp.example.com/context/create 上访问它。和 http://myapp.example.com/context/update 。然后,您可以检查
ServletPath
(request.getServletPath()
) 以查看请求来自哪个“servlet”。我可能会选择这个,因为它对我来说似乎是最强大的,但您可能还想添加其他两项检查来确保。在您的web.xml
中,您需要类似
<servlet> <servlet-name>CreateUpdateServlet</servlet-name> <servlet-class>my.package.CustomerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CreateUpdateServlet</servlet-name> <url-pattern>/create</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>CreateUpdateServlet</servlet-name> <url-pattern>/update</url-pattern> </servlet-mapping>
关于java - 使用 servlet 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084950/