JSPExpression语言从bean读取值

时间:2017-02-04 10:38:23

标签: java jsp servlets

我有一个登录servlet,它是工作流程的开头

LoginServlet.java

public static String generateLeague(String match) {

    String club = null;
    String league;
    if (match.toLowerCase().contains(" ")) {
        club = match.substring(0, match.indexOf(" "));
    }
        switch (club) {
            case "arsenal":
            case "bournemouth":
            case "burnley":
            case "chelsea":
            case "crystal":
            case "everton":
            case "hull":
            case "leicester":
            case "liverpool":
            case "manchester":
            case "middlesborough":
            case "southampton":
            case "stoke":
            case "sunderland":
            case "swansea":
            case "tottenham":
            case "watford":
            case "west":
                league = "Premier League";
                break;
            case "atletico":
            case "barcelona":
            case "real":
                league = "La Liga";
                break;
                default: league = "";

        }

    return league;
}

用户是一个用于保存数据的bean现在我已将用户名和密码添加为公共只是为了理解。我不确定我是否可以直接从JSP访问这些

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

所以不要写request.getAttribute(“user”)。我直接使用了bean,不确定如果我在这里遗漏了它

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

我试图打印出给定的用户名。但不知怎的,我得到nullpointerexception,因为请求没有属性user。

我尝试了跨网络的EL示例,但找不到令人满意的解决方案。

1 个答案:

答案 0 :(得分: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;
    }
}

Bean中的Getter和Setter名称以及EL访问名称遵循一些规则。

The JavaBean Documentation is here

在某些情况下,CamelCase中的属性存在问题,其中有较低/较高的字母 更多信息:jsp:setproperty property=“*” not set all properties

另一个问题是属性的生命/范围。

在(Login)Servlet中,您可以在请求范围中定义用户属性并转发到JSP 处理JSP后,无法再访问用户属性。该请求得到了回复。结束。

当用户提交Login.jsp时,这是另一个请求 ProfileServlet可以使用request.getParameter("username")访问表单域数据。

验证用户名和密码,您可以为会话设置user属性,以便在以后所有页面中轻松访问。