Java y: 时间: 房间:

Java y: 时间: 房间:,java,database,forms,jsp,servlets,Java,Database,Forms,Jsp,Servlets,一般来说,您发布的代码有更多的改进空间,但我建议您不要像现在这样接受异常: }catch (SQLException e) { } catch (Exception e) { } 由于未设置属性(null),它可能表示try-catch块中的代码出现了问题 我认为会话中的用户ID也可能为null 尝试添加更多详细的输出(如println),这将为您提供有关代码中数据流的更多详细信息 那是家庭作业吗?如果这是要在生产中使用的东西-哎哟,应该完全重写。一般来说,您发布的代码有更多的改进空间,但

一般来说,您发布的代码有更多的改进空间,但我建议您不要像现在这样接受异常:

}catch (SQLException e) {
} 
catch (Exception e) {
} 
由于未设置属性(null),它可能表示try-catch块中的代码出现了问题

我认为会话中的用户ID也可能为null

尝试添加更多详细的输出(如println),这将为您提供有关代码中数据流的更多详细信息


那是家庭作业吗?如果这是要在生产中使用的东西-哎哟,应该完全重写。

一般来说,您发布的代码有更多的改进空间,但我建议您不要像现在这样忽略异常:

}catch (SQLException e) {
} 
catch (Exception e) {
} 
由于未设置属性(null),它可能表示try-catch块中的代码出现了问题

我认为会话中的用户ID也可能为null

尝试添加更多详细的输出(如println),这将为您提供有关代码中数据流的更多详细信息


那是家庭作业吗?如果这是要在生产中使用的东西,哎哟,应该完全重写。

这段代码有严重的安全缺陷。您正在从用户处获取输入,并将其传递到数据库查询中,但未设置任何文本:

day = request.getParameter("day"); 
time = request.getParameter("time"); 
room = request.getParameter("room"); 

sql = "INSERT INTO lab" + 
              " (capacity, day, time, room, subject_id, user_id)" + 
              " VALUES" + 
              " ('" +  capacity + "'," + 
                 " '"  +  day + "'," + 
                 " '"  +  time + "'," + 
                 " '"  + room + "','" + subject_id + "','" + user_id + "')"; 
int i = s.executeUpdate(sql);
这可以通过攻击加以利用。攻击者可以通过向表单传递意外的内容来损害数据库

使用事先准备好的语句更安全(更整洁):

sql = "INSERT INTO lab" + 
              " (capacity, day, time, room, subject_id, user_id)" + 
              " VALUES (?, ?, ?, ?, ?, ?)"; 
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setInt(1,   capacity );
// set the rest.
int i = stmt.executeUpdate(sql);

为了避免出现
NullPointerException
,可以在try块之前初始化
list1
list2
,然后在捕获之后使用它们设置属性。这样,当try中出现错误时,您的表单至少会得到一个空列表。

此代码中存在严重的安全漏洞。您正在从用户处获取输入,并将其传递到数据库查询中,但未设置任何文本:

day = request.getParameter("day"); 
time = request.getParameter("time"); 
room = request.getParameter("room"); 

sql = "INSERT INTO lab" + 
              " (capacity, day, time, room, subject_id, user_id)" + 
              " VALUES" + 
              " ('" +  capacity + "'," + 
                 " '"  +  day + "'," + 
                 " '"  +  time + "'," + 
                 " '"  + room + "','" + subject_id + "','" + user_id + "')"; 
int i = s.executeUpdate(sql);
这可以通过攻击加以利用。攻击者可以通过向表单传递意外的内容来损害数据库

使用事先准备好的语句更安全(更整洁):

sql = "INSERT INTO lab" + 
              " (capacity, day, time, room, subject_id, user_id)" + 
              " VALUES (?, ?, ?, ?, ?, ?)"; 
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setInt(1,   capacity );
// set the rest.
int i = stmt.executeUpdate(sql);

为了避免出现
NullPointerException
,可以在try块之前初始化
list1
list2
,然后在捕获之后使用它们设置属性。这样,当尝试中出现问题时,您的表单至少会得到一个空列表。

首先,在使用此属性之前,您将如何获得属性(res1和res2)?假设要正确设置此属性。。。。确保在使用此属性之前,您正在使用get方法调用CreateLab servlet

我想更正你程序中的一些代码

Dont open DB connection so many time, if you are open then you must close.
列表中的重复项

list1.add(res.getString(1));
list2.add(res.getString(2));
System.out.print(list1.add(res.getString(1)));
System.out.print(list2.add(res.getString(2)));
在上面使用以下命令

list1.add(res.getString(1));
list2.add(res.getString(2));
System.out.print(res.getString(1));
System.out.print(res.getString(2));
使用prepared语句避免sql注入


检查参数….

首先,在使用此选项之前,您将如何获取属性(res1和res2),假设要正确设置此属性。。。。确保在使用此属性之前,您正在使用get方法调用CreateLab servlet

我想更正你程序中的一些代码

Dont open DB connection so many time, if you are open then you must close.
列表中的重复项

list1.add(res.getString(1));
list2.add(res.getString(2));
System.out.print(list1.add(res.getString(1)));
System.out.print(list2.add(res.getString(2)));
在上面使用以下命令

list1.add(res.getString(1));
list2.add(res.getString(2));
System.out.print(res.getString(1));
System.out.print(res.getString(2));
使用prepared语句避免sql注入



检查参数……

此代码在doGet()方法中是否存在SQL注入缺陷。使用准备好的语句:哪一行导致了NullPointerException?for(int i=0;i)并且您确定数据库调用返回了一个列表?您是否尝试调试代码?代码中还有一些其他问题,例如线程安全(Servlet中的实例变量)。如果出现数据库错误,您的JSP几乎总是会抛出一个NPE,因为列表可能没有设置…是的,数据库应该抛出2个结果此代码在doGet()方法中存在SQL注入缺陷。请使用准备好的语句:哪一行导致NullPointerException?对于(int i=0;i您确定数据库调用返回了一个列表吗?是否尝试调试代码?代码中还有一些其他问题,如线程安全(Servlet中的实例变量)。如果出现数据库错误,您的JSP几乎总是会抛出一个NPE,因为列表可能没有设置…是的,数据库应该会显示2个结果是的,家庭作业-组分配只是尝试使用下拉框添加一些额外的内容。检查是否没有异常,只需添加e.prinStackTrace()在空的catch blocks.org.apache.jasper.JasperException:java.lang.NullPointerException org.apache.jasper.servlet.JspServletWrapper.handleJSPEException(JspServletWrapper.java:534)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)org.apache.jasper.servlet.servlet.JspServletWrapper.jspFile(JspServlet.java:391)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)javax.servlet.http.HttpServlet.service(HttpServlet.java:722)根原因请检查服务器控制台或日志,您在此处发布的异常来自JSP页面本身是的,家庭作业-组分配只是尝试使用下拉框添加一些额外的内容。检查是否没有异常,只需添加e.prinStackTrace()在空的catch blocks.org.apache.jasper.JasperException:java.lang.NullPointerException org.apache.jasper.servlet.JspServletWrapper.handleJSPEException(JspServletWrapper.java:534)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)org.apache.jasper.servlet.servlet.JspServletWrapper.jspFile(JspServlet.java:391)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)javax.servlet.http.HttpServlet.service(HttpServlet.java:722)根本原因请检查服务器控制台或日志,您在此处发布的异常来自JSP页面本身遵循jdevelop答案中的建议,调试try块中的代码,检查您的
user\u id
值,检查您是否进入
if(res.next())
块。遵循advi