如何在Java HttpServlet中从POST负载获取HTTP表单数据?

7

我试图从一个javax.servlet.http.HttpServletRequest 实例中提取表单数据。根据网上的建议,我尝试了request.getParameter(String paramKey),但是没有成功。 request.getParameterValues()request.getParameterNames()request.getParameterMap()也没有返回任何表单数据。我想要一个包含表单数据的Map或者其他获取它们的方法。


可能是在Java servlet中从POST请求获取请求有效负载的重复内容。 - AB D CHAMP
3个回答

6

在编写代码 request.getParameter() 时,它会按照预期的方式运行。这个东西总是需要写在 servlet 的 doGetPost() 方法中,就像下面提到的那样。请参考以下示例。

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException  {

     String id = req.getParameter("realname");
     String password = req.getParameter("mypassword");
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

    String id = req.getParameter("realname");
    String password = req.getParameter("mypassword");
}

1

需要配置一些内容。

  1. 需要为请求设置"Content-Type: multipart/form-data"
  2. 需要为类设置@MultipartConfig注释
  3. request.getPart("KEY")获取部分;
  4. 读取流

这是我的示例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@WebServlet("/")
@MultipartConfig
public class TestServlet extends HttpServlet {

    private static final long serialVersionUID = 5589752892736045780L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        //get part by key
        Part part = req.getPart("override");
        
        //read the part
        InputStream inputStream = part.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
        }
        System.out.println(sb.toString());
        
        //set it to the response
        resp.setContentType("text/plain");
        resp.getWriter().write(sb.toString());
    }
}

这是Postman请求 在此输入图像描述


0

你需要覆盖几个方法,它们是doPost()doGet()service()

doPost()会在接收到POST请求时执行。

doGet()会在接收到GET请求时执行。

如果你想要一个单一的方法来处理post和get请求,最好使用service()方法。

示例:

 public class TestServlet{

    public void service( HttpServletRequest request, HttpServletResponse response ){

        request.getParameter( "paramterName" ).
    }
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接