Java Jquery和servlet与ajax的通信
我想在tomcat中的Jquery函数和servlet之间建立通信 Servlet代码:Java Jquery和servlet与ajax的通信,java,javascript,jquery,ajax,servlets,Java,Javascript,Jquery,Ajax,Servlets,我想在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.ServletExcept
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");
}
}
<?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>
<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标识在web.xml中定义
web.xml:
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");
}
}
<?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>
<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>
试验
com.servlets.Test
试验
/托托
以下HTML包含JQuery函数:
Jquery代码:
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");
}
}
<?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>
<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>
函数login(){
$.ajax({
类型:“POST”,
url:“http://localhost:8080/test/toto",
数据:“通话后”,
成功:函数(结果){
警报(“成功呼叫”+结果);
},
错误:函数(XMLHttpRequest、textStatus、ErrorSprown){
警报(“状态:+textStatus”);警报(“错误:+ERRORSHORN”);
}
});
}
我的阿贾克斯
点击我!
我用浏览器测试了servlet,没问题。当我尝试HTML/js应用程序并点击eclipse控制台中的按钮时,指示系统.out.println(getBody(request))显示的消息;“POST Call”但我在浏览器中收到了错误警报。因此,ajax函数成功地调用了servlet中的方法post,但servlet无法成功地将响应返回给浏览器。似乎servlet中存在问题。有人能帮我吗?在doPost()中尝试添加请求标题:
response.setContentType("text/html");
response.setHeader("Access-Control-Allow-Origin", "*");
我确信这与所描述的允许原点问题有关,它是特定于浏览器的
它在Safari 8.0.3上运行良好,在Chrome和Firefox上抛出错误没有“Access Control Allow Origin”标题
查看Firefox中的控制台:
已阻止跨源请求:同一源策略不允许读取位于的远程资源。这可以通过将资源移动到同一域或启用CORS来解决
可以通过在浏览器中禁用web安全性
或如前所述进行修复:
response.setHeader(“访问控制允许来源”,您的_域)代码>如果显示“POST Call”,则ajax中的数据“POST Call”中可能存在问题。。如果您使用的是chrome浏览器,也可以查看网络选项卡上的响应和标题。我尝试了firefox和chrome,但收到了相同的错误警报。但在chrome中,当我点击按钮时,我也收到了这个错误消息:XMLHttpRequest无法加载。请求的资源上不存在“Access Control Allow Origin”标头。因此不允许访问源“null”。是否使用iframe加载servlet?\n否我不在doPost()中使用iframe加载,请尝试添加请求头:response.setContentType(“text/html”);response.setHeader(“访问控制允许原点“,“*”)代码>这有什么区别吗?