2016-02-04 116 views
-2

這是我的代碼,它連接到數據庫,在控制檯中我可以看到味精「連接」,但問題是在給用戶證書後,它不是導航到下一個頁面(的welcome.jsp),它只是顯示了味精說: 「用戶名或密碼錯誤」 可能有人幫助我登錄頁面使用SQL SERVER,JAVA,Servlets,Eclipse

LoginServlet.java

package com.amzi.servlets; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
public class LoginServlet extends HttpServlet{ 
    private static final long serialVersionUID = 1L; 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html"); 
     PrintWriter out = response.getWriter(); 
     String n=request.getParameter("username"); 
     String p=request.getParameter("userpass"); 
     try { 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      String connectionUrl = "jdbc:sqlserver://WMDENTW1\\SQLEXPRESS:1433;" + 
        "database=FullTextDB;" + 
        "user=root;" + 
        "password=root123"; 
      Connection conn = DriverManager.getConnection(connectionUrl); 
      System.out.println("Connected."); 
      PreparedStatement pst = conn.prepareStatement("select User, Password from dbo.AdminLogin where User=? and Password=?"); 
      pst.setString(1, n); 
      pst.setString(2, p); 

      ResultSet rs = pst.executeQuery(); 
      if (rs.next()) { 
       out.println("page opened"); 
       RequestDispatcher rd=request.getRequestDispatcher("WebContent/welcome.jsp"); 
       rd.forward(request,response); 
      } else { 
       out.print("<p style=\"color:red\">Sorry username or password error</p>"); 
       RequestDispatcher rd=request.getRequestDispatcher("index.jsp"); 
       rd.include(request,response); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     out.close(); 
    } 
} 

的index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Login Application</title> 
</head> 
<body> 
    <form action="LoginServlet" method="post"> 
     <fieldset style="width: 300px"> 
      <legend> Login to App </legend> 
      <table> 
       <tr> 
        <td>User ID</td> 
        <td><input type="text" name="username" required="required" /></td> 
       </tr> 
       <tr> 
        <td>Password</td> 
        <td><input type="password" name="userpass" required="required" /></td> 
       </tr> 
       <tr> 
        <td><input type="submit" value="Login" /></td> 
       </tr> 
      </table> 
     </fieldset> 
    </form> 
</body> 
</html> 

Welcome.jsp中

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Welcome <%=session.getAttribute("name")%></title> 
</head> 
<body> 
    <h3>Login successful!!!</h3> 
    <h4>  Hello,  <%=session.getAttribute("name")%></h4> 
</body> 
</html> 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"  version="2.5"> <servlet>  <servlet-name>login</servlet-name>  <servlet-class>com.amzi.servlets.LoginServlet</servlet-class> </servlet> <servlet-mapping>  <servlet-name>login</servlet-name>  <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> <welcome-file-list>   <welcome-file>index.jsp</welcome-file> </welcome-file-list> 
</web-app> 
+1

你正在寫什麼給響應輸出流以及轉發到JSP?做一個或另一個,而不是兩個! – NickJ

+0

嘿!謝謝你的回覆,但我不明白你的意思,請你清楚提一下吧! –

回答

0

在響應您的您的要求來澄清我的意見,而不是我寫的答案。

在你doPost方法,你有這樣一行:

PrintWriter out = response.getWriter(); 

之後,你用out直接寫入響應,如在這些行:

out.println("page opened"); 

out.print("<p style=\"color:red\">Sorry username or password error</p>"); 

但是,您然後轉到JSP:

RequestDispatcher rd=request.getRequestDispatcher("WebContent/welcome.jsp"); 
rd.forward(request,response); 

但是這樣做也是一樣的 - 在處理完JSP之後,它將結果發送給PrintWriter響應,就這樣做了。

你真的不應該這樣做。只需使用JSP。其次,您的消息的用戶名或密碼錯誤表明查詢沒有返回任何行,所以您使用的用戶名/密碼可能是錯誤的。我看不到JDBC代碼或查詢有任何問題。

+0

是啊,你說的是正確的,但我仍然可以同時使用和請求調度程序,因爲out語句只是用作打印語句。數據庫連接是完美的,列是(用戶,密碼)和列插入值(管理員,admin123),但我仍然看不到歡迎屏幕。我的代碼是否在某處丟失,或者您有任何其他想法..? –

+0

感謝您的幫助,我弄明白了什麼是錯誤,因爲我已經將用戶定義爲數據庫中的主鍵,如果您想要訪問該列,它應該寫爲[用戶]。 –

+0

奇怪的,非標準的微軟! AFAIK,沒有其他的RDBMS需要這樣的語法。 – NickJ