2011-08-12 8 views
3

request.getParameter("pg")がnullを返しているという奇妙な問題が発生していますが、URLに他のパラメータが渡されていることがわかります。この1つのパラメータ以外は、他のすべてのパラメータが正しく印刷されています。何がうまくいかないでしょうか?値が渡されたときにHttpServletのgetParameter( "param")がnullを返す

Map<String,String[]> paramMap = (Map<String,String[]>)request.getParameterMap(); 
     for (Map.Entry<String, String[]> paramPair : paramMap.entrySet()) { 
      LOGGER.info("key - " + paramPair.getKey() + " value =" + paramPair.getValue()[0]); 
     } 

サンプルURL - パラメータが存在しない場合のServletRequest、のgetParameter(String)のJava EE 6 APIパー

http://myserver?searchfor=History+of+Photography&cb=XQ&n=77de88ca&ptnrS=XQyyyyyyYYus&qid=812753692c6536fb529f5ca7ac5aca9b&action=pick&ss=sub&pn=1&st=hp&ptb=447E5AED-F162-40B4-9EE5-A81299D0223D&plp=1&pg=PRshop&redirect=mPWsrdz9heamc8iHEhldEeSc%2FVOw6SzSGaNI5V3YDA%2F2aJhytHNs8w96Bn6LLIZVUIhPwV62vOCzTXhqJvTnW5g66rsz%2FnxYxdLMAYgDRrDL0jeKlXJQ1pFUFFVXHSrvxvGE971vUn5%2F0m7v9vrFJGEoo6nckfQS9o9CGCHUWndDqD0rhA8TW%2Bfa%2Fpxz8JafQQ3ID%2Fsw6GdCvt65%2FomhgEvEX4xv%2B8XQkfNLNvl6%2BpZdZJshoyUfDw5LZBwzFpw52x0Em9ZDVu1sHm4WxLPt9rDUBHj5Wn0eVf5HNoVYGyCa%2FfufPwfQy8OYiLdgvskMPxUTd3YQOJiiO%2F%2ByMdF4Ew%3D%3D&hlc=YWotbWVnYXx4cS1ocA..&pr=PR&ct=GG&tpr=sbt&tp=top 
+0

私たちのコードを表示してください。 –

+0

問題の原因となっているコードとそれを送信しているURLを追加しておくと役立ちます。 – Kal

+0

httpリクエストを行うコードを表示してください。 –

答えて

4

nullを返します。 nullを取得している場合、パラメータは存在しません。

また、含まれているURLの例では、このエラーが示されていません。ここで

は、私がテストに使用するコードです:


public final class BlueServlet extends HttpServlet 
{ 
    private static final long serialVersionUID = 6055351295950796407L; 

    private static final Logger logger = LoggerFactory.getLogger(BlueServlet.class); 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
    { 
     doPost(request, response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
    { 
     PrintWriter responseWriter; 
     @SuppressWarnings("unchecked") 
     Map<String, String[]> parameterMap = request.getParameterMap(); 

     if ((parameterMap != null) && !parameterMap.isEmpty()) 
     { 
      Map.Entry<String, String[]> entry; 
      int index; 
      Iterator<Map.Entry<String, String[]>> iterator = parameterMap.entrySet().iterator(); 
      StrBuilder valueBuffer = new StrBuilder(); 
      String[] values; 

      while (iterator.hasNext()) 
      { 
       entry = iterator.next(); 
       values = entry.getValue(); 

       valueBuffer.setLength(0); 

       if (values != null) 
       { 
        for (index = 0; index < values.length; ++index) 
        { 
         valueBuffer.appendSeparator(", "); 
         valueBuffer.append(values[index]); 
        } 
       } 
       else 
       { 
        valueBuffer.append("[none]"); 
       } 

       logger.info("Key: {}; Value(s): {}", entry.getKey(), valueBuffer); 
      } 
     } 
     else 
     { 
      logger.info("parameterMap is empty."); 
     } 

     responseWriter = response.getWriter(); 
     responseWriter.println("<html><head><title>Blue</title></head><body>"); 
     responseWriter.println("<h1>Blue</h1></body>"); 
    } 
+0

ありがとうございます。私はそれが理にかなっていないことを知っているし、もし自分がそれを見たことがないなら、私はそれを信じていないでしょう。私は依然としてrequest.getParameter( "pg")がnullを返すのを見ていますが、request.getQueryString()はpg paramの値を含む文字列全体を返しています。私はJDK 5とtomcatバージョン5.5.12を使用しています。 – Shamik

+0

@Shamik(例えばロギングの目的で)パラメータマップを反復処理し、iterator removeを使用していますか? – PSIXO

関連する問題