2017-02-04 9 views
0

У меня есть логин сервлет, который является началом рабочего процессаJSPExpression Язык чтение значения из фасоли

LoginServlet.java

doGet(...) throws ... { 
    User user = new User(); 
    request.setAttribute("user", user); 
    ServletContext sc = this.getServletContext(); 
    RequestDispatcher rd = sc.getRequestDispatcher("/Login.jsp"); 
    rd.forward(request, response); 
} 

Пользователь боб используется для хранения данных теперь я добавил как имя пользователя, так и пароль как общедоступные, просто чтобы понять. Я не уверен, если я могу Accesss их непосредственно из JSP позже

**User.java** 
public class User { 
    public String username; 
    public String password; 
} 

**Login.jsp** 
... 
<form action="/ProfileServlet" method = "post"> 
    Username: <input type="text" value = "${user.username}"/> 
    Submit: <input type="submit" value="Submit"/> 
</form> 
... 

Таким образом, вместо того, чтобы писать request.getAttribute («пользователь»). Я использовал фасоль непосредственно, не уверен, если я пропускаю его здесь

**ProfileServlet.java** 
protected void doPost(..)..{ 
User user = (User) request.getAttribute("user"); 
System.out.println("logged in user "+user.username); 
} 

Im пытается распечатать имя пользователя. Но каким-то образом я получаю nullpointerexception, поскольку запрос не имеет пользователя атрибута.

Я попробовал примеры для EL через сеть, но не смог найти удовлетворительное решение.

ответ

0

Язык выражения использует геттеры и сеттеры компонента для доступа к свойствам.
Свойства могут быть даже опущены и не определены вообще.

JSP и EL скомпилированы в код Java при запросе страницы. В сгенерированном классе java EL, например ${user.username}, преобразуются в user.getUsername();.

User.java

public class User { 

    // the properties are optional 

    private String username; 
    private String password; 

    // the getters are needed for reading of bean values 

    public String getUsername() { 
     // the return data could be some on the fly calculation, DB data, etc 
     return username; 
    } 

    public String getPassword() { 
     // the return data could be some on the fly calculation, DB data, etc 
     return password; 
    } 

    // the setters are for write access 

    public void setUsername(String username) { 
     // do something with the data, store it 
     // usually 
     this.username = username; 
    } 

    public void setPassword(String password) { 
     // do something with the data, store it 
     // usually 
     this.password = password; 
    } 
} 

-акцессоры имена в Bean и EL-доступа названий следовать некоторым правилам.

The JavaBean Documentation is here.

В некоторых случаях есть проблемы с свойствами CamelCase с ведущими нижними/верхними буквами.
Подробнее здесь: jsp:setproperty property=“*” not set all properties

Другой вопрос - это срок службы/область атрибута.

В сервлете (Login) вы определяете атрибут пользователя в области запроса и пересылаете JSP.
После обработки JSP атрибут пользователя недоступен. Запрос был откликнулся. Конец.

Когда пользователь Login.jsp отправлен пользователем, это другой запрос.
ProfileServlet может получить доступ к данным поля формы, используя request.getParameter("username").

Имя пользователя и пароль подтверждены, вы можете установить атрибут сеанса user, чтобы иметь легкий доступ на всех последующих страницах.