如何从java servlet获取param值

时间:2014-04-22 06:31:15

标签: java servlets url-parameters

我试图将param值传递给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,我的输出如下:

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");

4 个答案:

答案 0 :(得分:2)

如果您查看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();
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

尝试这样的事情。

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

或直接来自请求。

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

答案 3 :(得分:1)

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

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

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

或者您可以这样使用:

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