2013-03-11 29 views
0

我的問題與我正在爲報表跟蹤系統獲取以下錯誤信息的tomcat日誌訪問重定向到「 userloginmid.jsp「。代碼如下所示在同一個窗口中。在提交響應之後獲取無法調用sepirectirect()

如果可能,請提供相同的解決方案。

<%@ 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(); 
    } 
%> 
+0

沒有足夠的細節來回答你的問題。每個問題在這裏被視爲獨立的實體。 – 2013-03-11 08:16:46

回答

0

由於所有說,有你的代碼很多loopholes

但回答你quesion是

sendRedirect requires a return statement 

因此改變你的代碼行

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

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

又讀this

+0

嘿蘇雷什感謝您的建議,但其實際上不工作 – 2013-03-12 07:06:02

+0

意味着仍然有相同的例外? – 2013-03-12 07:07:39

+0

是在catalina服務器日誌中仍然收到相同的錯誤代碼 – 2013-03-12 07:26:48

0

你的代碼有很多問題。

首先,您所陳述的問題的說明,提交響應後重定向:

當HTTP標頭已經發送給客戶端(閱讀有關HTTP協議,如果你不知道它),他們出去,不能被拉回來。您正在將樣本編碼到您的架構的VIEW部分 - 至少在「頁面導入」和代碼部分之間有一個可能觸發服務器將緩衝區刷新到客戶端的換行符。一旦完成,HTTP標頭消失了,你不能再重定向了。

解決方法:不要在jsp中實現這個例程,而是在一個servlet中實現(或者使用一個體面的框架來處理這個問題,任何當前的就足夠了)。

現在一些有關你的代碼有問題:

  • 請閱讀有關SQL injection。認爲有人張貼 用戶名像someone';someone' OR '0' = '0或類似(只是 做起來,因爲我去)
  • 的一旦你的連接,以及任何錯誤運行,你會不乾淨 建立連接(例如,你會泄漏任何例外情況下的連接)
  • 您似乎在存儲明文密碼。這絕對是一個很快就沒有去,因爲 因爲別人比你有一個帳戶
相關問題