Jsp中使用return时应注意

Jsp 中使用return 时应注意

最近在修改产品的bug ,遇到一个bug 是这样的。访问一个页面的时候,发现该页面中的一个椭圆形的下边框(border-bottom )没了,查看下jsp 中的代码,没有发现什么问题。

通过开发人员工具发现,产生的这段html 代码不完整,经过比较产生的html 代码与jsp 中的业务逻辑,最终找到了产生问题的原因。页面中的代码结构大概是这样的:

<%

        if( 记录数>0){

            // 遍历记录,并展示在页面中

    %>

           

    <%

        else{  

    %>

            当前系统没有记录

    <%

            return;

        }//end esle

    %>

<!— 展现椭圆形的下边框代码 -->

……

当记录数为0 的时候,代码将走else 分支,在该分支中,输出“当前系统没有记录”后直接return 了,导致后面的蓝色代码不会输出。

 

原因分析:

我们都知道,jsp 是先被编译成.java 文件,然后被编译成.class 文件,最终由java 虚拟机执行.class 文件,并输出内容返回给页面。到work 目录下,用editplus 打开一个编译后的.java 文件,代码如下:

public void _jspService(HttpServletRequest request, HttpServletResponse response)

        throws java.io.IOException, ServletException {

 

out.write("<!--/r/n");

……

if( 记录数>0){

    // 遍历记录

}else{

     Out.write(“ 当前系统没有记录”);

Return;

}

Out.write(“<!— 展现椭圆形的下边框代码 --> ”);

// 其他代码

……

}// 方法结束

通过上面的代码,当执行到else 的分支的时候,直接执行return 函数返回到函数_jspService 的入口,所以后边的代码都不会执行,也就是文本流只能输出到return 的位置。所以在浏览器上我们将会看到返回的html 代码不是很完整,因为我们的本意是即使记录数为0 也需要输出椭圆形的下边框html 代码。在这里,注释掉return 行的代码即可。

同理,当在 jsp 中,如果我们需要执行服务器端跳转的时候,需要在相应的跳转逻辑后加上 return 关键字,以防止 jsp 中后面的业务代码还在执行。如下图:

  

                   if ( 满足跳转条件 ){

                            request.getDispatcher("http://www.baidu.com").forward(request,reponse);

                            return ; // 这里需要增加 return ,防止 jsp 后面的代码还要执行,实际上后面代码执行已经没有意义

                   }       

                  // 其他代码

                   // 执行其他逻辑操作……

         %>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

O溺水的鱼0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值