已有DB.java、Servlet与JSP页面,如何在JSP欢迎语旁显示数据库用户名?
如何在JSP欢迎页展示从数据库获取的用户名?
看起来你已经完成了数据库查询和Servlet的逻辑,但还差关键一步:把查询到的用户数据传递到JSP页面并展示。咱们一步步来解决:
步骤1:修改Servlet,传递用户对象到JSP
你的Servlet已经能成功查询到用户,但没有把user对象传递给JSP页面。需要把用户对象存入请求域(如果只是当前页面展示用请求域就够了,要是需要跨页面保留可以用会话域),然后转发到欢迎页。修改后的Servlet代码如下:
if(op.equals("SIGNIN")){ User user = flowersDB.searchUser(uname , uemail,upassword); if(user == null){ msg = "notfound"; System.out.println("user="+uemail+"is not found"); user = new User(); } else{ msg = "found"; System.out.println("user="+uemail+"is found"); } // 新增:将用户对象存入请求域,供JSP获取 request.setAttribute("currentUser", user); // 转发到欢迎页JSP,请确保这里的路径和你的实际文件路径一致 request.getRequestDispatcher("/welcome.jsp").forward(request, response); }
步骤2:修改JSP页面,展示用户名
现在JSP可以通过EL表达式(推荐,比脚本更简洁优雅)来获取请求域里的用户对象,取出用户名展示。修改后的欢迎页代码:
<h2>welcome ${currentUser.uname}!</h2><br><br>
这里要注意你的User类需要遵循JavaBean规范,也就是要有getUname()这个getter方法,EL表达式才能正确识别。如果想兼容老写法,也可以用JSP脚本的方式:
<h2>welcome <% User user = (User) request.getAttribute("currentUser"); if(user != null && user.getUname() != null){ out.print(user.getUname()); } %>! </h2><br><br>
额外重要提醒
顺便说一句,你当前db.java里的SQL拼接写法存在严重的SQL注入风险,而且还能看到语法错误(比如upassword"+upassword少了等号)。建议改用PreparedStatement做参数化查询,既安全又能避免拼接错误,示例如下:
String sql = "select * from user where uname=? and uemail=? and upassword=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, uname); pstmt.setString(2, uemail); // 如果upassword是数字类型就用setInt,字符串类型用setString pstmt.setString(3, upassword); ResultSet result = pstmt.executeQuery();
内容的提问来源于stack exchange,提问作者reem
相关产品推荐
相关产品推荐

