2017-02-04 25 views
0

值I有一個登錄的servlet這是開始所述工作流程的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); 
} 

用戶是用於保存現在我已經加入數據的豆公開的用戶名和密碼都是爲了理解。林不知道如果我能直接從JSP所以不是寫request.getAttribute的accesss這些後來

**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> 
... 

(「用戶」)。我已經豆直接使用,不知道如果我在這裏

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

我試圖打印輸出用戶名。但不知何故得到nullpointerexception因爲請求沒有屬性用戶。

我試着在整個網絡上使用EL的例子,但是找不到滿意的解決方案。

回答

0

表達式語言使用bean的getter和setter來訪問屬性。
屬性甚至可以省略,根本沒有定義。

當頁面被請求時,JSP和EL被編譯爲java代碼。在生成的java類中,像${user.username}這樣的EL被轉換爲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; 
    } 
} 

getter和在Bean和EL存取名二傳手名稱遵循一些規則。

The JavaBean Documentation is here

在某些情況下,CamelCase中的屬性存在問題,並帶有前導低位/大寫字母。
更多這裏:jsp:setproperty property=「*」 not set all properties

另一個問題是屬性的生命/範圍。

在(登錄)Servlet中,您可以在請求範圍中定義用戶屬性並轉發給JSP。
處理JSP後,用戶屬性不再可訪問。該請求得到了回覆。結束。

當用戶提交Login.jsp時,這是另一個請求。
ProfileServlet可以使用request.getParameter("username")訪問表單域數據。

驗證用戶名和密碼後,您可以將會話的屬性設置爲user,以便在所有後續頁面中輕鬆訪問。