0

我的问题再次与我正在为报告跟踪系统执行的同一项目相关,在访问重定向到“userloginmid.jsp”的登录页面后,tomcat 日志中出现以下错误。代码如下所示在同一窗口中。

如果可能,请提供相同的解决方案。

<%@ page import="java.sql.*,java.util.*,java.text.*,java.text.SimpleDateFormat" %>
<%

  String userName = request.getParameter("userName");
  String password = request.getParameter("password");

    System.out.println("MySQL Connect Example.");
    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "report_tracking";
    String driver = "com.mysql.jdbc.Driver";
    String username = "root"; 
    String userPassword = "root";

      java.util.Date now = new java.util.Date();
      String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss";
      SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);

    String strDateNew = sdf.format(now) ;


    try {
      Class.forName(driver).newInstance();
      conn = DriverManager.getConnection(url+dbName,username,userPassword);
      Statement st = conn.createStatement();
      String strQuery = "select * from userregister where username='"+userName+"' and password='"+password+"'"; 
      out.println(strQuery);
      ResultSet rs = st.executeQuery(strQuery);

       if(rs.next())
        {

            int userid=rs.getInt(1);
            String user=rs.getString(2);

            session.setAttribute("userid",userid);
            session.setAttribute("username",user);
            session.setAttribute("intime",strDateNew);

            String queryString = "INSERT INTO admin set userid="+userid+",intime='"+strDateNew+"'";
            int i = st.executeUpdate(queryString);

            if(i>0)
            {
                response.sendRedirect("welcome.jsp");
            }

        }

        response.sendRedirect("login.jsp");
        conn.close();

    } catch (Exception e) {
      e.printStackTrace();
    }
 %> 
4

2 回答 2

0

你的代码有很多问题。

首先,对您陈述的问题的解释,在提交响应后重定向:

当 HTTP 标头已经发送到客户端时(如果您还不知道,请阅读有关 HTTP 协议的信息),它们已经被发送出去并且不能被拉回。您在 jsp 中对示例进行编码,这是架构的 VIEW 部分 - 至少在“页面导入”和代码部分之间有一个换行符,可能会触发服务器将其缓冲区刷新到客户端。完成后,HTTP 标头就消失了,您不能再重定向了。

解决方法:不要在 jsp 中实现此例程,而是在 servlet 中实现(或使用为您处理此问题的体面的框架。任何当前都足够了)。

现在谈谈您的代码存在的一些问题:

  • 请阅读有关SQL 注入的信息。想想有人发布类似someone'; someone' OR '0' = '0或类似的用户名(只是在我去的时候编造它们)
  • 一旦您获得连接并遇到任何错误,您将不会清理连接(例如,您将在任何异常情况下泄漏连接)
  • 您似乎正在存储明文密码。绝对不行,因为除了您之外的其他人将拥有一个帐户
于 2013-03-11T08:43:10.113 回答
0

loopholes正如所有人所说,您的代码中有很多内容。

但你的问题的答案是

sendRedirect requires a return statement

因此,将您的代码行更改为

response.sendRedirect( "welcome.jsp"); return;

response.sendRedirect("login.jsp"); return;

也读这个

于 2013-03-11T10:12:07.583 回答