2015-02-08 26 views
-1

我試圖創建簡單的Web應用程序。但是我登錄到用戶界面後遇到問題。我的數據庫包括ID,用戶名,密碼和電子郵件。如何從SQL中使用java檢索會話中的數據

我已經創建了登錄表單並且它正在工作。

而在html/jsp中,我使用這個<%=session.getAttribute("name")%>來獲得「歡迎回來USERNAME,您的電子郵件爲NULL」。

我想獲取用戶郵件。

我的代碼是在這裏:

THERE IS FIRST FILE 
------------------------------------------------------------------------------------ 



package com.promo4free.servlets; 

import java.io.IOException; 
import java.io.PrintWriter; 


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; 

import com.promo4free.dao.LoginDao; 

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"); 

       HttpSession session = request.getSession(false); 
       if (session != null) session.setAttribute("name", n); // WORKING 

       if (LoginDao.validate(n, p)) { 
         RequestDispatcher rd = request.getRequestDispatcher("after_login_user_interface.jsp"); 
         rd.forward(request, response); 
       } else { 
         out.print("<p style=\"color:red\">Sorry username or password error</p>"); 
         RequestDispatcher rd = request.getRequestDispatcher("loginToPage.jsp"); 
         rd.include(request, response); 
       } 

       out.close(); 
     } 
} 



----------------------------------------------------------------------------------------------------------- 
THERE IS SECOND FILE 
----------------------------------------------------------------------------------------------------------- 
package com.promo4free.dao; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

//working 
public class LoginDao { 
     public static boolean validate(String name, String pass) { 
       boolean status = false; 
       Connection conn = null; 
       PreparedStatement pst = null; 
       ResultSet rs = null; 

       String url = "jdbc:mysql://localhost:3306/"; 
       String dbName = "ps"; 
       String driver = "com.mysql.jdbc.Driver"; 
       String userName = "root"; 
       String password = "root"; 
       try { 
         Class.forName(driver).newInstance(); 
         conn = DriverManager.getConnection(url + dbName, userName, password); 

         pst = conn.prepareStatement("SELECT * FROM members WHERE username=? AND password=?"); //working 
         System.out.println("SELECT * FROM members WHERE username=? AND password=?"); //working 
         pst.setString(1, name); 
         pst.setString(2, pass); 

         rs = pst.executeQuery(); 
         status = rs.next(); 

       } catch (Exception e) { 
         System.out.println(e); 
       } finally { 
         if (conn != null) { 
           try { 
             conn.close(); 
           } catch (SQLException e) { 
             e.printStackTrace(); 
           } 
         } 
         if (pst != null) { 
           try { 
             pst.close(); 
           } catch (SQLException e) { 
             e.printStackTrace(); 
           } 
         } 
         if (rs != null) { 
           try { 
             rs.close(); 
           } catch (SQLException e) { 
             e.printStackTrace(); 
           } 
         } 
       } 
       return status; 
     } 
} 

----------------------------------------------------------------------------------------------------------- 
THERE IS SECOND FILE 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.promo4free.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> 
+0

郵政相關的代碼,不要插入鏈接。 – 2015-02-08 11:31:36

+0

感謝您的警告。現在正確 – 2015-02-08 11:48:24

回答

1

我修改你的方法返回的電子郵件如果登錄有效

package com.promo4free.dao; 
import java.sql.*; 

     /** 
     * Created by Zexter on 09/02/2015. 
     */ 
     public class LoginDAO { 
      public static String validate(String name, String pass) { 
       boolean status = false; 
       String email=""; 
       Connection conn = null; 
       PreparedStatement pst = null; 
       ResultSet rs = null; 

       String url = "jdbc:mysql://localhost:3306/"; 
       String dbName = "ps"; 
       String driver = "com.mysql.jdbc.Driver"; 
       String userName = "root"; 
       String password = "root"; 
       try { 
        Class.forName(driver).newInstance(); 
        conn = DriverManager.getConnection(url + dbName, userName, password); 

        pst = conn.prepareStatement("SELECT * FROM members WHERE username=? AND password=?"); //working 

        pst.setString(1, name); 
        pst.setString(2, pass); 

        rs = pst.executeQuery(); 
        //status = rs.next(); 
        if(rs.next()){ 
         email=rs.getString("email"); 
        } 

       } catch (Exception e) { 
        System.out.println(e); 
       } finally { 
        if (conn != null) { 
         try { 
          conn.close(); 
         } catch (SQLException e) { 
          e.printStackTrace(); 
         } 
        } 
        if (pst != null) { 
         try { 
          pst.close(); 
         } catch (SQLException e) { 
          e.printStackTrace(); 
         } 
        } 
        if (rs != null) { 
         try { 
          rs.close(); 
         } catch (SQLException e) { 
          e.printStackTrace(); 
         } 
        } 
       } 
       return email; 
      } 
     } 

