我正在学习EJB3。
我有一个会话bean,它提供创建/更新客户帐户的服务。
此会话bean提供以下行的服务:
public void addCustomer(Customer c);
public void updateCustomer(Customer c);
理想情况下,我想要一个servlet:CustomerServlet,它会调用我上面列出的会话bean。
问题是我有两个JSP:UpdateAccount.jsp和CreateAccount.jsp。这两个JSP都有一个带有方法POST和操作“CustomerServlet”的表单。
如何在客户servlet中区分我应该执行哪些操作:createAccount或updateAccount?
我想替代方法是为每个操作都有一个单独的servlet ...
谢谢
答案 0 :(得分:2)
我不确定这方面的最佳做法,但我有一些可行的建议:
如果您使用提交按钮提交表单,则可以根据< button-name>的值来区分请求。参数。因此,如果您的按钮的值为Update
和Create
且名为account-submit
,则通过检查request.getParameter('account-submit')
获得的值,您就可以知道哪个按钮是单击以生成此请求。如果您以不同方式命名它们,您还可以检查这两个参数中的哪一个不为空,并且您知道要处理的是哪个表单提交。
请注意,如果表单中只有一个文本字段,并且用户点击Enter
而不是点击按钮,那么您的servlet中会出现null
!请参阅my blog post about this behaviour.
检查Referer
标题 - 我不会真的推荐这个,因为您不会总是知道已部署应用的上下文,这个值可能并不总是存在且很容易被欺骗。
为您的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>
答案 1 :(得分:0)
JSP 是 Servlet,只是以不同的源代码形式,没有理由POST
到另一个Servlet,你可以POST
回到同一个JSP
答案 2 :(得分:0)
您不需要servlet。 JSP(或Facelets)可以通过EL直接与bean通信。