什么是使用servlet的正确方法?

时间:2011-02-22 22:45:51

标签: java jsp forms servlets ejb-3.0

我正在学习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 ...

谢谢

3 个答案:

答案 0 :(得分:2)

我不确定这方面的最佳做法,但我有一些可行的建议:

  1. 如果您使用提交按钮提交表单,则可以根据< button-name>的值来区分请求。参数。因此,如果您的按钮的值为UpdateCreate且名为account-submit,则通过检查request.getParameter('account-submit')获得的值,您就可以知道哪个按钮是单击以生成此请求。如果您以不同方式命名它们,您还可以检查这两个参数中的哪一个不为空,并且您知道要处理的是哪个表单提交。

    请注意,如果表单中只有一个文本字段,并且用户点击Enter而不是点击按钮,那么您的servlet中会出现null!请参阅my blog post about this behaviour.

  2. 检查Referer标题 - 我不会真的推荐这个,因为您不会总是知道已部署应用的上下文,这个值可能并不总是存在且很容易被欺骗。

  3. 为您的servlet添加另一个映射,以便http://myapp.example.com/context/createhttp://myapp.example.com/context/update都可以访问它。然后,您可以检查ServletPathrequest.getServletPath())以查看请求的'servlet'。我可能会选择这个,因为它对我来说似乎最强大,但你可能还想添加其他两个检查以确保。在web.xml中,您需要类似

  4. 的内容
        <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通信。