2009-06-17 92 views
9

在ASP中,有request.formrequest.queryString屬性,但是在Java中。好像我們只有一個集合,它可以通過以下方式訪問request.getParamaterMapgetParametersNamesgetParameterValues如何確定參數是否已從Java「發佈」或「創建」?

是否有某種方式來告訴其價值已張貼的,哪些是在URL中指定?


PS:

我試圖做到的,是做一個網頁,可以處理以下情況

  • 閱讀從查詢字符串傳來的變量(獲得)
  • 閱讀具有特定名稱的單個帖子(例如「xml」)。
  • 如果該帖子丟失,請閱讀全文(使用 request.getReader())。

我使用Tomcat 6

據我到目前爲止看到的,如果我發出了一個request.getReader(),公佈值不再出現在getParamater集合中,但是查詢字符串參數仍然存在。

另一方面,如果我發出任何getParameters方法,getReader返回空字符串。

好像我不能吃蛋糕,也吃它。

所以,我猜解是folowwing:

  • 閱讀體getReader
  • 若見XML後有(負面,我必須手動解析身體。
  • 如果是,得到HTTP消息體,擺脫了「XML =」部分。
  • 如果不是,那麼,就得到身體
  • 通過request.getParameter

閱讀查詢字符串參數的任何更好的主意

  • PS:?是否有人知道如何解析身體使用 使用相同的方法HttpServlet
  • PS:Here是一個解碼ASP功能。我應該重寫它在 Java?
  • PS:另外found(沒有一臺機器,現在對其進行測試)

只是爲了澄清的事情。這個問題似乎是與getParameter你能張貼值以及與URL傳遞的值,請看下面的例子:

<%@page import="java.util.*"%> 
<% 
    Integer i; 
    String name; 
    String [] values; 

    for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) { 

    name = (String) e.nextElement(); 
    values = request.getParameterValues(name); 

    for (i=0; i < values.length; i ++) { 
     out.println(name + ":" + values[i] + "<br/>"); 
    } 
    } 
%> 

<html> 
<head><title>param test</title> 
</head> 
<body> 
    <form method="post" action="http://localhost:8080/jsp_debug/param_test.jsp?data=from_get"> 
    <input type="text" name="data" value="from_post"> 
    <input type="submit" value="ok"> 
    </form> 
</body> 
</html> 

這段代碼的輸出是

data:from_get 
data:from_post 

... 

好像爲了找到哪個參數來自哪裏,我必須檢查request.getQueryString

+0

什麼服務器您使用的?太陽HttpServer? – gubby 2009-06-17 22:37:14

+0

您應該獲取整個URL並反序列化參數。如果你想要的參數在那裏,那就是一個GET。如果它不存在但存在,那麼它是一個POST參數。 – PSyLoCKe 2017-04-10 15:46:19

回答

5

沒有直接的辦法。 非直接 - 檢查.getQueryString()

1

你爲什麼不與檢查查詢字符串參數開始,如果你看到沒有,asume後,然後挖出表單變量?

+0

querystrings參數是沒有問題的,我asume我會allways有他們周圍...問題是一旦我問題getReader,getParamters不再返回張貼值...我希望避免解析帖子自己... – opensas 2009-06-18 00:17:50

2

如果你正在寫一個servlet,您可以通過的doGet的doPost方法是否被調用作出這樣的區分。

public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException{ 

//Set a variable or invoke the GET specific logic 
    handleRequest(request, response); 

} 

public void doPost(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException{ 

//Set a variable or invoke the POST specific logic 
handleRequest(request, response); 

} 


public void handleRequest(HttpServletRequest request, 
        HttpServletResponse response) 
     throws ServletException{ 

//Do stuff with the request 

} 
+1

你可以有一個帖子獲取信息,看到我的評論馬特b – opensas 2009-06-18 03:20:05

22

HttpServletRequest.getMethod()

返回與此請求被製成,例如,GET,POST,PUT或HTTP方法的名稱。與CGI變量REQUEST_METHOD的值相同。

所有你需要做的是這樣的:

boolean isPost = "POST".equals(request.getMethod()); 

而且我對你爲什麼不直接使用request.getParameter("somename")檢索發送請求參數值真的很困惑。此方法returns the parameter regardless of whether the request was sent via a GET or a POST

請求參數是與請求一起發送的額外信息。對於HTTP Servlet,參數包含在查詢字符串或發佈的表單數據中。

這比你試圖自己解析getQueryString()簡單得多。

相關問題