我想在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中:
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">
Test
com.servlets.Test
Test
/toto
以下HTML包含JQuery函数:
Jquery代码:
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);
}
});
}
My AJAXClick Me!
我用浏览器测试了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", "*");
我确信这与描述here的Allow Origin问题有关
标签:jquery,java,javascript,ajax,servlets
来源: https://codeday.me/bug/20190702/1360061.html