模块简述:做一个登录验证,由于开始的框架是ssh2,最开始只是初步搭建起页面,当要实现登录验证(验证用户名密码是否错误、验证用户名密码框是否为空)的时候,选择了ajax在前台向后台传递数据,然后通过action来进行验证用户为空(返回null,因为ajax和struts2结合,不能刷新页面,刚好我判断的是用户不存在的情况下,由AJAX向前台返回out.print(),再通过回调函数来alert)问题描述:一切都没有问题,唯一一个疑惑百思不得其解,当我netUser 验证不为null的时候,可以return “success”,进入主菜单,但是为什么我用if限制了条件,netUser 已经不为null了,但是还是会alert一下,才进入主页面,一下为代码:
public String execute() throws IOException {
Net_User netUser = netUserService.autheication(username, password);//验证方法
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html; charset=utf-8");
//response.setHeader("Cache-Control", "no-cache");// 清除缓存
//response.addHeader("pragma", "no-cache");
//response.addHeader("cache-control", "no-cache,must-revalidate");
//response.addHeader("expires", "0");
String username_test =ServletActionContext.getRequest().getParameter( "username");
String password_test =ServletActionContext.getRequest().getParameter( "password");
PrintWriter out = null;
out = response.getWriter();
if (netUser == null && (username_test !="" ) &&( password_test !="" )){
//response.setHeader("Cache-Control", "no-cache");// 清除缓存
System.out.println(netUser);
out.print(1); //这里出现问题,当我netUser 不为空,还是会alert
return null;
}else if ((netUser == null && username_test == ""&& password_test !="") ||(netUser == null && password_test == ""&& username_test !="") ||(netUser == null && username_test == ""&& password_test =="")) {
//response.setHeader("Cache-Control", "no-cache");// 清除缓存
out.print(2);
return null;
}
response.setHeader("Cache-Control", "no-cache");// 清除缓存
ServletActionContext.getRequest().getSession().setAttribute("user",
netUser);
String test = netUser.getProvince();
String test1 = netUser.getCity();
String test2 = netUser.getDistrict();
String test3 = netUser.getStreet();
String test4 = netUser.getStreetname();
String test5 = netUser.getSerialnumber();
String test6 = netUser.getPower();
System.out.println(test + "," + test1 + "," + test2 + "," + test3 + ","
+ test4 + "," + test5 + "," + test6);
System.out.println("good !"); return "success";//这里出现问题,当我netUser 不为空,还是会alert,对应上面的条件
}
var xmlHttp;function createXmlHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}function ver() {
//1:创建XMLHttpRequest对象
createXmlHttpRequest();
//2:取出要传递的值
var username = document.getElementById("username").value;
var url = "login.action?action=loginAction&username=" + username
+ "×tamp=" + new Date().getTime(); //3:建立与Servlet连接 (传递的方式,传递的URL,是否异步)
xmlHttp.open("GET", url, true);
//4:建立回调函数
xmlHttp.onreadystatechange = function() { callback(); };
//5:传递
xmlHttp.send(null);
}
function callback() {
var c = xmlHttp.responseText;
//alert(c);
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
alert(c);
if (c == 1) {
alert("用户名或密码错误!");
} else if (c == 2) { alert("请填写用户名或密码!");
} else {
alert("");
} } else {
alert("页面错误,请联系管理员!")
} }
求大侠给看看哪里的逻辑出现错误了,谢啦!
strutsajaxxmlhttprequest
public String execute() throws IOException {
Net_User netUser = netUserService.autheication(username, password);//验证方法
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html; charset=utf-8");
//response.setHeader("Cache-Control", "no-cache");// 清除缓存
//response.addHeader("pragma", "no-cache");
//response.addHeader("cache-control", "no-cache,must-revalidate");
//response.addHeader("expires", "0");
String username_test =ServletActionContext.getRequest().getParameter( "username");
String password_test =ServletActionContext.getRequest().getParameter( "password");
PrintWriter out = null;
out = response.getWriter();
if (netUser == null && (username_test !="" ) &&( password_test !="" )){
//response.setHeader("Cache-Control", "no-cache");// 清除缓存
System.out.println(netUser);
out.print(1); //这里出现问题,当我netUser 不为空,还是会alert
return null;
}else if ((netUser == null && username_test == ""&& password_test !="") ||(netUser == null && password_test == ""&& username_test !="") ||(netUser == null && username_test == ""&& password_test =="")) {
//response.setHeader("Cache-Control", "no-cache");// 清除缓存
out.print(2);
return null;
}
response.setHeader("Cache-Control", "no-cache");// 清除缓存
ServletActionContext.getRequest().getSession().setAttribute("user",
netUser);
String test = netUser.getProvince();
String test1 = netUser.getCity();
String test2 = netUser.getDistrict();
String test3 = netUser.getStreet();
String test4 = netUser.getStreetname();
String test5 = netUser.getSerialnumber();
String test6 = netUser.getPower();
System.out.println(test + "," + test1 + "," + test2 + "," + test3 + ","
+ test4 + "," + test5 + "," + test6);
System.out.println("good !"); return "success";//这里出现问题,当我netUser 不为空,还是会alert,对应上面的条件
}
var xmlHttp;function createXmlHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}function ver() {
//1:创建XMLHttpRequest对象
createXmlHttpRequest();
//2:取出要传递的值
var username = document.getElementById("username").value;
var url = "login.action?action=loginAction&username=" + username
+ "×tamp=" + new Date().getTime(); //3:建立与Servlet连接 (传递的方式,传递的URL,是否异步)
xmlHttp.open("GET", url, true);
//4:建立回调函数
xmlHttp.onreadystatechange = function() { callback(); };
//5:传递
xmlHttp.send(null);
}
function callback() {
var c = xmlHttp.responseText;
//alert(c);
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
alert(c);
if (c == 1) {
alert("用户名或密码错误!");
} else if (c == 2) { alert("请填写用户名或密码!");
} else {
alert("");
} } else {
alert("页面错误,请联系管理员!")
} }
求大侠给看看哪里的逻辑出现错误了,谢啦!
strutsajaxxmlhttprequest
alert(c);这里的alert在作怪
我去掉试试,那个是为了验证下是否取到值,有时候取到的是整个页面的值,就因为action return 的值不是null.
还是一样, 明明是return success了, 还是给我 alert用户名或密码错误,
我怀疑是缓存之类的,蛋疼啊,求答案求答案!
当然会alert(c)l
关键问题不是他alert ,alert 是我测试返回的接受值,如果action中的if alert没有问题,
但是如果我返回给action的netUser为null的话,说明我的netUser不为空, 那么应该直接return success ,刷新页面,直接进入我struts.xml里配置的return success 进入main.jsp啊
return success 也为1
window.location.href="index.jsp"; 这段代码也不跳转了 。
alert(c);
if (c == 1) {
alert("用户名或密码错误!");
} 你不是开玩笑嘛?return success 后c为1,当然会进去
if (c == 1) {
alert("用户名或密码错误!");
}
了,这有什么疑问的。
你的意思应该是
if (c != 1) {
alert("用户名或密码错误!");
}
if (netUser == null && (username_test !="" ) &&( password_test !="" )){
//response.setHeader("Cache-Control", "no-cache");// 清除缓存
System.out.println(netUser);
out.print(1); //这里出现问题,当我netUser 不为空,还是会alert
return null;
}else if ((netUser == null && username_test == ""&& password_test !="") ||(netUser == null && password_test == ""&& username_test !="") ||(netUser == null && username_test == ""&& password_test =="")) {
//response.setHeader("Cache-Control", "no-cache");// 清除缓存
out.print(2);
return null;
}
这里的 1 和 2 是 netUser为null 的情况,既然netUser 为空,怎么会return success 还是我理解错误?
这两个IF都是以netUser为null为前提的, ajax真是个神奇的玩意
netUser不为空,username_test 和password_test 是否都为true?这里是个且的关系。
这样解决不了你的问题吗?
怎么写那么麻烦if (netUser != null&&!"".equals(netUser)){
if(netUser.equals(数据库里的用户名)&&password.equals(数据库里对应的密码)){
return success;
}
return null;
}
ServletActionContext.getRequest().getParameter( "username");
既然用struts,为什么还这样获得请求参数?
struts有一个validate方法来提供你验证的