java.lang.IllegalStateException哎,闹不明白啊!

ws-小铁匠 2012-10-16 04:35:00
问题RT,求解!
描述:
一个查询列表的功能

1、在struts2的action里用response.getWriter().write()返回json格式的字符串
2、JSP里用ajax处理返回数据
3、抛出异常(数据正常显示)

org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:771)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:506)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)


PS:1、数据返回正常,显示正常,就是后台抛异常。
2、我直接访问action没有异常。问题应该出在JSP上


JSP引入的js代码:

var pageNo = 1;
var pageSize = 10;

//加载数据,渲染到html
function loadList() {
var startDate = $("#startDate").val();
var endDate = $("#endDate").val();
var username = $("#username").val();
var userid = $("#userid").val();
var url = rootPath+'/user/userMgr!queryList';
var params = "pageSize=" + pageSize + "&pageNo=" + pageNo + "&username="
+ username + "&userid=" + userid + "&startDate=" + startDate
+ "&endDate=" + endDate;
// alert(params);
$
.ajax({
type : "POST",
dataType : "text",
data : params,
url : url, // 请求action地址
success : function(res) {
var page = eval("(" + res + ")");
var list = page.result; // 获取数据
// 拼html
var html = "<div class='tab-title'><h4><span class='icon-play'></span>數據展現:</h4></div>"
+ "<table width='100%' cellspacing='0' cellpadding='0' border='0' class='table-form color-table'><thead>";

// 表头
var tableHead = [ '帳號', '用户名称', '密码', '性别', '註冊時間',
'是否為管理員', '操作' ];
html += "<tr>";
for ( var i = 0; i < tableHead.length; i++) {
if (i == tableHead.length - 1) {
html += "<th align='center' style='border-right:none'>";
} else {
html += "<th align='center'>";
}
html += tableHead[i];
html += "</th>";
}
html += "</tr></thead><tbody>";

// 表身
for ( var i = 0; i < list.length; i++) {
var stat = [ "否", "是" ]; // 管理員狀態
var sex = [ "男", "女" ]; // 性別
var opt = [
" <a href='javascript:updateToot(" + list[i].ID
+ "," + list[i].IS_ROOT
+ ")'>設為管理員</a> ",
"<a href='javascript:updateToot(" + list[i].ID
+ "," + list[i].IS_ROOT
+ ")'>取消管理員</a>" ];

var userid = '';
var username = '';
var pwd = '';
var gender_flag = '';
var in_time = '';
var root = 0;

if (list[i].USERID)
userid = list[i].USERID;
if (list[i].USERNAME)
username = list[i].USERNAME;
if (list[i].PWD)
pwd = list[i].PWD;
if (list[i].GENDER_FLAG)
gender_flag = sex[list[i].GENDER_FLAG - 1];
if (list[i].IN_TIME)
in_time = list[i].IN_TIME;
if (list[i].IS_ROOT)
root = list[i].IS_ROOT;

html += "<tr>";
html += "<td>" + userid + "</td>";
html += "<td>" + username + "</td>";
html += "<td>" + pwd + "</td>";
html += "<td>" + gender_flag + "</td>";
html += "<td>" + in_time + "</td>";
html += "<td>" + stat[root] + "</td>";
html += "<td>" + opt[root] + "</td>";
html += "</tr>";
}
html += "</tbody></table>";
// alert(createPage(page));
html += createPage(page);
$("#item_info").html(html);
$(".color-table tbody tr:odd").addClass("tr-color");// 增加行样式,
// nextPage
$(".page").click(nextPage);
return false;
}
});
}
function updateToot(id, is_root) {
var url = '<%=contextPath%>/user/userMgr!updateRoot?id=' + id + '&is_root='
+ is_root;
// alert(url);
$.post(url, function(data) {
alert(data);
loadList();
});
}

function getDate(day, format) {
return day.format(format);
}

/** 分布组件* */
function prePage() {
if (pageNo == 1) {
pageNo = 1;
} else {
pageNo--;
}
loadList();
}
function nextPage() {
pageNo++;
loadList();
}
function firstPage() {
pageNo = 1;
loadList();
}
function lastPage(totalPages) {
pageNo = totalPages;
loadList();
}

