Servlet getParameter() 对于表单数据返回 null [重复]

问题描述 投票:0回答:2

我正在向我的

POST
Tomcat 8.0 Servlet 3.1 Web 应用程序发送
localhost
请求,但
request.getParameter("")
返回我
null

这就是我提出要求的方式。

我正在使用 PostMan 来执行我的

POST
请求。在 java 方面,我调用
request.getParameter("code")
,这给了我
null
qwe
字段也是如此。我没有使用任何框架。它是原始 servlet。这只是一个后端,所以一切都是关于处理数据和响应客户端。

如果我使用

"x-www-form-urlencoded"
,我可以通过
getParameter()
调用检索参数,但我仍然想知道为什么我无法获取
form-data

谢谢。

java servlets http-post tomcat8 getparameter
2个回答
1
投票

感谢@cjstehno

当他说

"form-data"
实际上是一个多部分数据时,我尝试将其读取为多部分数据,但要记住
isFormField()
方法来区分文件和参数。因此,从原始 servlet 中,人们可以通过下面的代码读取
form-data
。从性能角度来看,我很确定这可能会得到改善。

try {
     ServletFileUpload upload = new ServletFileUpload();
     FileItemIterator iter = upload.getItemIterator(request);

     while (iter.hasNext()) {
          FileItemStream item = iter.next();
          String name = item.getFieldName();

          if (item.isFormField()) {
               String value = Streams.asString(item.openStream());
          }
     }          
 } catch (Exception ex) {}

0
投票

如果您正在开发登录页面并使用 JavaScript 文件获取值

public class LoginCredentials extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain"); // Set content type to plain text or application/json as needed

        try {
            // Check if the request is multipart/form-data
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            
            if (isMultipart) {
                // Create a new ServletFileUpload instance
                ServletFileUpload upload = new ServletFileUpload();
                // Parse the request to get the list of FileItemStream objects
                FileItemIterator iter = upload.getItemIterator(request);

                // Iterate over the items
                while (iter.hasNext()) {
                    FileItemStream item = iter.next();
                    String fieldName = item.getFieldName();
                    InputStream inputStream = item.openStream();

                    if (item.isFormField()) {
                        // This is a regular form field
                        String value = IOUtils.toString(inputStream, "UTF-8");
                        
                        if ("user".equals(fieldName)) {
                            // Assuming 'user' is the name attribute of the username input field
                            String username = value;
                            System.out.println("Username: " + username);
                        } else if ("pwd".equals(fieldName)) {
                            // Assuming 'pwd' is the name attribute of the password input field
                            String password = value;
                            System.out.println("Password: " + password);
                        }
                    }
                }

                // Here you can add your authentication logic based on username and password
                // For demonstration purposes, let's just send a success message back
                response.getWriter().write("Login successful");
            } else {
                response.getWriter().write("Multipart form data expected");
            }
        } catch (Exception e) {
            e.printStackTrace();
            response.getWriter().write("Error occurred while processing login");
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.