登录获取的是数据库里面的username和password,想实现登录跳转的界面只显示登录账号的数据库信息,目前显示的是数据库里面的全部信息
dao层:public List findAll() ;
daoimpl层: public List findAll() {
//使用JDBC操作数据库...
//1.定义sql
String sql = "select * from only";
List students = template.query(sql, new BeanPropertyRowMapper(Only.class));
return students;
}
service层: public List findAll() ;
serviceimpl层:public List findAll() {
//调用Dao完成查询
return dao.findAll();
servlet层:/获取条件查询参数
Map<String, String[]> condition = request.getParameterMap();
//2.调用service查询
OnlyService service = new OnlyServiceImpl();
PageBean pb = service.findUserByPage(currentPage,rows,condition);
System.out.println(pb);
//3.将PageBean存入request
request.setAttribute("pb",pb);
request.setAttribute("condition",condition);//将查询条件存入request
//4.转发到slist.jsp
request.getRequestDispatcher("/slist.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
jsp页面:
"1"class="table table-bordered table-hover">
class="success">
"${pb.list}" var="only" varStatus="s">
登录servlet: Map<String, String[]> map = request.getParameterMap();
//4.封装Studentl对象
Studentl studentl = newStudentl();
try {
BeanUtils.populate(studentl,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//5.调用Service查询
SlService service = newLoginServiceImpl();
Studentl SlStudent = service.Sl(studentl);
//6.判断是否登录成功if(SlStudent != null){
//登录成功//将用户存入session
session.setAttribute("studentl", SlStudent);
//跳转页面
response.sendRedirect(request.getContextPath()+"/findStudentByPageServlet");
}else{
//登录失败//提示信息
request.setAttribute("login_msg","用户名或密码错误!");
//跳转登录页面
request.getRequestDispatcher("/stulogin.jsp").forward(request,response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
class="yc">序号
姓名
事务
操作
class="yc">${only.uid}
${only.username}
${only.event}
class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findStudentServlet?uid=${only.uid}">修改
登陆成功后,跳转的页面是哪个?
登陆成功后,页面应该从studentl 中获取当前登陆的用户信息,登陆后还是显示所有信息的话,应该取的是findAll方法返回的pl 集合中的数据。所以页面跳转是不是跳错了?
参考GPT和自己的思路:
从代码来看,findAll()方法返回了整个only表的信息,因此在展示页面时会显示全部信息。要实现只展示登录账号的信息,应该在dao层编写一个根据用户名查询信息的方法,然后在service层中调用该方法,并将查询结果返回给servlet层,在展示页面时只展示查询结果即可。
其中,根据用户名查询信息的dao层代码如下所示:
public Only findByUsername(String username) {
String sql = "select * from only where username=?";
return template.queryForObject(sql, new BeanPropertyRowMapper<Only>(Only.class), username);
}
在service层中调用该方法的代码如下:
public Only findUserByName(String username) {
return dao.findByUsername(username);
}
在servlet层中调用该方法并将查询结果返回给页面的代码如下:
// 2.调用service查询
OnlyService service = new OnlyServiceImpl();
Only only = service.findUserByName(SlStudent.getUsername());
// 3.将查询结果存入request
request.setAttribute("only", only);
// 4.转发到需要展示信息的页面
request.getRequestDispatcher("/userinfo.jsp").forward(request,response);
在展示页面userinfo.jsp中,只需要展示查询结果即可:
<table>
<tr>
<td>用户名:</td>
<td>${only.username}</td>
</tr>
<tr>
<td>密码:</td>
<td>${only.password}</td>
</tr>
<tr>
<td>其他信息:</td>
<td>${only.otherInfo}</td>
</tr>
</table>
参考GPT和自己的思路:
根据提供的代码,可以看出findAll()方法返回的是整张表的数据,而且在findUserByPage()方法中没有对数据进行筛选和过滤。因此,在跳转到slist.jsp页面后,展示的也是整张表的数据。
如果想要只显示登录账号的数据库信息,可以考虑以下步骤:
1.在登录servlet中成功验证用户名和密码后,将用户名存储到session中(例如:session.setAttribute("username", username);)。
2.在servlet层中,获取session中存储的用户名,然后将其作为查询条件(例如:condition.put("username", new String[]{(String)session.getAttribute("username")});),传入service.findUserByPage(currentPage,rows,condition)方法中。
3.在service层中,将传入的查询条件作为参数,对findAll()方法进行实现,根据用户名进行过滤(例如:String sql = "select * from only where username = ?"; List students = template.query(sql, new Object[]{username}, new BeanPropertyRowMapper(Only.class));)。
4.最后在展示页面中,只展示查询结果即可。
需要注意的是,这种做法仅展示了对应用户名的数据,而不是仅展示对应用户的信息,如果要实现只展示对应用户的信息,需要在登录成功时额外获取用户ID,然后在上述过程中作为参数进行传递和处理。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您的代码描述,目前您的程序是从数据库中查询所有的信息并将其展示在页面上。但是您需要展示的是当前登录用户的信息。
首先,在您的登录servlet中,登录成功后需要将当前登录用户的信息存储在session中,这样在后续的请求中就可以获取到当前登录用户的信息。
其次,在您的servlet层中,需要根据当前登录用户的信息查询数据库,并返回只包含当前用户信息的列表,而不是查询所有的信息。修改后的servlet层代码如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取条件查询参数
Map<String, String[]> condition = request.getParameterMap();
//获取当前登录用户信息
Studentl studentl = (Studentl)request.getSession().getAttribute("studentl");
//将当前登录用户的uid作为查询条件
condition.put("uid", new String[]{String.valueOf(studentl.getUid())});
//调用service查询
OnlyService service = new OnlyServiceImpl();
List<Only> list = service.findUser(condition);
//将查询结果存入request
request.setAttribute("list", list);
//转发到slist.jsp
request.getRequestDispatcher("/slist.jsp").forward(request,response);
}
在上述代码中,我们首先从session中获取当前登录用户的信息,然后将其uid作为查询条件添加到condition中。接着,我们调用service的findUser方法查询数据库并返回只包含当前用户信息的列表。最后,我们将查询结果存入request中并转发到slist.jsp页面。
最后,在您的jsp页面中,需要将循环展示数据库中的所有信息的代码修改为只展示当前用户信息的代码。修改后的代码如下:
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th class="yc">序号</th>
<th>姓名</th>
<th>事务</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="only" varStatus="s">
<tr>
<td class="yc">${only.uid}</td>
<td>${only.username}</td>
<td>${only.event}</td>
<td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findStudentServlet?uid=${only.uid}">修改</a></td>
</tr>
</c:forEach>
</table>
在上述代码中,我们将循环展示所有信息的代码修改为循环展示当前用户信息的代码,即将${pb.list}改为${list},并在循环中只展示当前用户信息的行。
<td class="yc">${only.uid}
${only.username}
${only.event}
<a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findStudentServlet?uid=${only.uid}">修改
这里把不要显示的去掉即可
可以在查询的时候带上当前登录用户的用户名标志,比如id或者姓名等,用于匹配用户信息。
参考GPT和自己的思路,您可以将当前登录用户的用户名存储在 session 中,在查询数据库时从 session 中获取用户名,然后根据用户名增加查询条件。具体实现步骤如下:
1.在登录成功后将当前用户的用户名存储在 session 中:
session.setAttribute("username", SlStudent.getUsername());
2.在查询数据库时,从 session 中获取用户名,并增加查询条件:
dao 层:
public List<Only> findByUsername(String username) {
String sql = "select * from only where username = ?";
List<Only> users = template.query(sql, new BeanPropertyRowMapper<Only>(Only.class), username);
return users;
}
daoimpl 层:
public List<Only> findByUsername(String username) {
String sql = "select * from only where username = ?";
List<Only> users = template.query(sql, new BeanPropertyRowMapper<Only>(Only.class), username);
return users;
}
public List<Only> findAllByUsername(String username) {
return findByUsername(username);
}
service 层:
public List<Only> findAllByUsername(String username) {
return dao.findAllByUsername(username);
}
servlet 层:
// 从 session 中获取当前用户的用户名
String username = (String) session.getAttribute("username");
// 调用 service 查询当前用户的数据
OnlyService service = new OnlyServiceImpl();
List<Only> users = service.findAllByUsername(username);
// 将查询结果存入 request 中
request.setAttribute("users", users);
3.在 JSP 页面中,只显示当前用户的数据:
<c:forEach items="${users}" var="user" varStatus="s">
<tr>
<td>${s.index}</td>
<td>${user.username}</td>
<td>${user.password}</td>
</tr>
</c:forEach>
参考GPT和自己的思路:根据您提供的代码,您需要在登录成功后只查询并显示数据库中与登录用户相关的信息。您需要在findUserByPage方法中添加一个条件,以仅检索与已登录用户相关的信息。以下是可能的解决方案:
1 在登录servlet中,将登录用户的用户名保存到session中:
session.setAttribute("username", SlStudent.getUsername());
2 在servlet中获取已登录用户的用户名,并将其添加到查询条件中:
String username = (String) session.getAttribute("username");
condition.put("username", new String[]{username});
3 在daoimpl中修改SQL查询语句以包括条件:
String sql = "select * from only where 1=1";
if(condition.containsKey("username")){
sql += " and username='" + condition.get("username")[0] + "'";
}
List<Only> students = template.query(sql, new BeanPropertyRowMapper<Only>(Only.class));
这将只检索与已登录用户相关的信息,并在jsp页面中显示这些信息。