Ajax请求Servlet无效
项目建立的是动态的网页项目
Servle是在src中,ajax创建在WebContent中的
这是xml配置:
javascript
Ctrl.JavaScript
javascript
/js
这个是ajax的js文件代码
var req;
var url = "/js?aid=" + aid;
alert(url);
//创建一个XMLHttpRequest对象req
if(window.XMLHttpRequest) {
//IE7, Firefox, Opera支持
req = new XMLHttpRequest();
alert("支持");
}else if(window.ActiveXObject) {
//IE5,IE6支持
req = new ActiveXObject("Microsoft.XMLHTTP");
alert("不支持");
}
//var url = "/js?aid=" + aid;
//req.open("get", "/src/Ctrl/JavaScript.java", true); //发送请求
//req.open("get","JavaScript.java", true); //发送请求
alert(url);
//onreadystatechange属性存有处理服务器响应的函数,有5个取值分别代表不同状态
req.onreadystatechange = callback;
//send函数发送请求
req.send(null);
}
function callback() {
alert("成功进入callback,状态为" + req.readyState );
if(req.readyState == 4 && req.status == 200) {
alert("status为" + req.status );
var check = req.responseText;//得到js处理过后的值
alert(" req.responseText="+check);//验证是否是成功调用了servlet
show (check);
} alert("status为" + req.status );
}
function show(str) {
if(str == "OK") {
var show = "恭喜!!用户名可用!";
System.out.println("***********当前show的值是:" + show + "**********");
alert("用户名可用");
}
else if( str == "NO") {
var show = "对不起,用户名不可用!!请重新输入!";
System.out.println("***********当前show的值是:" + show + "**********");
alert("用户名已存在");
}
}
下面是servlet中的代码:(printf在控制台根本没有显示)
package Ctrl;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import DB.DBBean;
import Entities.Applicant;
/**
* Servlet implementation class JavaScript
*/
@WebServlet("/JavaScript")
public class JavaScript extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public JavaScript() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("*********protected void doGet************");
checkAid(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//doGet(request, response);
checkAid(request, response);
System.out.println("*********protected void doPost************");
}
private void checkAid(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
DBBean db = new DBBean();
String aid = request.getParameter("aid");
System.out.println("***********当前aid的值是:" + aid + "**********");
String count = null;
try {
response.setContentType("text/html");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0); //通过以下几行代码设置浏览器不进行Ajax处理页面的缓存
db.init();
String sql = "SELECT count(aid) FROM applicant where aid=?";
System.out.println(sql);
System.out.println("**********调用javascript的方法checkAid*********");
ResultSet rs = db.executeQuery(sql, aid);//执行sql语句,where子句中aid=ap.getAid()
while (rs.next()) {
count = rs.getString(1);
}
if(count.equals("0")) {
out.write("OK");
}
else {
out.write("NO");
}
} catch (Exception e) {
e.printStackTrace();// 提示出错信息
} finally {
db.close();
}
}
}
url也是改了很多遍,除了打印出alert,servlet里面是都没有任何反应,还劳驾各位大神帮忙看看了!!
------解决思路----------------------
一个是你url的问题,一个是生成JavaScript.class这个字节码文件存放路径问题!
我根据你贴的代码,修改了下,搞了个示例是可以访问的

下面这个字节码文件存放的路径,你看看你原来的是不是这样搞的

示例源码
http://pan.baidu.com/s/1bnaZZP1http://
------解决思路----------------------
你的web.xml中的url 为 /js
但是 你的servlet注解中拦截的url地址为 @WebServlet("/JavaScript")
这样,你的前台请求和后台的处理对应不起来,所以请求到不了后台,servlet就没有反应了
将这两个URL统一一下就好了,或者都改为URL,或者都改为JavaScript