response.sendRedirect问题

tianxiehuiyuan123 2012-03-18 05:53:23
isExit.jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
//该页面的作用是通过判断session中的属性值来阻止直接通过访问url绕过登陆界面的行为

if(session.getAttribute("userID") == null){
response.sendRedirect("/CoursewareSystem/login.jsp");
System.out.println("为空");
return;
}
%>

logout.jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println("注销前session的ID:"+session.getId());
session.invalidate();
response.sendRedirect("/CoursewareSystem/login.jsp");
%>

在这两个文件中的sendRedirect都可以跳转,但当我在logout文件中的sendRedirect后加上return语句,则会报错
错误信息:
An error occurred at line: 9 in the jsp file: /logout.jsp
Unreachable code
6: session.invalidate();
7: response.sendRedirect("/CoursewareSystem/login.jsp");
8: return;
9: %>
10:
11:


Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
很是不解,为什么一个加上可以,另一个加上不可以???




...全文
216 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dryZeng 2012-03-19
  • 打赏
  • 举报
回复
jsp本身就要被编译成servlet的java文件,你可以在Tomcat\work\Catalina\localhost\你的工程\org\apache\jsp下面去找到你这jsp相对应的xxxx_jsp.java文件。

你想想,你在一个方法中写一个if里面写return,它不会报错。但如果你方法里面没有if控制转向,面直接在程序中间直接写个return,后面的还执行么?这样编译就会报错。

你第二个就是这种情况,虽然你的逻辑结束了,你觉得应该return了,但jsp本身还有些事情要处理,它还没结束。所以这里你不能写return。jsp结束后它自己会return。

如果你在第一个if后面写一个return,它一样的会错。
magong 2012-03-19
  • 打赏
  • 举报
回复
反正
第一,不需要return
第二,如果想加return,至少要做到不妨碍编译。因为JSP页面在脚本后面还需要做些事情,所以写return提前返回就会引起JSP的影子Servlet编译报错。
greency 2012-03-19
  • 打赏
  • 举报
回复
前一个return 是在 if 里面 执行完if 里面的操作 即使还有其他操作 也不会再向下执行;后一个不存在条件关系 执行重定向就是最后的操作 ,为何要return?有何用意?

81,092

社区成员

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

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