您的位置:首页 > 编程语言 > Java开发

解决weblogic下java应用请求session中的验证码为空的问题

2017-06-07 18:31 405 查看
个人认为原因在于:weblogic服务器下jsp页面加载比session创建速度快,当jsp页面加载验证码,写入session后,服务器又创建了新的session,导致下一次请求时浏览器cookie中jessionId访问不到储存验证码的session,所以第一次验证失败。第二次验证刷新验证码可以验证,因为服务器返回了新的jessionId并将新的验证码放入session中。

解决办法:初始化界面时,用jquery延时加载一个空请求,得到session后,加载验证码。

//js代码
$(function(){
$.ajaxSetup({
async: false
});
//解决weblogic下第一次验证请求是session为null的问题
//使用jquery延迟进行服务器访问请求,获取会话信息后,加载验证码存入session中
function showPic(){
$.ajax({
type: 'POST',
url:"*.sesseionAction",
dataType:"text",
success:function(data){
if(data =='success') {

}else if(data!=null&&data!=""){

}
}
});
var _src = "Random.jsp?"+Math.random();
$("#randImage").attr("src",_src);
}
var test = setTimeout(function(){
showPic()
},200);
});
//Servlet响应
public class SessionServlet extends LoginServlet {

/**
*
*/
private static final long serialVersionUID = -5271370581043822209L;

public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
HttpSession session = request.getSession();
String ran= (String) session.getAttribute("random");
if (ran == null) {
response.setContentType("text/html; charset=utf-8");
response.getOutputStream().write("random".getBytes());
return;
}else {
response.setContentType("text/html; charset=utf-8");
response.getOutputStream().write("success".getBytes());
return;
}
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException {
this.doPost(request, response);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