我正在为我正在运行的应用程序提供一个小的登录表单,并且我有一个对重定向到新页面的servlet的ajax请求(登录成功后)。
所以基本上这是Java类中理论上有效的代码。
根据JAVA CLASS要求包含的代码:
PrintWriter out = response.getWriter();
response.sendRedirect("http://stackoverflow.com/");
try {
out.println(response);
out.flush();
} finally {
out.close();
}}
这是javacript代码,它是按下登录按钮时调用的函数的一部分
根据JAVASCRIPT的要求包含代码:
var prmVlr = {};
prmVlr["op"] = '2';
prmVlr["userLogin"]=userName;
prmVlr["passLogin"]=hash;
prmVlr["country"]=country;
prmVlr["database"]="CRM";
$j.ajax({type: "GET", url: "LoginHandler",
data:prmVlr,traditional:true,dataType: "json", cache:false}).done(function(response){
var data=response;
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
})
.fail(function(){showMsgAlert('Error'+' - PP-E1003');}); }
我的想法是,当我在应用程序中开发下一页时,用户将被重定向到该页面。 这也是我第一次使用它,所以我不确定我是否正确地执行此操作。我可以在字符串json中返回URL,然后重定向,但我不确定是否会破坏会话。 另外我很抱歉,如果我不够明确,或者我在这里违反了一些规则,我是这个网站的新手,英语不是我的主要语言。
解决方案1: 所以我提出了一个解决方案,它可能不是最好的但是有效。
在SERVLET方面:
System.out.println(login.getSession_id());
StringBuilder jsonStr = new StringBuilder();
jsonStr.append("{'redirect':'" + (request.getRequestURI().substring(0,request.getRequestURI().indexOf('/', 1))+"MYPAGELOCATION") +"'}");
jsonResponse = jsonStr.toString().replaceAll("'",
Character.toString((char) 34));
在JAVASCRIPT方面:
$j.ajax({type: "GET", url: "LoginHandler", data:prmVlr,traditional:true,dataType: "json", cache:false}).done(function(response){
window.location.href = response.redirect;
}
我不知道在此之后会话会发生什么,因为我仍在编写课程。我无法弄清楚为什么响应不起作用也许是因为我的登录表单调用了一个javascript函数,它编码了密码,然后在SERVLET端请求了登录功能。
答案 0 :(得分:0)
所以我测试了 SOLUTION1 ,它完全没有应用程序的会话或功能问题。
现在的样子:
<强>的Javascript 强>:
$j.ajax({type: "GET", url: "LoginHandler", data:prmVlr,traditional:true,dataType: "json", cache:false}).done(function(response){
if(response.valido=="1"){ //send 1 if login is valid
window.location.href = response.redirect;
}
else {
alert("ERRO NO LOGIN");
}
})
.fail(function(){showMsgAlert('Error'+' - PP-E1003');});
}
Java Servlet:
String valido="0";
try {
if (allowUser(userName, passWord,login.getDbUsr())) {
session = request.getSession();
valido="1";
session.setAttribute("logon.isDone", userName);
if ((UsersRegistados.getUsers().containsKey(
request.getRequestedSessionId()) || UsersRegistados.getUsers().containsValue(userName))) {
System.out.println("user already registered");
}
else{
UsersRegistados.setUsers(session.getId(), userName);
login.setFile(DB.toLowerCase()+"pp"); //crmpp file
login.setUcode(userCode); // ep_code
login.setUsername(userName); //epName
login.setUserType(userType);
login.setIdiom(language);
login.setPassword(passWord);
login.setSession_id(session.getId());
//Try redirecting the client to the page he first tried to access
session.setAttribute("login", login);
session.setAttribute("language", language.toUpperCase());
}
//response.sendRedirect(request.getRequestURI().substring(0,request.getRequestU RI().indexOf('/', 1))+"/Calendar/calendar.jsp");
//response.setStatus(response.SC_MOVED_TEMPORARILY);
//response.setHeader("Location", "Calendar/calendar.jsp");
//System.out.println(jsonResponse);
}
System.out.println(login.getSession_id());
StringBuilder jsonStr = new StringBuilder();
jsonStr.append("{'redirect':'" + (request.getRequestURI().substring(0,request.getRequestURI().indexOf('/', 1))+"/Calendar/calendar.jsp") +"','valido':'"+valido+"'}");
jsonResponse = jsonStr.toString().replaceAll("'",
Character.toString((char) 34));
try {
out.println(jsonResponse);
out.flush();
} finally {
out.close();
//response.sendRedirect(request.getRequestURI().substring(0,request.getRequestURI().indexOf('/', 1))+"/Calendar/calendar.jsp");
//return;
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}