2015-05-18 3 views
4

Я хочу установить связь между функцией JQuery и сервлетом в tomcat.Связь JQuery и сервлетов с ajax

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

    } 

} 

Идентичность сервлета определяется в 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> 

Я проверил сервлет с браузером, это нормально. Когда я попробовал приложение HTML/js, и я нажал кнопку, я получил в консоли eclipse сообщение, отображаемое командой System.out.println (getBody (запрос)); «POST Call», но я получил в браузере предупреждение об ошибке. Таким образом, функция ajax успешно успешно отправляет сообщение метода в сервлет, но сервлет не может вернуть ответ в браузер. Кажется, что в сервлете проблема. Может кто-то мне помочь, пожалуйста?

+0

ответ пожалуйста !!! –

+0

Если он показывает «POST Call», могут возникнуть проблемы в 'data:« POST Call »,' in ajax. Также проверьте вкладку сети для ответа и заголовка, если вы используете браузер Chrome. – Arun

+0

Я пробовал с firefox и chrome, и я получил то же предупреждение об ошибке. Но в chrome я получил также это сообщение об ошибке, когда я нажимаю кнопку: . XMLHttpRequest не может загрузить http: // localhost: 8080/test/toto. В запрошенном ресурсе нет заголовка «Access-Control-Allow-Origin». Поэтому исходный 'null' не допускается. –

ответ

2

В doPost() попробуйте добавить заголовок запроса:

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

Я уверен, что это имеет отношение к Разрешать проблемы происхождения описаны here

0

Это конкретный браузер.

Его работы отлично работают на Safari 8.0.3, он выдает ошибку No 'Access-Control-Allow-Origin' header is present в Chrome и Firefox.

Посмотрите на консоли в Firefox:

Cross-Origin Request Заблокировано: The Same Origin Policy Запрещает чтение удаленного ресурса на http://localhost:8080/toto. Это можно устранить, переместив ресурс в тот же домен или включив CORS.

Это может быть исправлено путем отключения web security в браузере или как уже упоминалось:

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

Смежные вопросы