正在执行下面找到的JAVA代码,通过AJAX调用从JSP页面调用servlet doGet()方法。
这是我的AJAX电话.. 我将通过ng-click Angular js捕获的点击文本作为查询字符串发送到Servlet的doGet()方法。
在我的JSP文件中,
$scope.requestFunc = function (clickData) {
var urlquerystring = clickData;
jQuery.ajax({
type: 'GET',
url: "/Charts/testExecution/"+"?"+ urlquerystring,
dataType: 'html',
success: function(respnsedata)
{
window.location.assign(respnsedata);
}
});
}
在我的Servlet的doGet()方法中,
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.err.println("In TestExecutionESO servlet..");
String teamnametextfield= req.getParameter("teamnametextfield");
System.out.println("Teamname is.."+teamnametextfield);
try {
dcmanager = DataCollectorManager.getInstance();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String selectedteam= req.getQueryString();
String testexeclistofobjectsjson = null;
if(selectedteam!=null)
{
String release=selectedteam.replace("%20"," ").toString();
testexecutionobjlist = dcmanager.getRallyDcMgr().gettestExecutionobjlist(release);
}
Gson gson = new Gson();
testexeclistofobjectsjson = gson.toJson(testexecutionobjlist);
System.out.println(testexecutionobjlist);
System.out.println(testexeclistofobjectsjson);
req.getSession().setAttribute("testexeclistofobjectsjson", testexeclistofobjectsjson);
resp.sendRedirect("TestExecutionESO.jsp");
}
完全获得查询字符串。处理完毕后,我将执行SetAttribute()并重定向到下一个JSP页面。 重定向不起作用..
这是我的错误代码, 无法加载资源:net :: ERR_TOO_MANY_REDIRECTS ..
http://10.112.81.95:9000/Charts/testExecution/TestExecutionESO.jsp ....无法加载资源:net :: ERR_TOO_MANY_REDIRECTS
请帮我解决问题.. 如何通过执行setAttribute()重定向到下一个JSP页面。??
答案 0 :(得分:0)
resp.sendRedirect("TestExecutionESO.jsp");
这是您代码中的罪魁祸首。当你调用sendRedirect()时,它将发出一个302响应,其中包含新资源的location-header,URI。当浏览器看到此标头时,它将为该新URI发出新请求。
所有这一切都适用于同步请求,但是在AJAX调用的情况下,我们使用XMLHttpRequest,它不能很好地处理重定向。
我建议您使用RequestDispatcher转发到这样的JSP
RequestDispatcher rd = req.getRequestDispatcher("path-to-ur-jsp");
rd.forward(req,res);