我有一个登录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示例,但找不到令人满意的解决方案。
答案 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
属性,以便在以后所有页面中轻松访问。