java异常关于java.lang.stringIllegalStateException方面

关于java.lang.IllegalStateException异常的个人理解-Java/Web开发-java-电脑编程网关于java.lang.IllegalStateException异常的个人理解-Java/Web开发作者:CharmScorpioMan 和相关&&源码:&%@ page language=&& import=&.util.*& pageEncoding=&GB2312&%&&%@ include file=&inc.& %&&%String path = request.getContextPath();String basePath = request.getScheme()+&://&+request.getServerName()+&:&+request.getServerPort()+path+&/&;String name = request.getParameter(&name&);//注册用户名String pwd = request.getParameter(&pwd&);//密码String pwd1 = request.getParameter(&pwd1&);//密码确认String email = request.getParameter(&mail&);//邮箱if(name==&&||pwd==&&||pwd1==&&||email==&&||!pwd.equals(pwd1)){response.sendRedirect(path+&//regedit.jsp&);//信息不完整返回到注册页面[color=#FFFF00]//增加后解决}[/color]%&&!DOCTYPE HTML PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN&&&html&& &head&&
&base href=&&%=basePath%&&&&
&title&注册验证页面&/title&& &/head&& &%&
String uname = &scorpioman&;&
String upwd = &xuehu1104&;&
String sql = &select * from user_info_t where name='&+name+&'&;&
boolean success =//是否注册成功&
Class.forName(&.jdbc.driver.OracleDriver&);//加载驱动&
Connection conn = DriverManager.getConnection(&jdbc::thin:@localhost:1521:CHARM&,uname,upwd);//获得连接&
Statement stm = conn.createStatement();&
ResultSet rst = stm.executeQuery(sql);&
if(rst.next()) {&
response.sendRedirect(&regedit.jsp&);//用户名已经存在&
//System.out.println(&用户名称已经存在&);&
if(!rst.next()){&
sql = &insert into user_info_t(name,pwd,email) values('&+name+&','&+pwd+&','&+email+&')&;&
success = stm.execute(sql);&
//success =if(success){response.sendRedirect(&login.jsp&);}else{response.sendRedirect(&regedit.jsp&);}&
}catch(Exception e){&
e.printStackTrace();&
%&& &body&& &/body&&/html&异常:严重: Servlet.service() for servlet jsp threw exceptionjava.lang.IllegalStateExceptionat org..catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)at org..jsp.jsp.regedit_005faction_jsp._jspService(regedit_005faction_jsp.java:88)at org.apache.jer.runtime.HttpJspBase.service(HttpJspBase.java:70)at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)在自己做练习的时候发现以上的异常,百度好多次没找到其产生的原因,偶遇看到回帖说 在“response.sendRedirect(path+&/jsp/regedit.jsp&);”后加上&return&语句即可解决,尝试后果然问题解决。仔细阅读代码后发现 标注红色的 代码有可能同时执行,如果不加return,虽然页面重定向,但是代码依然继续执行。遇到第二个&response.sendRedirect&。如果同一个页面由于程序逻辑造成 两个“response.sendRedirect”同时执行会造成以上的错误。个人理解,但是具体原因不清楚,还请高人指点------回答---------------其他回答(40分)---------
的连接没有断开
相关资料:|||||||关于java.lang.IllegalStateException异常的个人理解-Java/Web开发来源网络,如有侵权请告知,即处理!编程Tags:                &                    11959人阅读
今天上午在测试某功能时启动tomcat发现异常如下:
严重: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'travel.root' = [D:\apache-tomcat-6.0.37\webapps\hljmobiletravel\] instead of [D:\apache-tomcat-6.0.37\webapps\hljmobiletravel myeclipse.bak\] - Choose unique values
for the 'webAppRootKey' context-param in your web.xml files!
at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:144)
at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:117)
at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
通过上网查找资料发现导致这个异常的原因,原来在tomcat的webapps目录下还存在一个hljmobiletravel myeclipse.bak,这个可能是由于关闭项目之后再次加载到tomcat里面生成的一个目录。解决这个异常最简单的方法就是:将hljmobiletravel myeclipse.bak删除。
原因是当在web.xml中没指定
&& &context-param&
&&& &&param-name&webAppRootKey&/param-name&
&&& &&param-value&AVerPortalTest&/param-value&
&&/context-param&
的时候按照默认的
或者在web.XML中添加webAppRootKey指定好
查看IllegalStateException源代码
public& static& void& setWebAppRootSystemProperty(ServletContext servletContext) throws& IllegalStateException& {&
&&&&&&& String& param = servletContext.getInitParameter(WEB_APP_ROOT_KEY_PARAM);&
&&&&&&& String& key = (param != null& ? param : DEFAULT_WEB_APP_ROOT_KEY);&
&&&&&&& String& oldValue = System .getProperty(key);&
&&&&&&& if& (oldValue != null ) {&
&&&&&&&&&&& throw& new& IllegalStateException (&WARNING: Web app root system property already set: && + key + & = && +&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& oldValue + & - Choose unique webAppRootKey values in your web.xml files!& );&
&&&&&&& }&
&&&&&&& String& root = servletContext.getRealPath(&/& );&
&&&&&&& if& (root == null ) {&
&&&&&&&&&&& throw& new& IllegalStateException (&Cannot set web app root system property when WAR file is not&
expanded&);&
&&&&&&& }&
&&&&&&& System .setProperty(key, root);&
&&&&&&& servletContext.log(&Set web app root system property: && + key + & = && + root);&
从代码看出,该方法其实就是把该web application的根目录的绝对文件路径作为属性保存在 System的属性列表中。该属性的名字,由web.xml文件中的名为&webAppRootKey&的参数值指出。如果不在web.xml中定义 webAppRootKey参数,那么属性名就是缺省的&webapp.root&.在我们的petclinic项目中已经定义了 webAppRootKey参数,其值为&petclinic.root&,因此,属性的名字就是&petclinic.root&.
最后将webAppRootKey项配置好,错误解决。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:56687次
排名:千里之外
转载:20篇
(3)(3)(3)(3)(3)(6)(5)android 修改listview中adapter数据时抛出异常java.lang.IllegalStateException: The content of ... - 推酷
android 修改listview中adapter数据时抛出异常java.lang.IllegalStateException: The content of ...
近日在做项目时遇到非必现crush,具体异常信息为:
// Short Msg: java.lang.IllegalStateException
// Long Msg: java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(, class android.widget.ListView) with Adapter(class com.baidu.smartcalendar.widget.cx)]
// Build Label: Coolpad/pxa1088dkb_def/.1/JOP40D/4.2.063.P1.0:user/release-keys
// Build Changelist: 4.2.016.P1.8750
// Build Time: 0
// java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(, class android.widget.ListView) with Adapter(class com.baidu.smartcalendar.widget.cx)]
//&at android.widget.ListView.layoutChildren(ListView.java:1559)
//&at android.widget.AbsListView.onTouchModeChanged(AbsListView.java:3313)
//&at android.view.ViewTreeObserver.dispatchOnTouchModeChanged(ViewTreeObserver.java:712)
//&at android.view.ViewRootImpl.ensureTouchModeLocally(ViewRootImpl.java:3078)
//&at android.view.ViewRootImpl.ensureTouchMode(ViewRootImpl.java:3062)
//&at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3206)
//&at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3169)
//&at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4300)
//&at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4279)
//&at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4371)
//&at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
//&at android.os.MessageQueue.nativePollOnce(Native Method)
//&at android.os.MessageQueue.next(MessageQueue.java:125)
//&at android.os.Looper.loop(Looper.java:124)
//&at android.app.ActivityThread.main(ActivityThread.java:5078)
//&at java.lang.reflect.Method.invokeNative(Native Method)
//&at java.lang.reflect.Method.invoke(Method.java:511)
//&at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:856)
//&at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)
//&at dalvik.system.NativeStart.main(Native Method)
异常的描述是不要在其他线程中修改listview的adapter数据而在ui线程中进行刷新notifyDataSetChanged()。我们一般为adapter添加数据时常常使用activity类内部的全局变量,这时在外部或其他线程中更新数据时,如果不及时刷新listview,就会抛出上述异常。于是我去掉线程,直接在ui线程中更新数据,发现问题依然存在。
仔细查看代码,我的代码是这样的:
private void prepareData(Calendar c) {
mTodayList = new ArrayList&SCEvent&();
mFutureList = new ArrayList&SCEvent&();
mList = new ArrayList&SCEvent&();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
ArrayList&SCEvent& list = SmartCalendarDB.getInstance(getActivity())
.getBirthdayLatest2(mCalendar.getTimeInMillis(),
cal.getTimeInMillis() != mCalendar.getTimeInMillis());
if(list != null && list.size() & 0) {
int month = mCalendar.get(Calendar.MONTH) + 1;
int day = mCalendar.get(Calendar.DAY_OF_MONTH);
for(SCEvent e : list) {
if(e.getmBirthdayMonth() == month && e.getmBirthdayDay() == day) {
mTodayList.add(e);
mFutureList.add(e);
if(mTodayList != null && mTodayList.size() & 0) {
Collections.sort(mTodayList, new TimeComparator());
for(SCEvent e : mTodayList) {
mList.add(e);
mList.add(null);
if(mFutureList != null && mFutureList.size() & 0) {
if(mTodayList == null || mTodayList.size() &= 0) {
mList.add(null);
Collections.sort(mFutureList, new AdvanceComparator());
boolean add = mList != null && mList.size() & 0;
for(SCEvent e : mFutureList) {
mList.add(e);
if(!add) {
mList.add(null);
if(mList != null && mList.size() & 0) {
mListView.setVisibility(View.VISIBLE);
mEmptyLayout.setVisibility(View.GONE);
mAdapter.notifyDataSetChanged();
mListView.setVisibility(View.GONE);
mEmptyLayout.setVisibility(View.VISIBLE);
我的adapter数据是保存在mlist中,而在代码中不断的改变了mlist内部的数据,而只在最后调用了一次mAdapter.notifyDataSetChanged(),导致listview没有及时刷新而抛出异常。
所以结论在使用listview时,及时不在非ui线程中更新adapter数据,也最好将数据直接定义在adapter类内部或在改变数据时要及时刷新listview,否则会抛出上述异常。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致查看: 115858|回复: 0
struts2下载附件以及java.lang.IllegalStateException异常解决办法
& && && & struts2下载文件
& && && && && & Action:package com.ifs.
import java.io.BufferedInputS
import java.io.F
import java.io.FileInputS
import java.io.InputS
import java.io.UnsupportedEncodingE
import javax.servlet.http.HttpServletR
import org.apache.struts2.ServletActionC
import com.ifs.dao.AdminD
import com.
import com.opensymphony.xwork2.ActionS
public class DownLoadAction extends ActionSupport {
& & & &
& & & & /**
& & & &&&*
& & & &&&*/
& & & & private static final long serialVersionUID = 1L;
& & & &
& & & & private String fileN
& & & &
& & & & @Override
& & & & public String execute() throws Exception {
& & & & & & & & return SUCCESS;
& & & & }
& & & &
& & & & public String getFileName() {
& && &&&return fileN
& & }
& & public void setFilenameInCN(String filenameInCN) throws UnsupportedEncodingException {
& & & & & & this.fileName = new String(filenameInCN.getBytes(&ISO-8859-1&),&UTF-8&);
& & public InputStream getInputStream() throws Exception {
& & & & & & //设置编码转换防止乱码
& & & & & &&&HttpServletResponse response = ServletActionContext.getResponse();& & & & & &
& & & & & &&&response.setHeader(&Content-Disposition&, &fileName=&
& && && && && &&&+ java.net.URLEncoder.encode(fileName,&UTF-8&));
& & & & & &&&
& && && &return new BufferedInputStream(new FileInputStream(fileName));
& & }
}复制代码 struts.xml& && &&action name=&download& class=&com.ifs.util.EvenDownload&&
& && && && &&result name=&success& type=&streamx&&
& && && && && & &param name=&contentType&&application/octet-stream&/param&
& & &param name=&inputName&&inputStream&/param&
& & &param name=&bufferSize&&4096&/param&& && && && && &
& && && && &&/result&
& && && & &/action& 复制代码contentType有多个属性,比如text/plain是文本类型,具体大家可以查看相关文档(& &里面有详细的contentType类型),application/octet-charset=ISO8859-1是所有的文件的类型,以流的方式读取。
ontentDisposition表示下载文件的处理方式,有inline(默认)和attachment两种。若指定为inline模式,浏览器会先尝试直接打开文件,无法直接打开则弹出保存对话框;attachment模式则直接弹出文件保存对话框。
inputName表示下载文件的来源流。若inputName取值为downloadFile,则在相应的action类中必须有一个返回类型为InputStream的getDownloadFile方法来返回下载的文件入口。
filename=&${filenameInCN}&,filename是下载文件的名称,可以随便制定。
读取项目中的源文件返回InputStream类型
ServletActionContext.getServletContext().getResourceAsStream(&/upload/123.txt&);
获取项目的根目录
String path = ServletActionContext.getServletContext().getRealPath(&/&);
Struts2 下载取消报异常(java.lang.IllegalStateException)最终解决办法
&&在struts2中使用result里type=&stream&的结果类型时,可以实现文件的下载管理,使用时也是比较顺畅,但是当在“下载提示窗口”中点击“取消按钮”时,总是报出“java.lang.IllegalStateException”异常,异常内容如下02.严重: Servlet.service() for servlet default threw exception&&03.java.lang.IllegalStateException&&04.& & at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)&&05.& & at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108)&&06.& & at com.opensymphony.module.sitemesh.filter.PageResponseWrapper.sendError(PageResponseWrapper.java:176)&&07.& & at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108)&&08.& & at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770)&&09.& & at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)&&10.& & at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)&&11.& & at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)&&12.& & at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&&13.& & at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)&&14.& & at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)&&15.& & at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)&&16.& & at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&&17.& & at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)&&18.& & at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)&&19.& & at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&&20.& & at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)&&21.& & at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)&&22.& & at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)&&23.& & at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)&&24.& & at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)&&25.& & at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)&&26.& & at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)&&27.& & at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)&&28.& & at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)&&29.& & at java.lang.Thread.run(Thread.java:662)&&复制代码异常原因分析:
&&stream对应的类是org.apache.struts2.dispatcher.StreamResult,该类的处理过程如下:
1。配置其中result标签下的各个参数
2。从服务器中获取输入流,并同时与客户端建立输出流(服务器与客户端链接通过Socket进行连接)
3。当点击“保存”或“打开”时,开始传输数据。如果点击“取消”,关闭所有的流。
&&这里要注意的是,但是实际发现Socket并没有断开!并且流也没有关闭!这一点非常重要!
&&所以在JSP容器通过Response获取输出流之前,前面的流并没有关闭,所以会造成该异常的报出。
& &解决办法
这里提供一个办法可以从根本上解决该问题,但是需要下载插件,在附件中有下载,这个插件很小,才4KB而已。
& &(文章最后附件里面有jar包,可以下载)
&&具体做法如下:
1。将附件解压获取struts2-sunspoter-stream-1.0.jar,并复制在/WEB-INF/lib下
2。在原有的struts.xml的基础上进行相应的配置,配置如下例
& && & &result-types&& &
& && && && & &result-type name=&streamx& class=&com.sunspoter.lib.web.struts2.dispatcher.StreamResultX&/&& &
& && && & &/result-types&
&&&action name=&workdownload& class=&com.ifs.util.WorkDownload&&
& && && && &&result name=&success& type=&streamx&&
& && && && && &&&&!-- 下载文件类型定义 --&
& && && && && &&&&param name=&contentType&&application/octet-stream&/param&
& && && && && &&&&!-- 下载文件输出流定义 --&
& && && && && &&&&param name=&inputName&&inputStream&/param&
& && && && && &&&&!-- 下载文件的缓冲大小 --&
& && && && && &&&&param name=&bufferSize&&4096&/param&
& && && && &&/result&&&复制代码在这种方式下,只需添加一个result-type,将原有的result中type改为“streamx”,其他一律不变,在这种情况下,点击“取消”的同时也关闭了流,不会再报出该异常。
&&之后的执行“取消”后的结果如下:(配置了&log4j.properties&才能看到该结果)
21:23:44,676&&WARN StreamResult:45 - StreamResultX Warn : socket write error
&&如果出现该警告说明正确执行,该警告说明,Socket非正常中断,但是流确实已经关闭,自此再也不用看到上面出现的讨厌异常结果。
struts2-sunspoter-stream-1.0jar& &
17:42 上传
点击文件名下载附件
4.61 KB, 下载次数: 9040
上一篇:下一篇:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&

我要回帖

更多关于 java lang包 的文章

 

随机推荐