2011-05-27 63 views
1

我現在面臨的問題與我的網站,我儘量讓用戶輸入用戶名和密碼登錄到主頁,但它給我這個錯誤問題與我的登錄servlet頁面

HTTP狀態404 - 請求的資源()不可用

似乎html頁面沒有從servlet獲得任何結果。我不確定,但任何人都可以幫助我,告訴我我錯過了什麼?

這裏是我的servlet:

import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.sql.*; 

public class enter extends HttpServlet { 

    private Connection myCon; 
    private PreparedStatement myStmt; 

    @Override 
    public void init() { 

System.out.println("init"); 
    try { 

     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    } 
    catch (Exception e) { 
    } 

     try { 
     System.out.println("connecting"); 
     myCon = DriverManager.getConnection ("jdbc:mysql://localhost/auk","root","password"); 

    } 
    catch (SQLException e) { 
    } 
    } 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException, SQLException { 
    response.setContentType("text/html;charset=UTF-8"); 
    ResultSet result; 
    PrintWriter out = response.getWriter(); 
    String query, colName, dat, user; 
    int numCols, index; 
    ResultSetMetaData resultMd; 

    query = "Select Pass from user where Username=?"; 

    try { 
     myStmt = myCon.prepareStatement(query); 
    } 
    catch (Exception e) { 
    } 
     user=request.getParameter("user"); 
    myStmt.setString(1, user); 

    result=myStmt.executeQuery(); 
    String userpass=result.getString(1); 

    out.println ("userpass selected from the table is = "+userpass); 

    response.setContentType("text/html"); 

    out.println("<html>"); 
    out.println("<head><title>JDBCServlet</title></head>"); 
    out.println("<body>"); 
    out.print("<p><b>The query is: </b>" + query + "</p>"); 

    try { 

     result = myStmt.executeQuery(query); 

     resultMd = result.getMetaData(); 
     numCols = resultMd.getColumnCount(); 

     out.println("<table border>"); 
     out.println("<caption> <b> Query Results </b> </caption>"); 
     out.println("<tr>"); 

    out.print("<th> Welcome " + user + " </th>"); 
     for (index = 1; index <= numCols; index++) { 
     colName = resultMd.getColumnLabel(index); 
     out.print("<th>" + colName + "</th>"); 
     } 
     out.println("</tr>"); 

     while (result.next()) { 
     out.println("<tr>"); 

     for (index = 0; index < numCols; index++) { 
     dat = result.getString(index + 1); 
     out.println("<td>" + dat + "</td>"); 
     } 

     out.println("</tr>"); 
    } 
    out.println("</table>"); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    out.println("</body></html>"); 

    }  

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     try { 
      processRequest(request, response); 
     } catch (SQLException ex) { 
      Logger.getLogger(enter.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
     try { 
      processRequest(request, response); 
     } catch (SQLException ex) { 
      Logger.getLogger(enter.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    @Override 
    public String getServletInfo() { 
     return "Short description"; 
    } 
    } 

回答

2

該錯誤只是意味着沒有什麼這是對URL聽。

因此,無論是URL是明顯錯誤的(區分大小寫!),或者Servlet根本沒有在該URL上偵聽,或者Servlet無法啓動。根據迄今爲止提供的信息很難說清楚。您需要驗證瀏覽器地址欄中的URL,web.xml中的servlet映射和服務器啓動日誌。


無關的具體問題,分配昂貴的DB資源,如Connection和作爲一個servlet實例變量是非常糟糕的想法。您應該在同一方法內儘可能最短的範圍內打開和關閉這些資源。

+0

謝謝您的請求並解釋,但我沒有得到您的解決方案。你能告訴我在我的代碼中哪裏是錯誤的。 – mimi 2011-05-27 14:56:19

+0

錯誤不在顯示的代碼中。該代碼**甚至沒有達到**。正如答案中提到的那樣:*您需要驗證瀏覽器地址欄中的URL,web.xml中的servlet映射和服務器啓動日誌。*如果發現問題,請在您的問題中包含此信息。 – BalusC 2011-05-27 14:57:00