关于java.lang.IllegalStateException 异常的个人理解

CharmScorpioMan 2010-06-05 05:11:39
源码:
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%@ include file="inc.jsp" %>
<%
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+"/jsp/regedit.jsp");//信息不完整返回到注册页面
[color=#FFFF00]return;
//增加后解决
}[/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 = false;//是否注册成功
try{
Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动
Connection conn = DriverManager.getConnection("jdbc:oracle: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 = true;
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 exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
at org.apache.jsp.jsp.regedit_005faction_jsp._jspService(regedit_005faction_jsp.java:88)
at org.apache.jasper.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”同时执行会造成以上的错误。
个人理解,但是具体原因不清楚,还请高人指点
...全文
188 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
CharmScorpioMan 2010-06-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaohuanjie 的回复:]
数据库的连接没有断开
[/Quote]
谢谢!
xiaohuanjie 2010-06-05
  • 打赏
  • 举报
回复
数据库的连接没有断开

81,114

社区成员

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

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