有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在学习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) 个答案

  1. # 1 楼答案

    JSPServlet,只是以不同的源代码形式,没有理由POST到不同的Servlet,您可以POST回到同一个JSP

  2. # 2 楼答案

    您不需要servlet。JSP(或Facelet)可以通过EL直接与bean对话

  3. # 3 楼答案

    我并不确定这方面的最佳做法,但我有一些建议可能会奏效:

    1. 如果使用提交按钮提交表单,您可以根据<;按钮名称>;参数因此,如果您的按钮具有值UpdateCreate,并被命名为account-submit,那么通过检查request.getParameter('account-submit')得到的值,您就可以知道单击哪个按钮生成了这个请求。如果以不同的方式命名,还可以检查这两个参数中的哪一个不为null,从而知道正在处理哪个表单提交

      请注意,如果表单中只有一个文本字段,并且用户点击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中,你会想要

        <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>