Java IF语句在JSP中错误执行

Java IF语句在JSP中错误执行,java,mysql,jsp,if-statement,Java,Mysql,Jsp,If Statement,这是我的JSP代码,用于使用数据库获取一顿饭的结束时间,并将其与系统时间进行比较。我使用了if语句来查看时间是否在结束时间之前,重定向到另一个页面,但如果时间超过了一顿饭的结束时间,则显示一个错误 这里有一个陷阱,if语句是有效的,但不是以我刚才解释的方式 有什么想法吗?先谢谢你 <%@page contentType="text/html" pageEncoding="UTF-8"%> <%@page import="java.sql.*" %> <!DOCTYP

这是我的JSP代码,用于使用数据库获取一顿饭的结束时间,并将其与系统时间进行比较。我使用了if语句来查看时间是否在结束时间之前,重定向到另一个页面,但如果时间超过了一顿饭的结束时间,则显示一个错误

这里有一个陷阱,if语句是有效的,但不是以我刚才解释的方式

有什么想法吗?先谢谢你

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.*" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <%
        String meal = request.getParameter("meal");

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try{
            con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/eoms?autoReconnect=true&useSSL=false","root","eoms");
                 st=con.createStatement();

               String select="SELECT * FROM eoms.schedule;";

                rs = st.executeQuery(select);

                String mealName = null;
                Time dueTime = null;
                Time time = null;
                int found = 0;

                while(rs.next()){
                    mealName = rs.getString(1);
                    dueTime = rs.getTime(3);
                    java.util.Date d = new java.util.Date();
                    time = new Time(d.getTime());

                    if(meal.equalsIgnoreCase(mealName) && time.before(dueTime)){
                        session.setAttribute("mealName", mealName);
                        con.close();
                        found = 1;
                        response.sendRedirect("header.jsp");
                    }
                    else
                        continue;
                }
                if(found == 0){
                    session.setAttribute("orderror",meal+mealName+time+dueTime+ "The time for taking the order is over...");
                    con.close();
                    response.sendRedirect("placeOrder.jsp");
                }
        }
        catch(Exception e){
            out.println(e.getMessage());
        }
        %>
    </body>
</html>

如注释中提到的@Andreas,在
响应之后添加
中断
。sendRedirect(“header.jsp”)
并删除
,否则继续

对于其余部分,我建议使用
java.time.LocalTime
获取实际时间,并使用此
time.valueOf(java.time.LocalTime.now())将其转换为
java.sql.time

将最后一个java代码替换为

 <%
        String meal = request.getParameter("meal");

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        try{
            con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/eoms?autoReconnect=true&useSSL=false","root","eoms");
            st=con.createStatement();

            String select="SELECT * FROM eoms.schedule;";

            rs = st.executeQuery(select);

            String mealName = null;
            Time dueTime = null;
            Time time = null;
            int found = 0;

            while(rs.next()){
                mealName = rs.getString(1);
                dueTime = rs.getTime(3);
                time = Time.valueOf( java.time.LocalTime.now() );
                if(meal.equalsIgnoreCase(mealName) && time.before(dueTime)){
                    session.setAttribute("mealName", mealName);
                    con.close();
                    found = 1;
                    response.sendRedirect("header.jsp");
                    break;
                }
            }
            if(found == 0){
                session.setAttribute("orderror",meal+mealName+time+dueTime+ "The time for taking the order is over...");
                con.close();
                response.sendRedirect("placeOrder.jsp");
            }
        }
        catch(Exception e){
            out.println(e.getMessage());
        }
%>


Add
break
after
response.sendRedirect(“header.jsp”)——去掉那些愚蠢、多余的
,否则继续,因为循环会在下一行中自动继续
}
。最好从服务器端建立数据库连接,而不是在JSP页面上完成所有操作。您可以在servlet中进行处理,设置所需的会话属性,然后尝试从sessionScope内置int变量在JSP中获取它们。这将提高可读性。谢谢大家,但问题是通过使用
LocalTime
代替我使用的
getTime()
解决的。你能说出背后的原因吗?非常感谢@Bashir。原来问题只是我必须使用
LocalTime
而不是
getTime()
。但是你能说出它背后的逻辑吗?
java.util.Date
getTime()方法返回自1970年1月1日、00:00:00 GTM和
LocalTime.now()以来的毫秒数
用于从默认时区的系统时钟获取当前时间。是否可以比较
日期
本地日期
是否相等?我正在努力,但做不到。你能建议一些方法吗?感谢将
Date
转换为
LocalDate
,然后进行比较