Jsp中使用return时应注意

9 篇文章 0 订阅

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 后面的代码还要执行,实际上后面代码执行已经没有意义

                   }       

                  // 其他代码

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

         %>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSP使用循环判定用户是否登录成功的方法与判断用户登录失败的方法类似,具体实现步骤如下: 1. 在JSP页面使用表单提交用户登录信息到Servlet。 2. 在Servlet,获取用户输入的用户名和密码,并进行验证。 3. 如果验证成功,则将一个名为“loginSuccess”的属性设置为true,并将用户输入的用户名保存在一个名为“username”的属性。 4. 将请求重定向回原来的JSP页面,并将“loginSuccess”和“username”属性传递给JSP页面。 5. 在JSP页面使用Java代码判断是否存在“loginSuccess”属性,如果存在,则说明用户登录成功,需要给出相应提示信息,并显示登录用户的用户名。 6. 使用循环语句(如while或for循环)来判断用户是否已经连续多次登录失败,如果超过一定次数,则需要给出相应提示信息,并禁用登录功能。 下面是一个简单的示例代码,用于在JSP循环判定用户是否登录成功: <% // 获取登录失败的次数 Integer loginCount = (Integer) session.getAttribute("loginCount"); if (loginCount == null) { loginCount = 0; } // 判断是否超过最大登录失败次数 if (loginCount >= 3) { out.println("您已经连续登录失败" + loginCount + "次,账号已被锁定!"); return; } // 获取登录成功的标记并显示相应提示信息 Boolean loginSuccess = (Boolean) request.getAttribute("loginSuccess"); if (loginSuccess != null && loginSuccess) { out.println("欢迎您," + request.getAttribute("username") + "!"); } %> <form action="loginServlet" method="post"> 用户名:<input type="text" name="username" value="<%= request.getAttribute("username") %>"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> 在上面的示例,我们同样使用了一个名为“loginCount”的Session属性来记录用户登录失败的次数,以及一个名为“loginSuccess”的请求属性来标记用户是否登录成功,并将登录用户的用户名保存在名为“username”的请求属性,以便在登录成功后显示欢迎信息。注意,上面的代码仅供参考,实际应用需要根据具体需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值