2016-09-09 3 views
1

Я в настоящее время объект пользователя:Получение сеанса суб-атрибуты из объекта

public class User { 

public final String username, password, email; 
public final double balance; 

public User(String username, String password, String email, double balance) { 
    this.username = username; 
    this.password = password; 
    this.email = email; 
    this.balance = balance; 
} 

и функция входа в систему, которая возвращает объект пользователя:

public User checkLogin(String usrname, String pssword) { 
     Front fr = new Front(); 
     User newUser = null; 
     try { 
      int count = 0; 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/projects", "william", "william"); 
      java.sql.Statement mySt = myConn.createStatement(); 
      String rs = "SELECT username, password, email, balance FROM user WHERE username='" + usrname + "'AND password='" + pssword + "'"; 

    System.out.println(rs); 
    ResultSet myRS = mySt.executeQuery(rs); 
    while (myRS.next()) { 
     newUser = new User(myRS.getString("username"),myRS.getString("password"),myRS.getString("email"),myRS.getDouble("balance")); 


    count++; 
    } 

    if (count == 0) { 
     return newUser; 
    } 

    if (count == 1) { 
     return newUser; 



    } 
    myConn.close(); 
} catch (SQLException | HeadlessException ex) { 
    JOptionPane.showMessageDialog(null, ex); 
} catch (ClassNotFoundException ex) { 
    Logger.getLogger(DBHandler.class.getName()).log(Level.SEVERE, null, ex); 
} 
return newUser; 

}

И наконец, сервлет, который обрабатывает формы и устанавливает разные атрибуты:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    Double balance = 0.00; 
    String origin = request.getParameter("origin"); 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    String email = request.getParameter("email"); 
    switch(origin){ 
    case "login": 
    db.checkLogin(username, password); 
    User tempUser; 
     if((tempUser = db.checkLogin(username, password)) != null){ 
      out.print("You will be redirected"); 
      request.getSession().setAttribute("user", tempUser); 
      response.sendRedirect("index.jsp"); 
     }else if(db.checkLogin(username,password) == null){ 
      out.print("Wrong login info, please try again!"); 
      response.sendRedirect("login.jsp"); 
     } 

    break; 
    case "register": 
     db.registerUser(username, password, balance, email); 
     response.sendRedirect("login.jsp"); 
    break; 
} 

}

То, что я пытаюсь сделать, это, например, отображение на веб-странице, одно из значений, которые пользователь имеет (имя пользователя, адрес электронной почты и т. Д.). Тем не менее, я не уверен, как использовать session.getAttribute, и как я могу получить tempUser.username.

Заранее спасибо.

ответ

2

Вы можете добавить атрибут в запрос, и если вы возвращаете его на страницу просмотра, вы можете получить к нему доступ из объекта ответа, который возвращается в представление. Я приведу пример в ближайшее время.

Вот пример:

request.getSession() setAtribute ("пользователь", tempUser);.

и на странице просмотра, которая находится на index.jsp, как в вашем примере вы можете достичь его с помощью этих форматов

Использование EL (выражение языка) и JSTL тегов настоятельно рекомендуется. Например, здесь можно использовать EL в

<td>Username: </td> 
<td><input type="text" value="${user.username}" /></td> 

Там находятся другие форматы тоже, и вы можете изучить их

взглянуть на этот пост

How to use session in jsp pages to get information?

Вы также можете использовать скриптлетов но они тоже слишком обезолоте.

просто попробуйте использовать EL или переключитесь на использование пружинного упора, где вы сможете обрабатывать все так же эффективно, как вы хотите.

+0

Брат .... Я не могу вас отблагодарить. Серьезно отличная работа. Мне удалось исправить это, сделав это, благодаря вам: Пользователь tempUser = (Пользователь) session.getAttribute («пользователь»); out.print (tempUser.username); Снова, большое спасибо, брат. –

+0

Хорошо, отлично. Попробуйте использовать EL, поскольку он широко используется в настоящее время через несколько дней, и, если возможно, попробуйте переключиться на Restful webservices –

+0

@WilliamPfaffe, существует потенциальная угроза безопасности с классом User, если он хранится в сеансе. После заполнения пароль всегда будет доступен. Как только пользователь выполнил вход в пароль, больше не требуется. Рассмотрите возможность удаления атрибута пароля из класса User или по крайней мере null после того, как пользователь выполнил вход. –

Смежные вопросы