眼睛比较好使的同志找一下,后台的PrintWriter out = response.getWriter()和哪冲突了
下面是简单的登录页面
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xml:lang="en" lang="en">
<f:view>
<f:loadBundle basename="com.webapp.resource.WebAppResource" var="resource" />
<head>
<title>#{resource.Login_Title}</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="Shortcut Icon" href="images/TomiSoft.ico" />
<link rel="Book" href="images/TomiSoft.ico" />
<script type="text/javascript" src="scripts/jquery/js/jquery.js"></script>
<script type="text/javascript" src="scripts/Login.js"></script>
<link rel="stylesheet" href="theme/default/styles/login.css" />
<script type="text/javascript" src="dwr/interface/faceLogoFunction.js"/>
<script type="text/javascript" src="dwr/engine.js"/>
</head>
<body>
<table class="logintb">
         <tr>
         <td class="login">
    <img id="logo" src=""></img>
    <div id="description"></div>
    <input type="hidden" id="checkValue"/>
</td>
<td>
<h:form id="loginform">
<p class="logintitle">#{resource.Login_Lable_UserName}:</p>
<p class="loginform">
<input id="username" name="username" tabindex="1" type="text" class="txt" />
</p>
<p class="logintitle">#{resource.Login_Lable_PassWord}:</p>
<p class="loginform">
<input id="password" name="password" tabindex="2" type="password" class="txt" />
</p>

<p class="logintitle">#{resource.Login_Lable_ValidCode}:</p>
<p class="loginform">
<input id="txtVaildCode" name="txtVaildCode" maxlength="4" tabindex="3" type="text" class="validtxt" />
<img class="imgValidCode" id="vaildCode" title="#{resource.Login_ValidCode_Tip}" src="servlet/WebAppInterface?Action=getCheckCode" ></img>
</p>
<p class="loginnofloat">
<input id="btnEnter" value="#{resource.Login_Btn_Login}" onclick="onEnter();" tabindex="4" type="button" class="btn" />
</p>
</h:form>
</td>
</tr>
<tr>
<td colspan="2" class="footer">
<div class="copyright" id="copyright">

</div>
</td>
</tr>
</table>
</body>
</f:view>
</html>
下面是简单的js代码
$(function(){
faceLogoFunction.findFaceLogo(function(date){
$("#logo").attr("src",date.faceLogo);
$("#logo").css("width","248px");
$("#logo").css("height","72px");
$("#copyright").html(date.faceCopyright);
});
});
function onEnter(){
$("#btnEnter").attr("disabled","false");
var strvalid = $.trim($("#txtVaildCode").val());
var strun = $.trim($("#username").val());
var strpw = $.trim($("#password").val());
$("#vaildCode").click(function(){
this.src='servlet/WebAppInterface?Action=getCheckCode&&'+new Date();
});
if(strun==null || strun==""){
alert('请输入用户名!');$("#username").select();$("#btnEnter").attr("disabled","");return false;
}
if(strpw==null || strpw==""){
alert('请输入密码!');$("#password").select();$("#btnEnter").attr("disabled","");return false;
}
if(strvalid==null || strvalid==""){
alert('请输入验证码!');$("#txtVaildCode").select();$("#btnEnter").attr("disabled","");return false;
}

$.ajax({
url: "servlet/WebAppInterface?Action=Verify",
success: function(strval){
if(strval==$("#txtVaildCode").val()){
$.ajax({//提交登录
type: "post",
data: "username="+strun+"&password="+strpw+"&Lang="+$("#drpLang").val()+"",
url: "servlet/SSOAuth?PWSecurity=false",
success: function(msg){
if(msg!='false'){
window.location.href = "servlet/Loader?tokenid="+msg;
//window.open('servlet/Loader?tokenid='+msg,'','left=0,top=0,width='+(screen.availWidth-10)+',height='+(screen.availHeight-30)+'fullscreen=1,toolbar=no,menubar=no,scrollbars=no,resizable=yes,location=no,status=no;');
//window.opener = null;
//window.open('',"_self");
//window.close();
}else{
alert('用户名或密码不对');$("#btnEnter").attr("disabled","");return false;
}
}
});
}else{
alert('验证码不对!');$("#btnEnter").attr("disabled","");return false;
}
}
});
}function keyDown(e){
if(!e)var e=window.event;   
var kc=e.which||e.keyCode;   
switch(kc){   
case 13:onEnter();break;   
}

  
document.onkeydown = keyDown;
$(function(){});
下面是后台的方法
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0); String strResutl = "";
String action = request.getParameter("Action");
HttpSession session = request.getSession();
if (action != "" && action != null) {

if (action.equals("Verify")) {// 验证码
strResutl = session.getAttribute("CheckCode").toString();
} else if (action.equals("ValidUser")) {// 用户登录
strResutl = ValidUser(request, response);
} else if (action.equals("Logout")) {// 退出登录
Logout(request, response);
} else if (action.equals("ReadModels")) {// 左边树菜单
strResutl = ReadModels(request, response);
}else if (action.equals("getCheckCode")) {// 左边树菜单
getCheckCode(request, response);
}
}
response.setContentType("text/html;charset=GB2312");
PrintWriter out = response.getWriter();
out.print(strResutl);
//System.out.println(strResutl);
out.flush();
out.close();

}

解决方案 »

  1.   

    只要执行一次方法必报getOutputStream() has already been called for this response
    找了半天没弄明白,高人指点啊
      

  2.   

    记得以前处理过类似的问题,好像是验证码中得加一行,out=null;
      

  3.   

    问题找到了,是后台内部调用的两个方法全部都用到了out,虽然做了out.flush();out.close();这样的处理,但是还是不行,略微修改了之后就好了。可惜回复的人太少了,等会再来几个人咱们就结贴给分,呵呵
      

  4.   

    在生成验证码的jsp文件末尾添加两句话out.clear();
    out = pageContext.pushBody(); 
      

  5.   

    response.getWriter和response.getOutputStream
    只能被调用一次,
    两个是互相冲突的。