过滤器拦截Ajax请求是,chain.doFiltetr报错误。
经过半天的琢磨,原来是jar包的问题。使用AJAX传送JSON数据,需要导入7个jar包,并且要注意版本的搭配。我就是随便下载版本导致的问题。
PS:AJAX中,当服务器状态就绪后,需要执行的代码要放在if语句块中。如果在JS中定义了一个全局变量var str。在onreadystatechange函数中不能为此变量赋值。str在函数外依然为空。
还有,responseText中文乱码的问题。在Servlet中,需要设置response.setCharacterEncoding(xxx)。总之,Servlet编码、传送的数据的编码和JSP页面的编码要保持一致。
下面贴上JSP页面和Servlet页面的代码。这不是一个完整的项目,这两个代码是正确的,其余的JSP和javabean这里就不贴了。
bookQueryAll.jsp:
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>
<%@ page import="java.util.List,domin.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>图书查询</title>
<style>
h2{
text-align:center;
}
#query{
text-align:center;
}
table{
border-collapse:collapse;
width:600px;
margin:0 auto;
}
td {
border:1px solid black;
}
#thead {
text-align:center;
}
</style>
<script>
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("post","ajaxServlet","true");
xmlhttp.send();
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
console.log("json获取成功");
json = JSON.parse(xmlhttp.responseText);
for(var i in json){
var book = json[i];
var bookId = book.bookId;
var bookName = book.bookName;
var bookCategory = book.bookCategory;
var bookPrice = book.bookPrice;
var bookDescription = book.bookDescription;
var tr = document.createElement("tr");
var td1 = document.createElement("td");
var td2 = document.createElement("td");
var td3 = document.createElement("td");
var td4 = document.createElement("td");
var td5 = document.createElement("td");
console.log(bookName);
tr.appendChild(td1);
tr.appendChild(td2);
tr.appendChild(td3);
tr.appendChild(td4);
tr.appendChild(td5);
td1.innerHTML = bookId;
td2.innerHTML = bookName;
td3.innerHTML = bookCategory;
td4.innerHTML = bookPrice;
td5.innerHTML = bookDescription;
var table = document.getElementById("ajax");
table.appendChild(tr);
}
}else{
console.log("json获取失败");
}
}
</script>
</head>
<body>
<h2>图书查询</h2>
<div id="query">图书ID:<input type="text" name="bookId"/>图书名:<input type="text" name="bookName"/>分类<input type="text" name="bookCategory"/>
<input type="submit" /></div>
<hr>
<table id="ajax">
<tr id="thead">
<td>图书ID</td>
<td>书名</td>
<td>分类</td>
<td>价格</td>
<td>描述</td>
</tr>
<table>
</body>
</html>
AjaxServlet.java:
package servlet;
import domin.*;
import service.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import net.sf.json.JSONArray;
import java.util.List;
@WebServlet(name="ajaxServlet",urlPatterns={"/ajaxServlet"})
public class AjaxServlet extends HttpServlet{
@Override
public void init(ServletConfig config) throws ServletException{
super.init(config);
}
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{
LibServicelmpl libServicelmpl = new LibServicelmpl();
List<Book> books = libServicelmpl.getBooks();
JSONArray jsonArray = JSONArray.fromObject(books);
System.out.println("Ajax service执行");
response.setCharacterEncoding("utf-8");
response.getWriter().write(jsonArray.toString());
}
}