jsp+ajax做了个登陆界面,但是一个用户只能登陆一次,在登录就跳转不过去了!
后台servlet:
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);
}[code]
更奇怪的是,虽然以后登录sysout打印没出来,但是if里面的判断结果却返回给了页面!
javascript:
[code=JScript]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:
HttpSession session = request.getSession();//获取session
session.removeAttribute("usernum");//清除字段
request.getRequestDispatcher("/login.jsp").forward(request,//清除后转入登陆页面
response);
问题:1.用一个新的用户可以正常登录,后台打印语句也可以打印。
2.注销后再用这个账户登录,url显示跳转到了这个页面,但是页面没有改变,打印语句不执行。
3.注销后用错误信息登录,打印语句也不执行,但是错误信息可以返回给js。
4.以上为ie9+jquery1.6 。firefox下一切正常!!
。。愁死了
后台servlet:
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);
}[code]
更奇怪的是,虽然以后登录sysout打印没出来,但是if里面的判断结果却返回给了页面!
javascript:
[code=JScript]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:
HttpSession session = request.getSession();//获取session
session.removeAttribute("usernum");//清除字段
request.getRequestDispatcher("/login.jsp").forward(request,//清除后转入登陆页面
response);
问题:1.用一个新的用户可以正常登录,后台打印语句也可以打印。
2.注销后再用这个账户登录,url显示跳转到了这个页面,但是页面没有改变,打印语句不执行。
3.注销后用错误信息登录,打印语句也不执行,但是错误信息可以返回给js。
4.以上为ie9+jquery1.6 。firefox下一切正常!!
。。愁死了
解决方案 »
- 嵌套的Simple Tag中,子标签怎样向父标签传递信息?
- 在运行时出的错,在线等
- ejb中的奇怪问题!
- java 程序和数据连接问题???
- 麻烦大家给我提供一些有关JSP电子书下载的地址
- 请教一下入门问题!
- apache2.0.45与tomcat4.1.18的整合问题。请注意版本。各位高手
- 急救!在JSP页面中如何实现Iframe方法?
- eclipse 建tomcat project 如何在代码里获得tomcat的ROOT路径?
- 求SSH代码自动生成工具
- org.apache.jasper.JasperException: Unsupported encoding: gb2312
- tomcat突然启动不了了
第一个是为了防止未登录的用户进入,过滤的除了login之外的页面:
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();//获取session
if(session.getAttribute("usernum") == null)//判断session是否空
{
request.getRequestDispatcher("/login.jsp").forward(request, response);//如果空,则没登陆,转入登录界面
return;
}
第二个是为了防止登录用户再进入登陆页面,只过滤login页面:
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:
window.location.href = "${pageContext.request.contextPath }/loginbridge.do?usernum="+usernum;
然后在这个servlet中setsession。这样就可以解决登录的问题,但是那个打印语句依然没有出现。
session.removeAttribute("usernum");//清除字段
request.getRequestDispatcher("/login.jsp").forward(request,//清除后转入登陆页面
response);
导入了,纠结死,还好公司今天没事做,就是因为jquery的问题,我之前的JSP都可以,就是这个不行算了,我大概看了下,你把过滤器中的forward的请求改成
request.getRequestDispatcher("/login.jsp").forward(
httpServletRequest, httpServletResponse);// 如果空,则没登陆,转入登录界面利用httpServletRequest和httpServletResponse跳转试试
window.location.href = "${pageContext.request.contextPath }/view/index.jsp";
request.getRequestDispatcher("/login.jsp").forward(request, response);
request.getRequestDispatcher("/view/index.jsp").forward(request,response);if (session.getAttribute("usernum") != null)// 判断session是否为空
{
request.getRequestDispatcher("/view/index.jsp").forward(request,
response);// 非空,则已经登录,转入主页
return; // 去掉return
} return你写在那里干嘛的? return空了。。可能导致上面的没有返回跳转servlet很久没用过了。也不能太确定
我这边测试OK了,在IE9和火狐上都测试了
可能和你的代码有点偏差,应该就是过滤器的问题,因为过滤器拦截了你的servlet请求,所以导致你的页面跳转问题我也习惯写return用户登录过滤
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpSession session = httpServletRequest.getSession();// 获取session
if (session.getAttribute("usernum") == null)// 判断session是否空
{
if ( !httpServletRequest.getRequestURI().contains("userLogin")
&& !httpServletRequest.getRequestURI().contains(".js")
&& !httpServletRequest.getRequestURI().contains("login")
) {
request.getRequestDispatcher("/login-csdn.jsp").forward(
httpServletRequest, httpServletResponse);// 如果空,则没登陆,转入登录界面
return;
}
}
chain.doFilter(request, response);
return;
已经登录过滤
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpSession session = httpServletRequest.getSession();// 取得session
if (session.getAttribute("usernum") != null)// 判断session是否为空
{
if (!httpServletRequest.getRequestURI().contains("login")){
request.getRequestDispatcher("/login-csdn1.jsp").forward(request,
response);// 非空,则已经登录,转入主页
return;
}
}
chain.doFilter(request, response);
return;
这个就是原因吧,你登陆的url两次一样的话Ajax不会访问服务器.
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);
}
js方法改成这样,加上时间戳就好了。
谢谢你一起讨论哈~
这个问题算是解决了,是我刚学ajax,不是很了解这个机制
Quote=引用 20 楼 xinlan1022 的回复:]
应该是缓存吧,url后面加个时间戳
[/Quote]