簡體   English   中英

Jquery和servlet與ajax的通信

[英]Jquery and servlet communication with ajax

我想在tomcat中建立Jquery函數和servlet之間的通信。

Servlet代碼:

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



public class Test extends HttpServlet {
public static String getBody(HttpServletRequest request) throws IOException {

    String body = null;
    StringBuilder stringBuilder = new StringBuilder();
    BufferedReader bufferedReader = null;

    try {
        InputStream inputStream = request.getInputStream();
        if (inputStream != null) {
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            char[] charBuffer = new char[128];
            int bytesRead = -1;
            while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
                stringBuilder.append(charBuffer, 0, bytesRead);
            }
        } else {
            stringBuilder.append("");
        }
    } catch (IOException ex) {
        throw ex;
    } finally {
        if (bufferedReader != null) {
            try {
                bufferedReader.close();
            } catch (IOException ex) {
                throw ex;
            }
        }
    }
    body = stringBuilder.toString();
    return body;
}
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        System.out.println(getBody(request));
        out.println("Success Call Ajax POST");

      }
    public void doGet( HttpServletRequest request, HttpServletResponse
        response ) throws ServletException, IOException{
    response.setContentType("text/html");
    response.setCharacterEncoding( "UTF-8" );
    PrintWriter out = response.getWriter();
    out.println("Get Method");

  }

}

servlet標識在web.xml中定義

web.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
  <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>com.servlets.Test</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/toto</url-pattern>
  </servlet-mapping>
</web-app>

以下HTML包含JQuery函數:

Jquery代碼:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript">
    function login(){  

      $.ajax({  
        type: "POST",  
        url: "http://localhost:8080/test/toto",  
        data: "POST Call",
        success: function(result){  
          alert("success call"+result);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) { 
            alert("Status: " + textStatus); alert("Error: " + errorThrown); 
        }                 
      });  
    }        
    </script>
    <title>My AJAX</title>
</head>
<body>
    <button type="button" onclick="login()">Click Me!</button>
</body>

我用瀏覽器測試了servlet,沒關系。 當我嘗試使用HTML / js應用程序並單擊按鈕時,我在eclipse控制台中顯示了指令System.out.println(getBody(request))顯示的消息; “POST Call”但我在瀏覽器中收到了錯誤警報。 所以ajax函數成功調用了servlet中的方法post,但servlet無法成功返回對瀏覽器的響應。 似乎servlet中存在問題。 有人能幫助我嗎?

doPost()嘗試添加請求標頭:

response.setContentType("text/html"); 
response.setHeader("Access-Control-Allow-Origin", "*"); 

我確信這與此處描述的Allow Origin問題有關

它是瀏覽器特定的。

它在Safari 8.0.3上工作正常,它會拋出錯誤在Chrome和Firefox上No 'Access-Control-Allow-Origin' header is present

在Firefox中查看控制台:

跨源請求已阻止:同源策略禁止在http:// localhost:8080 / toto讀取遠程資源。 這可以通過將資源移動到同一域或啟用CORS來解決。

可以通過在瀏覽器中禁用web security或已經提到過來修復它:

response.setHeader("Access-Control-Allow-Origin", your_domain);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM