我正在尝试使用Ajax和servlet做一个简单的应用程序。但是当我试图执行应用程序时,它无法正常工作。 请仔细阅读代码,让我知道会出现什么问题?
function createRequest()
{
alert("hai createRequest()");
try
{
req=new XMLHttpRequest();
}
catch(trymicrosoft)
{
try
{
req=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(othermicrosoft)
{
try
{
req=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(failed)
{
req=null;
}
}
}
if(req==null)
alert("req==null");
}
function startRequest()
{
alert("hai startRequest()");
createRequest();
alert("hai created Request()");
var username=document.getElementById("user").value;
req.open("get","http://localhost:8080/login/CheckLogin?user="+username,true);
req.onreadystatechange=handleStateChange;
alert("hai returned from handle state change");
req.send(null);
}
function handleStateChange()
{
alert("hai handleStateChange()");
if(req.readyState==4)
{
if(req.status==200)
{
var message=req.responseXML.getElementsByTagName("valid")[0].childNodes[0].nodeValue;
document.getElementById("results").innerHTML=message;
}
else
{
alert("Sorry status failed");
document.getElementById("results").innerHTML="Sorry problem in status";
}
}
else
{
alert("Sorry readyStatus failed");
document.getElementById("results").innerHTML="Sorry problem in readyState";
}
}
以上函数在Javascript和servlet中编写
package com.assignment.login;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class CheckLogin extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
System.out.println("Hai i have entered into servlet");
String userId=request.getParameter("user");
if(userId!=null && !userId.equals("jeya"))
{
response.setContentType("text/xml");
response.getWriter().write("<valid>U can use this id</valid>");
}
else
{
response.setContentType("text/xml");
response.getWriter().write("<valid>U cannot use this id</valid>");
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
doGet(request,response);
}
}
但是在输出中正在打印以下警报,
Hai start request
Hai create request
Hai created request
Hai returned from handle state change
hai handle state change
sorry readyStatus failed
hai handle state change
sorry readyStatus failed
hai handle state change
sorry readyStatus failed
hai handle state change
sorry status failed
我的web.xml,
<web-app>
<servlet>
<servlet-name>CheckLogin</servlet-name>
<servlet-class>com.assignment.login.CheckLogin</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckLogin</servlet-name>
<url-pattern>/CheckLogin</url-pattern>
</servlet-mapping>
在servlet中,我打印了“我已进入servlet”并且它没有在服务器窗口中打印出来..那么问题是什么,请给我解决它的问题...在此先感谢..
编辑: 当我尝试执行上述应用程序时,这是异常的例外..但是类CheckLogin位于正确的位置......但是相同的代码在eclipse中工作。所以请任何人告诉我可能是什么问题??? 请求的资源(/ login / CheckLogin)不可用。
答案 0 :(得分:1)
您使用了错误的网址:
req.open("get","http://localhost:8080/login/CheckLogin?user="+username,true);
我不知道您使用的服务器,但它足以使用CheckLogin:
req.open("get","CheckLogin?user="+username,true);
或 req.open( “获得”, “/登录/ CheckLogin用户=?” +用户名,TRUE);
可能无法访问localhost:8080上的服务器。
答案 1 :(得分:1)
请检查您是否遵循了正确的命名约定,因为我认为代码中没有错误。
答案 2 :(得分:0)
我认为你必须在javascript页面顶部的函数中定义 req 变量。像,
var req;
function yourFunctions(){
.
.
.
.
}
试试。