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

标签 java jsp forms servlets ejb-3.0

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

谢谢

最佳答案

我不太确定最佳实践,但我有一些可能有效的建议:

  1. 如果您的表单是使用提交按钮提交的,您可以根据 参数的值来区分请求。因此,如果您的按钮具有值 UpdateCreate 且名为 account-submit,请检查使用 request 获得的值。 getParameter('account-submit'),您可以知道单击了哪个按钮来生成此请求。如果您以不同的方式命名它们,您也可以只检查两个参数中哪一个不为空,然后您就知道您正在处理哪个表单提交。

    请注意,如果表单中只有一个文本字段,并且用户按 Enter 而不是单击按钮,您将在 servlet 中得到 null !请参阅my blog post about this behaviour.

  2. 检查 Referer header - 我真的不建议这样做,因为您并不总是知道已部署应用程序的上下文,该值可能并不总是存在,也可能是很容易被欺骗。

  3. 为您的 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/

相关文章:

java - 从多重选择中设置多个 javabean 属性

CSS 无法在 jsp、tomcat 和 servlet 中正确加载

python - 除了 ManyToMany 之外,是否有允许多种选择的 Django 模型字段?

java - 传递 Supplier<Stream<T>> 参数时 Stream.generate 方法的行为

java - 无法访问句柄事件中的按钮/文本区域

java - 如何获得<? super T> 来自 T

javascript - 为什么我的复选框在点击后会损坏?

java - 使用滑动窗口算法的 CPG Island Finder : String Index Out of Bound Exception intermittently

java - Spring MVC 在重定向到默认(欢迎)页面时传递数据 - 模型消失了

javascript - 如何使用与下拉列表中选择的值不同的值