在Servelet的,你可以做以下

package com.promo4free.servlets; 

import javax.servlet.RequestDispatcher; 
    import javax.servlet.ServletException; 
    import javax.servlet.annotation.WebServlet; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    import javax.servlet.http.HttpSession; 
    import java.io.IOException; 
    import java.io.PrintWriter; 

    /** 
    * Created by Zexter on 09/02/2015. 
    */ 
    @WebServlet(name = "Test",urlPatterns = "/path") 
    public class LoginServlet extends HttpServlet { 
     protected 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"); 
      String email=""; 
      email=LoginDAO.validate(n, p); 


      if (email.trim()!="" && email.length()>0) { 
       HttpSession session = request.getSession(true); // The session will be set only if there is a valid login 
       session.setAttribute("name", n); 
       session.setAttribute("email",email); 
       RequestDispatcher rd = request.getRequestDispatcher("after_login_user_interface.jsp"); 
       rd.forward(request, response); 
      } else { 
       out.print("<p style=\"color:red\">Sorry username or password error</p>"); 
       RequestDispatcher rd = request.getRequestDispatcher("loginToPage.jsp"); 
       rd.include(request, response); 
      } 

     } 

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     } 
    } 

最後在JSp上,您可以嘗試檢查他是否已登錄並檢索信息。

<% 
      String email="",name=""; 
      if(session.getAttribute("email")!=null && session.getAttribute("name")!=null){ 
      email=session.getAttribute("email").toString();//Setting the session data to variable for reuse 
      name=session.getAttribute("name").toString(); 
      } 
      %> 
+0

感謝您的幫助。這仍然不起作用。 String n = request.getParameter(「username」); \t \t String em = request.getParameter(「email」); \t \t \t \t HttpSession session = request.getSession(true); \t \t如果(會話!= NULL) \t \t { \t \t \t session.setAttribute( 「名」,N); //工作 \t \t \t session.setAttribute(「email」,em); //不工作 \t \t} – 2015-02-09 08:57:16

+0

修改過的方法有什麼好運? – Zexter 2015-02-10 17:48:32

+0

不,我從零刪除和rewrited,現在工作:)順便說一句..我尋找人開發像「addmefast.com」和「socialexchange.net」 我已經差不多完成了,但需要改進。 – 2015-02-10 19:14:46

0

創建一個類來表示你的系統的用戶:

public class User{ 

String userName; 
String emailAddress; 

//... 

} 

更新你的DAO返回這個類的一個實例或NULL,如果用戶不存在:

public static User validate(String name, String pass) { 

    //... 

    User user = null; 

    if(rs.next()){ 
     user = new User(); 
     user.setuserName(r.getString("userName"); 
     //etc 
    } 

    //... 

    return user; 
} 

更新您的Servlet以在成功登錄時在會話中添加用戶:

public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

     // ... 
     User user = LoginDao.validate(n, p); 

     if (user != null) { 
       RequestDispatcher rd = request.getRequestDispatcher("after_login_user_interface.jsp"); 
       request.getSession().setAttribute("user", user); 
       rd.forward(request, response); 
     } 

     //... 

    } 

輸出的用戶在你的JSP EL使用符號的屬性:這裏

Welcome back ${user.userName}, your email is ${user.emaiLAddress}. 
+0

我試圖實現它,但沒有任何消息。你可以執行代碼嗎?也許我做錯了什麼。 – 2015-02-09 09:16:07

相關問題