需要一些基本的建议 Java WebApplication/Servlet

Advice needed on some basic Java WebApplication/Servlet

我正在学习如何使用 Servlet 构建 Java Web 应用程序。 到目前为止,我建立了一个带有 Tomcat 服务器的 Maven 项目,并制作了一个包含一些表单和 运行ning 的基本应用程序。但我有一些基本问题:

  1. JavaServlet 包的 doGet 和 doPost 方法有什么区别?我理解请求和响应之间的区别,我理解 HTML GET 和 POST,但是由于应用程序是从服务器端运行的,所以我很困惑。

  2. 在下面的示例中,为什么我需要调用 doGet 方法的 doPost 方法(来自我使用的教程)

  3. 当我 运行 服务器并在浏览器中打开它时,我可以使用按钮提交表单(见下文)。该按钮将我重定向到 /displayuserservlet,它显示我提供的名字和姓氏。如果我随后手动调用 /displayuserservlet,则显示的名字和姓氏等于“null”。那么为什么信息没有存储在服务器上(?),我该怎么做(如果我不想存储,例如 filepath/filename 供以后使用)。

我的“网站”/index.xml`表单片段:

<form action="/displayuserservlet" method="post">
   <center>
      First name:
      <input type="text" name="firstName" value="John">
      <br>
      Last name:
      <input type="text" name="lastName" value="Doe">
      <input type="submit"><!-- Press this to submit form -->
   </center>
</form>

我的 Servlet:

@WebServlet("/displayuserservlet")
public class DisplayUserServlet extends HttpServlet {

    //REQ is anything that comes FROM the browser
    //RES is anything sent TO the browser
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        res.setContentType("text/html");
        PrintWriter pw = res.getWriter();//get the stream to write the data
        String title = "Results of form";
        String firstName = req.getParameter("firstName");
        String lastName = req.getParameter("lastName");

        //writing html in the stream
        pw.println(ServletUtilities.headWithTitle(title) +
                "<body bgcolor=\"#fdf5e6\">\n" +
                "<h1>" + title + "</h1>\n" +
                "<p>First name:" + firstName + "</p>\n" +
                "<p>First name:" + lastName + "</p>\n" +
                "</body></html>");

        pw.close();//closing the stream
    }

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        doGet(req, res);
    }
}

已编辑:代码格式

doGet()doPost() 被调用以响应客户端发出的 GET 和 POST 请求。如果您想处理 GET 和 POST 请求,但又想以完全相同的方式处理它们,您可以让 doGet() 调用 doPost(),或者 反之亦然 就像你的例子一样。或者,如果您想以不同方式处理这些请求类型,则可以以不同方式实现它们。还有用于其他请求类型的方法——doPut() 用于 PUT 请求,等等。

方法Request.getParameter() return请求参数的值,即客户端在其请求中传递的值。如果客户端不提供值,则此方法 return null。服务器上没有存储任何内容——如果您想存储数据,您可以自己存储。您可以将其暂时存储在 Session 对象中,或者更永久地存储在数据库或其他存储系统中。

有很多关于 Java 网络编程的好书。试图通过查看 'hello, world' 示例来弄清楚所有位如何组合在一起可能不是处理这个非常复杂的主题的最佳方法。

JavaServlet包的doGet和doPost方法有什么区别?我理解请求和响应之间的区别,我理解 HTML GET 和 POST,但是由于应用程序是从服务器端运行的,所以我很困惑。

在 doGet 方法中,参数附加到 URL 并与 header 信息一起发送。在 doPost 中,参数在 body 中以单独的行发送。 ... doGet() 方法一般用于查询或从服务器获取一些信息。 doPost()一般用于更新或post一些信息到服务器

例如,一个 doGet() URL 看起来像这样:

www.yourwebsite.com/servleturl?parameter1=smething&parameter2=smthingelse

A doPost() URL 但是,不显示 URL 中的参数,因此它只是:

www.yourwebsite.com/servleturl

您应该始终使用 doPost 获取敏感信息,例如登录或付款表格。

在下面的示例中,为什么我需要调用 doGet 方法的 doPost 方法(来自我使用的教程)

这叫做POST-REDIRECT-GET。这基本上是一个功能,可以防止每次重新加载页面时出现恼人的 'Confirm Form Resubmission' 消息,并防止用户通过重新加载意外执行两次操作。

很难解释,但是维基百科summarizes it very well

当我 运行 服务器并在浏览器中打开它时,我可以使用按钮提交表单(见下文)。该按钮将我重定向到 /displayuserservlet,它显示我提供的名字和姓氏。如果我随后手动调用 /displayuserservlet,则显示的名字和姓氏等于“null”。那么为什么信息没有存储在服务器上(?),我该怎么做(如果我不想存储,例如 filepath/filename 供以后使用)。

当您手动调用/displayuserservlet 时,它正在调用doGet 方法。除非你在URL中手动添加参数(例如:显示李四的/displayuserservlet?firstName=John&lastName=Doe),否则请求属性将全部为null。你的程序工作正常,但它没有打印任何东西,因为你从未提交参数。