jQuery(function() {
// 加载数据
loadList();

var today = new Date();
var format = "yyyy-mm-dd";
var todayVal = today.valueOf();
var tomorrowVal = todayVal + 1 * 24 * 60 * 60 * 1000;
var tomorrow = new Date(tomorrowVal);
today = new Date(todayVal - 1 * 24 * 60 * 60 * 1000 * 365);
// $('#startDate').val(getDate(today, format));
$('#endDate').val(getDate(tomorrow, format));

$("#search_user").click(function() {
// alert("click");
$("#alert_mes").hide();
loadList();
});

});

...全文
940 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是小葵 2015-05-11
  • 打赏
  • 举报
回复
我也是遇到这个错误 错误解决了,首先这玩意不影响功能,可以理解为规范化编码的一个问题。 解决办法之前有位朋友提到了 把return ""; 换成return null 从而 problem solved
qq_21172157 2015-01-06
  • 打赏
  • 举报
回复
楼主解决了没,分享下呗,我也遇到到同样的问题
张余歌 2014-10-12
  • 打赏
  • 举报
回复
我也迷糊了,我只是在原基础上增加了一个功能而已
ws-小铁匠 2012-10-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

楼主,刚看你 ajax那块代码 datatype那里写着text 是不是这个原因呢? 还有检查一下服务器端 response的类型是不是设置成了 application/json 格式,因为你传递的是json ,响应给客户端的要写成application/json这个
[/Quote]

其实准确的说,我返回的是json字符串,
通过var page = eval("(" + res + ")");将它解析为json对象。

按你说的response.setContentType("application/json");了,还是会报异常。
xiaoluo501395377 2012-10-23
  • 打赏
  • 举报
回复
楼主,刚看你 ajax那块代码 datatype那里写着text 是不是这个原因呢? 还有检查一下服务器端 response的类型是不是设置成了 application/json 格式,因为你传递的是json ,响应给客户端的要写成application/json这个
ws-小铁匠 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

你的action中的返回值 是否为空值 return null; 如果不是 设置为null 试试看
[/Quote]

是return null的。

把action方法的返回值改为void也试过。

不行啊。

另外,我发现了如果在struts.xml里配置这个action的package 为 extends="json-default"后,没有报异常,但是在这个action配置的拦截器就不起作用了(因为是ajax请求)。

闹心啊。
ws-小铁匠 2012-10-23
  • 打赏
  • 举报
回复
额,这几天忙,没时间看贴。

还是没解决啊
那个问题不影响数据展示,暂时先让它过去了。

我还想问下,如果我不处理会导致什么后果吗/。
CodeImmortal 2012-10-21
  • 打赏
  • 举报
回复
你的action中的返回值 是否为空值 return null; 如果不是 设置为null 试试看
lzm3v3 2012-10-18
  • 打赏
  • 举报
回复
目测很有可能是多次调用了Response,判断方法很容易,用一下HttpWatch跟踪一下,看一下ajax调用了哪个页面,顺便还能知道是在哪个页面调用环节出错了
专坑队友 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
是否 response.getOutputStream() 和response.getWriter()同时调用了?
[/Quote]
++ 最好在写前 清空次 写后清空次
ws-小铁匠 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

多次response了?
[/Quote]

有可能,ajax经常出现发出两次请求的。

如何判断?
ws-小铁匠 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

JScript code

$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
dataType:"json",
beforeSend: function() {
//
},
success: function(data){
App.alert( "Data Saved: "……
[/Quote]

没有进入error
关键我是洛哥 2012-10-16
  • 打赏
  • 举报
回复

$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
dataType:"json",
beforeSend: function() {
//
},
success: function(data){
App.alert( "Data Saved: " + data);
},
error: function() {
App.alert("网络异常,请联系管理员!");
},
complete: function() {
//
}
});

用这个试试? 如果抛出异常 调用的是App.alert("网络异常,请联系管理员!");
zl-zero 2012-10-16
  • 打赏
  • 举报
回复
你是JSON返回数据的话,是尝试使用ajax中定义数据格式,然后还有个同步异步你尝试下
baiyangliu 2012-10-16
  • 打赏
  • 举报
回复
多次response了?
  • 打赏
  • 举报
回复
是否 response.getOutputStream() 和response.getWriter()同时调用了?

ws-小铁匠 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

调试的话,建议先把ajax请求搞的非常简单,看是否还是报这个错
[/Quote]

用firbug调试了,
在处理返回数据时抛了异常,即进入success方法时
success : function(res) {
var page = eval("(" + res + ")");
var list = page.result; // 获取数据

然后直接跳出这个方法了,但是为什么数据还能显示呢。
  • 打赏
  • 举报
回复
调试的话,建议先把ajax请求搞的非常简单,看是否还是报这个错

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