2017-05-16 64 views
0

我想添加參數並重定向到只接受post方法中的請求的頁面。我在我的servlet中使用了這段代碼,它並沒有將我轉到url。發送重定向到url中的post方法

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    String url = "http://www.thisone.com"; 
    InputStream in = null; 
      try { 
        HttpClient client = new HttpClient(); 
        PostMethod method = new PostMethod(url); 

        //Add any parameter if u want to send it with Post req. 
        method.addParameter("User", "xyz"); 
        method.addParameter("Name", "abc"); 

        int statusCode = client.executeMethod(method); 
        System.out.println(statusCode); 
        if (statusCode != -1) { 
         response.sendRedirect(response.encodeRedirectURL(url)); 
         in = method.getResponseBodyAsStream(); 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
} 

回答

0

我不認爲有可能使用這種方法重定向post方法。你可以做的是獲得對客戶端的響應,因此設置位置標題作爲響應。對於相同的實現下面給出:

一旦條件滿足:

response.setStatus(307); 
response.addHeader("Location", "<url>"); 

還檢查出的307狀態碼的意義。

這裏是JavaScript代碼,其與AJAX請求開始,並觸及servlet來獲取所期望的URL,一旦它接收到該URL,創建一個HTML表格對象,設置值並提交表單...

<script> 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
      callURL(this.responseText); 
     } 
    }; 
    xhttp.open("GET", "TestServlet", true); 
    xhttp.send(); 

    function callURL(url){ 
     var form = document.createElement("form"); 
     form.setAttribute('method', 'POST'); 
     form.setAttribute('action', url); 
     form.setAttribute('id', 'frmProduct'); 
     form.style.display = 'none'; 

     var i = document.createElement('input'); 
     i.setAttribute('type', 'text'); 
     i.setAttribute('name', 'name'); 
     i.setAttribute('value', 'Neeraj'); 
     form.appendChild(i); 
     document.getElementsByTagName('body')[0].appendChild(form); 
     form.submit(); 
    } 
</script> 

下面是我的TestServlet實施

@WebServlet("/TestServlet") 
public class TestServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public TestServlet() { 
     super(); 
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String url = "http://www.thisone.com"; 
     PrintWriter out = response.getWriter(); 
     out.print(url); 
    } 
} 
+0

我如何使用這個 –

+0

讓我澄清的sendRedirect如何運作傳遞參數。一旦你執行了sendRedirect,請求就返回到客戶端,然後瀏覽器中的URL被改變,然後它被重定向。 所以你反正從客戶端重定向。你可以做的是在客戶端獲取URL。使用JavaScript傳遞參數,然後將請求發佈到所需的URL。 如果你想要我寫相同的執行,讓我知道.... –

+0

是你能幫我嗎也.. –