IE中ajax+jsp登录界面,由于缓存导致jsp过滤器与ajax请求被拦截的问题和解决
2012-12-25 21:52
756 查看
分类: java web java web 2011-11-22 14:10 316人阅读 评论(0) 收藏 举报
学习javaweb过程中一个灰常奇怪的问题
jsp+ajax做了个登陆界面,但是一个用户只能登陆一次,在登录就跳转不过去了!
后台servlet:
[java] view plaincopyprint?HttpSession httpSession = request.getSession();
String usernumString = request.getParameter("usernum");// 获取输入的用户名
String passwordString = request.getParameter("password");// 获取输入的密码
response.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = response.getWriter();
System.out.println("-----");//第一次用这个用户可以登录并正常显示和跳转,第二次和以后在用这个账户就根本不出现打印语句了
if (!LoginCheck.check(usernumString, passwordString)) {// 检查用户名密码,匹配数据库
printWriter.println("密码错误");
} else {
printWriter.println("");
httpSession.setAttribute("usernum", usernumString);
}
HttpSession httpSession = request.getSession();
String usernumString = request.getParameter("usernum");// 获取输入的用户名
String passwordString = request.getParameter("password");// 获取输入的密码
response.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = response.getWriter();
System.out.println("-----");//第一次用这个用户可以登录并正常显示和跳转,第二次和以后在用这个账户就根本不出现打印语句了
if (!LoginCheck.check(usernumString, passwordString)) {// 检查用户名密码,匹配数据库
printWriter.println("密码错误");
} else {
printWriter.println("");
httpSession.setAttribute("usernum", usernumString);
}
更奇怪的是,虽然以后登录sysout打印没出来,但是if里面的判断结果却返回给了页面!
javascript:
[javascript] view plaincopyprint?function check() {
var jqueryObj1=$("#usernum");
var usernum=jqueryObj1.val();
var jqueryObj2=$("#password");
var password=jqueryObj2.val();
alert(usernum+"+"+password);
$.get("${pageContext.request.contextPath }/login.do?usernum=" + usernum
+ "&password=" + password, null, checkback);
}
function checkback(data) {
alert(data.length);
alert(data);
if (data.length==6) {
var resultObj = $("#result2");
resultObj.html(data);
} else {
window.location.href = "${pageContext.request.contextPath }/view/index.jsp";
}
}
function check() {
var jqueryObj1=$("#usernum");
var usernum=jqueryObj1.val();
var jqueryObj2=$("#password");
var password=jqueryObj2.val();
alert(usernum+"+"+password);
$.get("${pageContext.request.contextPath }/login.do?usernum=" + usernum
+ "&password=" + password, null, checkback);
}
function checkback(data) {
alert(data.length);
alert(data);
if (data.length==6) {
var resultObj = $("#result2");
resultObj.html(data);
} else {
window.location.href = "${pageContext.request.contextPath }/view/index.jsp";
}
}
登陆后的注销servlet:
[java] view plaincopyprint?HttpSession session = request.getSession();//获取session
session.removeAttribute("usernum");//清除字段
request.getRequestDispatcher("/login.jsp").forward(request,//清除后转入登陆页面
response);
HttpSession session = request.getSession();//获取session
session.removeAttribute("usernum");//清除字段
request.getRequestDispatcher("/login.jsp").forward(request,//清除后转入登陆页面
response);
还有两个过滤器:
第一个是为了防止未登录的用户进入,过滤的除了login之外的页面:
[java] view plaincopyprint?HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();//获取session
if(session.getAttribute("usernum") == null)//判断session是否空
{
request.getRequestDispatcher("/login.jsp").forward(request, response);//如果空,则没登陆,转入登录界面
return;
}
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();//获取session
if(session.getAttribute("usernum") == null)//判断session是否空
{
request.getRequestDispatcher("/login.jsp").forward(request, response);//如果空,则没登陆,转入登录界面
return;
}
第二个是为了防止登录用户再进入登陆页面,只过滤login页面:[java] view plaincopyprint?HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();// 取得session
if (session.getAttribute("usernum") != null)// 判断session是否为空
{
request.getRequestDispatcher("/view/index.jsp").forward(request,
response);// 非空,则已经登录,转入主页
return;
}
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();// 取得session
if (session.getAttribute("usernum") != null)// 判断session是否为空
{
request.getRequestDispatcher("/view/index.jsp").forward(request,
response);// 非空,则已经登录,转入主页
return;
}把两个过滤器删掉就没事了。
但是还是那个问题,firefox下不删也没问题。是不是两个浏览器关于session清除和set上有什么差异? 我用了一个折中的方法:
js中跳转改为跳到一个中间的servlet: [javascript] view plaincopyprint?window.location.href = "${pageContext.request.contextPath }/loginbridge.do?usernum="+usernum;
window.location.href = "${pageContext.request.contextPath }/loginbridge.do?usernum="+usernum;然后在这个servlet中setsession。这样就可以解决登录的问题,但是那个打印语句依然没有出现。 终于在大家的提醒下,是缓存问题没有解决。登陆的url两次一样的话Ajax不会访问服务器。 于是将js方法改成如下,给url加上时间戳:[javascript] view plaincopyprint?function
check() {
var jqueryObj1=$("#usernum");
var usernum=jqueryObj1.val();
var jqueryObj2=$("#password");
var password=jqueryObj2.val();
$.get("${pageContext.request.contextPath }/login.do?time="+new Date().getTime()+"&usernum=" + usernum
+ "&password=" + password, null, checkback);
}
function check() {
var jqueryObj1=$("#usernum");
var usernum=jqueryObj1.val();
var jqueryObj2=$("#password");
var password=jqueryObj2.val();
$.get("${pageContext.request.contextPath }/login.do?time="+new Date().getTime()+"&usernum=" + usernum
+ "&password=" + password, null, checkback);
}
于是原因找到,问题得到解决!
学习javaweb过程中一个灰常奇怪的问题
jsp+ajax做了个登陆界面,但是一个用户只能登陆一次,在登录就跳转不过去了!
后台servlet:
[java] view plaincopyprint?HttpSession httpSession = request.getSession();
String usernumString = request.getParameter("usernum");// 获取输入的用户名
String passwordString = request.getParameter("password");// 获取输入的密码
response.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = response.getWriter();
System.out.println("-----");//第一次用这个用户可以登录并正常显示和跳转,第二次和以后在用这个账户就根本不出现打印语句了
if (!LoginCheck.check(usernumString, passwordString)) {// 检查用户名密码,匹配数据库
printWriter.println("密码错误");
} else {
printWriter.println("");
httpSession.setAttribute("usernum", usernumString);
}
HttpSession httpSession = request.getSession();
String usernumString = request.getParameter("usernum");// 获取输入的用户名
String passwordString = request.getParameter("password");// 获取输入的密码
response.setContentType("text/html;charset=utf-8");
PrintWriter printWriter = response.getWriter();
System.out.println("-----");//第一次用这个用户可以登录并正常显示和跳转,第二次和以后在用这个账户就根本不出现打印语句了
if (!LoginCheck.check(usernumString, passwordString)) {// 检查用户名密码,匹配数据库
printWriter.println("密码错误");
} else {
printWriter.println("");
httpSession.setAttribute("usernum", usernumString);
}
更奇怪的是,虽然以后登录sysout打印没出来,但是if里面的判断结果却返回给了页面!
javascript:
[javascript] view plaincopyprint?function check() {
var jqueryObj1=$("#usernum");
var usernum=jqueryObj1.val();
var jqueryObj2=$("#password");
var password=jqueryObj2.val();
alert(usernum+"+"+password);
$.get("${pageContext.request.contextPath }/login.do?usernum=" + usernum
+ "&password=" + password, null, checkback);
}
function checkback(data) {
alert(data.length);
alert(data);
if (data.length==6) {
var resultObj = $("#result2");
resultObj.html(data);
} else {
window.location.href = "${pageContext.request.contextPath }/view/index.jsp";
}
}
function check() {
var jqueryObj1=$("#usernum");
var usernum=jqueryObj1.val();
var jqueryObj2=$("#password");
var password=jqueryObj2.val();
alert(usernum+"+"+password);
$.get("${pageContext.request.contextPath }/login.do?usernum=" + usernum
+ "&password=" + password, null, checkback);
}
function checkback(data) {
alert(data.length);
alert(data);
if (data.length==6) {
var resultObj = $("#result2");
resultObj.html(data);
} else {
window.location.href = "${pageContext.request.contextPath }/view/index.jsp";
}
}
登陆后的注销servlet:
[java] view plaincopyprint?HttpSession session = request.getSession();//获取session
session.removeAttribute("usernum");//清除字段
request.getRequestDispatcher("/login.jsp").forward(request,//清除后转入登陆页面
response);
HttpSession session = request.getSession();//获取session
session.removeAttribute("usernum");//清除字段
request.getRequestDispatcher("/login.jsp").forward(request,//清除后转入登陆页面
response);
还有两个过滤器:
第一个是为了防止未登录的用户进入,过滤的除了login之外的页面:
[java] view plaincopyprint?HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();//获取session
if(session.getAttribute("usernum") == null)//判断session是否空
{
request.getRequestDispatcher("/login.jsp").forward(request, response);//如果空,则没登陆,转入登录界面
return;
}
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();//获取session
if(session.getAttribute("usernum") == null)//判断session是否空
{
request.getRequestDispatcher("/login.jsp").forward(request, response);//如果空,则没登陆,转入登录界面
return;
}
第二个是为了防止登录用户再进入登陆页面,只过滤login页面:[java] view plaincopyprint?HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();// 取得session
if (session.getAttribute("usernum") != null)// 判断session是否为空
{
request.getRequestDispatcher("/view/index.jsp").forward(request,
response);// 非空,则已经登录,转入主页
return;
}
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();// 取得session
if (session.getAttribute("usernum") != null)// 判断session是否为空
{
request.getRequestDispatcher("/view/index.jsp").forward(request,
response);// 非空,则已经登录,转入主页
return;
}把两个过滤器删掉就没事了。
但是还是那个问题,firefox下不删也没问题。是不是两个浏览器关于session清除和set上有什么差异? 我用了一个折中的方法:
js中跳转改为跳到一个中间的servlet: [javascript] view plaincopyprint?window.location.href = "${pageContext.request.contextPath }/loginbridge.do?usernum="+usernum;
window.location.href = "${pageContext.request.contextPath }/loginbridge.do?usernum="+usernum;然后在这个servlet中setsession。这样就可以解决登录的问题,但是那个打印语句依然没有出现。 终于在大家的提醒下,是缓存问题没有解决。登陆的url两次一样的话Ajax不会访问服务器。 于是将js方法改成如下,给url加上时间戳:[javascript] view plaincopyprint?function
check() {
var jqueryObj1=$("#usernum");
var usernum=jqueryObj1.val();
var jqueryObj2=$("#password");
var password=jqueryObj2.val();
$.get("${pageContext.request.contextPath }/login.do?time="+new Date().getTime()+"&usernum=" + usernum
+ "&password=" + password, null, checkback);
}
function check() {
var jqueryObj1=$("#usernum");
var usernum=jqueryObj1.val();
var jqueryObj2=$("#password");
var password=jqueryObj2.val();
$.get("${pageContext.request.contextPath }/login.do?time="+new Date().getTime()+"&usernum=" + usernum
+ "&password=" + password, null, checkback);
}
于是原因找到,问题得到解决!
相关文章推荐
- IE中ajax+jsp登录界面,由于缓存导致jsp过滤器与ajax请求被拦截的问题和解决
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- 过滤器实现登录拦截需要注意的问题(AJAX请求的处理)
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- 在ie中关于ajax请求获得数据缓存问题的解决办法
- IE8浏览器缓存问题导致Ajax的GET请求只能执行一次的解决办法
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- IE9下Ajax无法刷新数据的缓存问题解决方法
- session失效,使用ajax请求数据被拦截,此时正常的处理逻辑是跳到登录界面,而不是界面没有变化(java判断是否是ajax请求)
- AJAX缓存问题的解决方法(IE)
- AJAX 缓存问题的两种解决方法(IE)
- 如何解决Ajax请求结果的缓存问题说明
- 【问题解决】IE 浏览器 GET 请求缓存问题
- 用Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
- IE中由于缓存导致页面数据不能及时更新的解决办法
- Shiro 处理ajax请求 拦截登录超时---解决!