Java 从对象获取会话子属性
我当前有一个用户对象:Java 从对象获取会话子属性,java,servlets,Java,Servlets,我当前有一个用户对象: 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;
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;
}
最后是一个servlet,它处理表单并设置不同的属性:
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
提前感谢。您可以将该属性添加到请求中,如果要将其返回到视图页面,则可以从返回到视图的响应对象访问该属性。我稍后会提供一个例子 以下是一个例子: request.getSession().setAtribute(“用户”,tempUser) 在
index.jsp
上的视图页面中,您可以使用这些格式来实现它
强烈建议使用EL(表达式语言)和JSTL标记。例如,这里您可以使用EL作为
<td>Username: </td>
<td><input type="text" value="${user.username}" /></td>
用户名:
还有其他格式,您可以探索它们
看看这篇文章
您也可以使用Scriptlet,但它们太简单了
只要试着使用EL或切换到使用spring rest,您就可以随心所欲地高效处理所有事情。Brother。。。。我对你感激不尽。我在那里做得很好。感谢您,我通过这样做成功地修复了它:User tempUser=(User)session.getAttribute(“User”);out.print(tempUser.username);再次感谢你,兄弟,真的。好的,太好了。尝试使用EL,因为它现在每天都被广泛使用,如果可能的话,尝试切换到Restfulwebservices@WilliamPfaffe如果用户类存储在会话中,则该类存在潜在的安全风险。一旦填充,密码将始终可用。一旦用户登录,就不再需要密码。考虑从用户类中删除密码属性,或者至少在用户登录后删除NULL。@安得烈是的,这是一个值得注意的好点,是的,我们可以使用单独的DAO和DTO层来解决这些问题。当你有时间的时候,看看那些网站