你帮我改好,我给你讲个笑话可好TUT

亡灵S 发布于 2013/08/21 17:14
阅读 1K+
收藏 1

大体思路是这样,form.jsp包含了一个calculate.jsp页面对form表单里面输入的数据进行取整,发生异常则跳到exception进行捕获。

但现在问题来了,在exception页面 客户端跳转到index.jsp页面无反应,服务器跳转虽成功跳转却报异常:

SEVERE: Exception initializing page context
java.lang.StackOverflowError
球确实可行的解决办法,谢谢!

项目我传百度云了,如果有愿意用电脑实际操作帮我调一下的,不胜感激TUT(当然是你们有空的话

http://pan.baidu.com/share/link?shareid=2635217971&uk=3071552290

form.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'form.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    This is my JSP page. <br>
    <form action="">
    <input type="text" name="number" value="0"/>
    <br>
    <input type="submit" value="提交" name="sub">
    </form>
    <%
    	if(request.getParameter("sub")==null)
    	{
    		out.print("没提交");
     	}
     	else
     	{
     	String s=request.getParameter("number");
     %>
     
     <jsp:include page="calculate.jsp">
     	<jsp:param value="<%=s%>" name="ps"/>
     </jsp:include>
     
     <%} %>
  </body>
</html>

calculate.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1" errorPage="exception.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'calculate.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    This is my JSP page. <br>
    <%
    	int sIn=Integer.parseInt(request.getParameter("ps"));
    	out.print("<font color='red'>"+sIn+"</font>");
     %>
  </body>
</html>
 

exception.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'exception.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    This is my JSP page. <br>
    <%=exception.getLocalizedMessage() %>
    <%
    	
     String str=request.getParameter("ps");
     out.print("看看"+str);
     //客户端跳转不行,没有丝毫反应
     //response.sendRedirect("index.jsp");
    //服务器端跳转这句话可以.但会报好长好长的异常。TUT,java.lang.StackOverflowError
     request.getRequestDispatcher("form.jsp").forward(request,response);
     
     %>
  </body>
</html>

加载中
0
伊藤熊吉
伊藤熊吉
因为你把form.jsp的请求直接给了form.jsp,我的理解是,连带着把错误的信息也给了forms.jsp,forms.jsp就会产生异常所以不停的error.jsp,来回迭代,我昨天看了他的代码,把request.getRequestDispatcher("form.jsp").forward(request,response);中的form.jsp改成index.jsp就完全正常了,至于你说想跳回form.jsp,你应该用重定向,而不是跳转,你看到的重定向每反应,是因为
//int sIn=Integer.parseInt(request.getParameter("ps"));
    	Object sIn = request.getParameter("ps");
    	out.print("<font color='red'>"+sIn+"</font>");
这里出了问题,前面转换出了问题,他就直接输出中断了.所以你觉得没反应,就是这样,如果没错的话就给个最佳答案?
1
银古
银古

楼主,这没法改的,为什么呢

你用服务器跳转,就是forward回去,url是不变的,所以你回去了还是提交了那个错误的num,url一直是http://localhost:8080/Test/form.jsp?number=s&sub=提交 一直是错的,所以就报错

你用客服端跳转,就是sendRedirect,由于你errorPage没有向服务器响应,当然就不会有response,所以跳转失败。因为isErrorPage这种方法,只向服务器发送一次响应,就是那个错误页form发出的,你把跳转sendRedirect写在error那,error都没向服务器发送响应当然就不会跳转啦,你可以自行输入http://localhost:8080/Test/exception.jsp,这样它客户端跳转就能跳转了,原因是它发送了响应

(更正:客户端跳转时,估计是动态载入与sendRedirect有冲突,所以跳转不了。

伊藤熊吉
伊藤熊吉
我估计lz看不懂
0
伊藤熊吉
伊藤熊吉

客户端跳转地址是不是对的捏?

0
亡灵S
亡灵S

引用来自“伊藤熊吉”的答案

客户端跳转地址是不是对的捏?

是正确的,其实是应该写form.jsp页面的,但是也不好使,就又试了试index.jsp页面,这两个页面都是有效的TUT
0
伊藤熊吉
伊藤熊吉
目录结构是怎么样的
0
亡灵S
亡灵S

引用来自“伊藤熊吉”的答案

目录结构是怎么样的

好人,我可以厚脸皮的说,我把这个小程序发给你行么TUT

亡灵S
亡灵S
回复 @Gelopa : 我是能想的都已经想了,自己是实在弄不出来了,上网也查了,没看到和我这个类似的。。只好脸皮厚点儿了》《
金贞花
金贞花
这个脸皮好厚啊。不过没事,开始么不会就要问
0
jaryhawk
jaryhawk

首先不是很熟悉errorPage="exception.jsp"的用法。

根据我自己的理解,在调用sendredirect()前,在前一个response处理出现异常才会调转到error page. 所以response的操作已经完成,不会再有response的跳转。

如果我没有理解错误的话,应该是在当前form.jsp的form中向form.jsp进行跳转,就相当于对本身进行实例化,肯定是stackoverflow了。

不知道解释清楚没有。

0
伊藤熊吉
伊藤熊吉
发我吧,邮箱:fuxinlei001@126.com
0
亡灵S
亡灵S

引用来自“伊藤熊吉”的答案

发我吧,邮箱:fuxinlei001@126.com
谢谢你!!!我已经发过去了,才回家,发晚了,对不起!
0
亡灵S
亡灵S

引用来自“jaryhawk”的答案

首先不是很熟悉errorPage="exception.jsp"的用法。

根据我自己的理解,在调用sendredirect()前,在前一个response处理出现异常才会调转到error page. 所以response的操作已经完成,不会再有response的跳转。

如果我没有理解错误的话,应该是在当前form.jsp的form中向form.jsp进行跳转,就相当于对本身进行实例化,肯定是stackoverflow了。

不知道解释清楚没有。

根据我自己的理解,在调用sendredirect()前,在前一个response处理出现异常才会调转到error page. 所以response的操作已经完成,不会再有response的跳转。

————--————————

我当时就怀疑是不是errorpage造成的,所以我就试验了一下,建了一个changeToInteger.jsp(errorpage="exception.jsp",这个表示changeToInteger.jsp此页面有可能发生异常)里面进行对传来的字符串a取整,发生异常跳转到exception.jsp页面(isErrorPage="true",这个表示exception.jsp是输出异常页面)。在exception.jsp页面里写了跳转语句。

然后我再浏览器输入了...changeToInteger.jsp?a=uuuu 结果发现可以跳转。

至于你说的第二个,我再试一试。。谢谢了!

返回顶部
顶部