Form表单的三种提交和http请求的三种传参方式,以及Servlet里的取取参方式

  • 多表单多用于文件上传,因为 toacat的实现机制,涉及到了将参数数据临时存储到磁盘上,取的时候只能取字节流

  • get和post虽然在http请求里带参的位置不同

  • 但是javaSE里对于

    HttpServletRequest这个对象定义,这两种传参的取参方式相同
  • 假设有一个表单,用户输入了用户名kimi和年龄25,提交GET请求后,URL会变成:

    http://example.com/FormSubmitServlet?username=kimi&age=25
  • 特点

    • 参数直接显示在URL中,因此不适合传输敏感信息(如密码)。

    • 参数长度有限制,通常不超过2KB。

    • 可以通过浏览器地址栏直接访问或分享。

2. POST 请求

  • 参数位置POST请求的参数会放在HTTP请求的正文中(Body)。

  • 格式:常见的格式是application/x-www-form-urlencoded,参数也是以key=value的形式发送,但它们不会显示在URL中。

  • 示例: 假设用户在表单中输入了用户名kimi和年龄25,提交POST请求后,请求正文会包含:

    username=kimi&age=25

    而URL仍然是:

    http://example.com/FormSubmitServlet
  • 特点

    • 参数不会显示在URL中,适合传输敏感信息。

    • 参数长度没有限制,可以传输大量数据。

    • 不会直接暴露在浏览器地址栏中,更安全。

HttpServletRequest中获取参数

无论是GET请求还是POST请求,都可以通过HttpServletRequestgetParameter()方法获取参数值。getParameter()方法会根据请求类型自动从URL或请求体中提取参数。

示例代码

java复制

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获取GET请求中的参数
    String username = request.getParameter("username");
    String age = request.getParameter("age");
    System.out.println("GET请求 - 用户名: " + username + ", 年龄: " + age);

    // 响应
    response.setContentType("text/html");
    response.getWriter().println("

这是GET请求

"); response.getWriter().println("

用户名: " + username + "

"); response.getWriter().println("

年龄: " + age + "

"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取POST请求中的参数 String username = request.getParameter("username"); String age = request.getParameter("age"); System.out.println("POST请求 - 用户名: " + username + ", 年龄: " + age); // 响应 response.setContentType("text/html"); response.getWriter().println("

这是POST请求

"); response.getWriter().println("

用户名: " + username + "

"); response.getWriter().println("

年龄: " + age + "

"); }

总结

  • GET请求:参数在URL中,适合无敏感信息的小量数据传输。

  • POST请求:参数在请求体中,适合传输大量数据或敏感信息。

  • HttpServletRequest中,可以通过getParameter()方法统一获取参数,无需关心请求类型。

你可能感兴趣的:(http,servlet,网络协议)