繁体   English   中英

如何从Java Servlet获取参数值

[英]How to get param value from java servlet

我正在尝试将参数值传递给Java Servlet,但返回的字符串不正确。 我将值存储在Map中,并检查键是否存在。

Map params;
params = request.getParameterMap();

String id = params.get("id").toString();
String data = params.get("data").toString();

System.out.println("streaming" + data + " with id of " + id);

但是,如果我通过http://localhost:8080/Serv/stream/data?data=hereisdata&id=you调用此servlet, http://localhost:8080/Serv/stream/data?data=hereisdata&id=you输出将如下所示:

streaming[Ljava.lang.String;@5e2091d3 with id of [Ljava.lang.String;@36314ab8

我想念什么?

编辑:由于建议的答案不起作用,我包括整个班级,因为我很可能在班级内弄乱了一些东西:

import java.util.*;
import javax.servlet.http.HttpServletRequest;
import Engine.Streamer;


public class AnalyzerController {

    private Map params;
    private String pathInfo;
    private HttpServletRequest request;

    public AnalyzerController(HttpServletRequest request)
    {
        this.params = request.getParameterMap();
        this.pathInfo = request.getPathInfo();
    }

    public void processRequest()
    {
        System.out.println("procing with " + pathInfo);

        switch(pathInfo){
        case "/stream/data":
            if(params.containsKey("id") && params.containsKey("data")) processStream();
            break;
        }
    }

    private void processStream()
    {
        System.out.println("we are told to stream");
        String data = request.getParameter("data");
        String id = request.getParameter("id");
        Streamer stream = new Streamer();   

        stream.streamInput(data, "Analyzer", id);           
    }
}

该行专门抛出NPE: String data = request.getParameter("data");

如果你看的文档Request#getParameterMap()它返回一个Map类型的Map<String, String[]> 因此,您需要从映射返回的值String[]数组中取出第一个元素。

String id = params.get("id")[0];

当然,您可以避免所有这些情况,并使用Request#getParameter()方法直接从请求对象中获取参数。

String id = request.getParameter("id");

编辑:查看您的类代码,似乎实例变量request未初始化。 像这样在构造函数中初始化它:

public AnalyzerController(HttpServletRequest request)
{
    this.request = request; // Initialize your instance variable request which is used in the other methods.
    this.params = request.getParameterMap();
    this.pathInfo = request.getPathInfo();
}

您可以获取所需的参数而不是整个地图

String id = request.getParameter("id");
String data = request.getParameter("data");

尝试这样的事情。

String data = ((String)params.get("data"));

或直接从请求。

String data = request.getParameter("data");

您可以使用请求对象及其方法通过getParameter()获取数据,如果有多个数据来自页面,则可以使用getParameterValues()

String id = request.getParameter("id")
String data = request.getParameter("data")

为什么要使用Map 是否有特殊需要或任何原因?

或者你可以这样使用:

String id = params.get("id")[0];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM