Javascript AJAX,send()似乎是无意中重定向的

Javascript AJAX,send()似乎是无意中重定向的,javascript,ajax,jsp,servlets,Javascript,Ajax,Jsp,Servlets,我使用AJAX异步填充列表。加载web页面后,立即触发填写列表框的AJAX请求。但当我将此请求发送到服务器时,将返回一个非预期的网页(列表框位于该网页上),而不是列表数据(JSON) [组件] haveList.jsp=有一个列表框。它包括标签。 loadData.js=它生成ajax请求并将其发送到服务器。加载haveList.jsp后,将立即调用loadData.js。(我只是在检查使用警报从服务器获取正确数据的请求。) returnPage.java=转发到haveList.jsp的Ser

我使用AJAX异步填充列表。加载web页面后,立即触发填写列表框的AJAX请求。但当我将此请求发送到服务器时,将返回一个非预期的网页(列表框位于该网页上),而不是列表数据(JSON)

[组件]
haveList.jsp=有一个列表框。它包括
标签。
loadData.js=它生成ajax请求并将其发送到服务器。加载
haveList.jsp
后,将立即调用
loadData.js
。(我只是在检查使用警报从服务器获取正确数据的请求。) returnPage.java=转发到
haveList.jsp的Servlet

returnJsonData.java=返回
loadData.js
请求的json字符串的Servlet。
每一个都显示在下面

[web.xml]

<servlet>
<servlet-name>ReturnPage</servlet-name>
<servlet-class>pkg.ReturnPage</servlet-class>    
</servlet>
<servlet-mapping>
<servlet-name>ReturnPage</servlet-name>
<url-pattern>/openHaveList.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DataManager</servlet-name>
<servlet-class>pkg.ReturnJsonData</servlet-class>    
</servlet>
<servlet-mapping>
<servlet-name>DataManager</servlet-name>
<url-pattern>/requestListData.do</url-pattern>
</servlet-mapping>
( function () {
var conn=null, addEvent=null, createXHR=null, loadNations = null, setAsyncLoad=null; 
addEvent = (function(window){
if(window.addEventListener){
   return function (element, eventName, callback, canCapture) {
     element.addEventListener(eventName, callback, canCapture);
 };
  } else if(window.attachEvent){
 return function (element, eventName, callback) {
 element.attachEvent("on" + eventName, callback);
 };
} else {
return function (element, eventName, callback) {
   element["on" + eventName] = callback;
  }
 }
 }(window));
 createXHR = function () {
 var xhrObj = null;
   try{
   xhrObj = new XMLHttpRequest();
  } catch (exception){
    try{
   xhrObj = new ActiveXObject('Msxml2.XMLHTTP');
 } catch (innerException){
  xhrObj = new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
 return xhrObj;
 }; 
  loadAsync = function () {
 var list = document.getElementById("list");   
  conn = createXHR();
  conn.onreadystatechange = function () {
  if(conn.readyState == 4){
     if(conn.status == 200){
        alert(conn.responseText);  //--> Here it shows the html of haveList.jsp
     }
  }
};
conn.open('GET', 'requestListData.do');  
 conn.send();  
 };
 addEvent(window, 'load', function () { loadAsync(); } , false); 
} () ); 
public class ReturnPage extends HttpServlet {
private static String page = "/haveList.jsp";
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 1L);
dispatcher.forward(request, response); 
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 1L);  
dispatcher.forward(request, response); 
}
}
public class ReturnJsonData extends HttpServlet {
private String command = null; 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
strUri = request.getRequestURI();
command = strUri.substring(request.getContextPath().length());
try {
    response.setHeader("Pragma", "No-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.addHeader("Cache-Control", "no-store");
    response.setDateHeader("Expires", 1L);
    response.setContentType("application/json; charset=UTF-8" );
    response.getWriter().print( loadListData(request, command) );
} catch (Throwable e) {
  System.out.println("Failed to load list");
} 
}  
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
strUri = request.getRequestURI();
command = strUri.substring(request.getContextPath().length()); 
try {
   response.setHeader("Pragma", "No-cache");
   response.setHeader("Cache-Control", "no-cache");
   response.addHeader("Cache-Control", "no-store");
   response.setDateHeader("Expires", 1L);
   response.setContentType("application/json; charset=UTF-8" );
   response.getWriter().print( loadListData(request, command) );
 } catch (Throwable e) {
   System.out.println("Failed to load list");
 }  
 } 
private String loadListData(HttpServletRequest request, String command) throws Throwable 
{
String codeList = null;  
if("/requestListData.do".equals(command)){
   codeList = codeDao.select(conn);   
}
}
}   
[returnPage.java]

<servlet>
<servlet-name>ReturnPage</servlet-name>
<servlet-class>pkg.ReturnPage</servlet-class>    
</servlet>
<servlet-mapping>
<servlet-name>ReturnPage</servlet-name>
<url-pattern>/openHaveList.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DataManager</servlet-name>
<servlet-class>pkg.ReturnJsonData</servlet-class>    
</servlet>
<servlet-mapping>
<servlet-name>DataManager</servlet-name>
<url-pattern>/requestListData.do</url-pattern>
</servlet-mapping>
( function () {
var conn=null, addEvent=null, createXHR=null, loadNations = null, setAsyncLoad=null; 
addEvent = (function(window){
if(window.addEventListener){
   return function (element, eventName, callback, canCapture) {
     element.addEventListener(eventName, callback, canCapture);
 };
  } else if(window.attachEvent){
 return function (element, eventName, callback) {
 element.attachEvent("on" + eventName, callback);
 };
} else {
return function (element, eventName, callback) {
   element["on" + eventName] = callback;
  }
 }
 }(window));
 createXHR = function () {
 var xhrObj = null;
   try{
   xhrObj = new XMLHttpRequest();
  } catch (exception){
    try{
   xhrObj = new ActiveXObject('Msxml2.XMLHTTP');
 } catch (innerException){
  xhrObj = new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
 return xhrObj;
 }; 
  loadAsync = function () {
 var list = document.getElementById("list");   
  conn = createXHR();
  conn.onreadystatechange = function () {
  if(conn.readyState == 4){
     if(conn.status == 200){
        alert(conn.responseText);  //--> Here it shows the html of haveList.jsp
     }
  }
};
conn.open('GET', 'requestListData.do');  
 conn.send();  
 };
 addEvent(window, 'load', function () { loadAsync(); } , false); 
} () ); 
public class ReturnPage extends HttpServlet {
private static String page = "/haveList.jsp";
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 1L);
dispatcher.forward(request, response); 
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 1L);  
dispatcher.forward(request, response); 
}
}
public class ReturnJsonData extends HttpServlet {
private String command = null; 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
strUri = request.getRequestURI();
command = strUri.substring(request.getContextPath().length());
try {
    response.setHeader("Pragma", "No-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.addHeader("Cache-Control", "no-store");
    response.setDateHeader("Expires", 1L);
    response.setContentType("application/json; charset=UTF-8" );
    response.getWriter().print( loadListData(request, command) );
} catch (Throwable e) {
  System.out.println("Failed to load list");
} 
}  
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
strUri = request.getRequestURI();
command = strUri.substring(request.getContextPath().length()); 
try {
   response.setHeader("Pragma", "No-cache");
   response.setHeader("Cache-Control", "no-cache");
   response.addHeader("Cache-Control", "no-store");
   response.setDateHeader("Expires", 1L);
   response.setContentType("application/json; charset=UTF-8" );
   response.getWriter().print( loadListData(request, command) );
 } catch (Throwable e) {
   System.out.println("Failed to load list");
 }  
 } 
private String loadListData(HttpServletRequest request, String command) throws Throwable 
{
String codeList = null;  
if("/requestListData.do".equals(command)){
   codeList = codeDao.select(conn);   
}
}
}   
[returnJsonData.java]

<servlet>
<servlet-name>ReturnPage</servlet-name>
<servlet-class>pkg.ReturnPage</servlet-class>    
</servlet>
<servlet-mapping>
<servlet-name>ReturnPage</servlet-name>
<url-pattern>/openHaveList.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DataManager</servlet-name>
<servlet-class>pkg.ReturnJsonData</servlet-class>    
</servlet>
<servlet-mapping>
<servlet-name>DataManager</servlet-name>
<url-pattern>/requestListData.do</url-pattern>
</servlet-mapping>
( function () {
var conn=null, addEvent=null, createXHR=null, loadNations = null, setAsyncLoad=null; 
addEvent = (function(window){
if(window.addEventListener){
   return function (element, eventName, callback, canCapture) {
     element.addEventListener(eventName, callback, canCapture);
 };
  } else if(window.attachEvent){
 return function (element, eventName, callback) {
 element.attachEvent("on" + eventName, callback);
 };
} else {
return function (element, eventName, callback) {
   element["on" + eventName] = callback;
  }
 }
 }(window));
 createXHR = function () {
 var xhrObj = null;
   try{
   xhrObj = new XMLHttpRequest();
  } catch (exception){
    try{
   xhrObj = new ActiveXObject('Msxml2.XMLHTTP');
 } catch (innerException){
  xhrObj = new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
 return xhrObj;
 }; 
  loadAsync = function () {
 var list = document.getElementById("list");   
  conn = createXHR();
  conn.onreadystatechange = function () {
  if(conn.readyState == 4){
     if(conn.status == 200){
        alert(conn.responseText);  //--> Here it shows the html of haveList.jsp
     }
  }
};
conn.open('GET', 'requestListData.do');  
 conn.send();  
 };
 addEvent(window, 'load', function () { loadAsync(); } , false); 
} () ); 
public class ReturnPage extends HttpServlet {
private static String page = "/haveList.jsp";
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 1L);
dispatcher.forward(request, response); 
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 1L);  
dispatcher.forward(request, response); 
}
}
public class ReturnJsonData extends HttpServlet {
private String command = null; 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
strUri = request.getRequestURI();
command = strUri.substring(request.getContextPath().length());
try {
    response.setHeader("Pragma", "No-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.addHeader("Cache-Control", "no-store");
    response.setDateHeader("Expires", 1L);
    response.setContentType("application/json; charset=UTF-8" );
    response.getWriter().print( loadListData(request, command) );
} catch (Throwable e) {
  System.out.println("Failed to load list");
} 
}  
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
strUri = request.getRequestURI();
command = strUri.substring(request.getContextPath().length()); 
try {
   response.setHeader("Pragma", "No-cache");
   response.setHeader("Cache-Control", "no-cache");
   response.addHeader("Cache-Control", "no-store");
   response.setDateHeader("Expires", 1L);
   response.setContentType("application/json; charset=UTF-8" );
   response.getWriter().print( loadListData(request, command) );
 } catch (Throwable e) {
   System.out.println("Failed to load list");
 }  
 } 
private String loadListData(HttpServletRequest request, String command) throws Throwable 
{
String codeList = null;  
if("/requestListData.do".equals(command)){
   codeList = codeDao.select(conn);   
}
}
}   
我解决了^^

[原因]
因为我的过滤器

[细节]
实际上,
haveList.jsp
是一个登录页面。我有一个过滤器,用于检查请求是否已登录。如果没有,该筛选器将请求重定向到“haveList.jsp(登录页)”
当触发对服务器(requestListData.do)的ajax调用时,筛选器将请求重定向到登录页面,因为该页面未登录。请参阅以下web.xml(之前)


检验员
过滤器,检查器
逃跑
/Test/,/Test/gate.jsp,/Test/openHaveList.do
检验员
*.做
检验员
*.jsp
[解决方案]
我将对服务器的ajax调用注册为异常。(转义参数)在我的过滤器servlet中,我不会以编程方式将此类异常重定向到登录页面。请参阅以下web.xml(后面)


检验员
过滤器,检查器
逃跑
/Test/,/Test/gate.jsp,/Test/openHaveList.do,“/requestListData.do”
检验员
*.做
检验员
*.jsp
在此之后,我从服务器获取了JSON数据^^