查询是UserlistServlet调用UserService,通过UserService调用findAll()方法,返回的是list集合,因为到时候需要在list.jsp通过标签显示出数据,可以通过循环,看以下代码:
<c:forEach items="${users}" var="user" varStatus="s">
<tr>
<td><input type="checkbox"></td>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.gender}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a class="btn btn-default btn-sm" href="update.html">修改</a> <a class="btn btn-default btn-sm" href="">删除</a></td>
</tr>
</c:forEach>
所以需要把查询到的结果封装成list集合,在Servlet中数据共享转发到list.jsp
那么如何封装成list集合呢:
@Override
public List<User> findAll() {
//使用JDBC操作数据库...
//1.定义sql
String sql = "select * from user";
List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
return users;
}
登录是loginServlet调用UserService,通过UserService调用login方法返回User对象,目的是登录成功之后可以通过user对象获取到用户名这样就可以在登录成功之后显示:“xx,欢迎登录”
<div> ${user.name},欢迎您</div>
所以需要把查询到的结果封装成User对象,
那么如何封装成User对象呢:
UserDaoImpl
@Override
public User findUserByUsernamePassword(String username, String password) {
try{
String sql="select * from user where username=? and password=?";
User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
return user;
}catch (Exception e){
e.printStackTrace();
return null;
}
/*注意这里要用try..catch..
* 因为template.queryForObject结果为空会报错
*/
UserServiceImpl
@Override
public User login(User user) {
return dao.findUserByUsernamePassword(user.getUsername(),user.getPassword());
}
}
loginServlet
package cn.itcast.web.servlet;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;
import cn.itcast.service.impl.UserServiceImpl;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
/**
* @Description:
*/
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置编码
request.setCharacterEncoding("utf-8");
//2.获取验证码
String verifycode = request.getParameter("verifycode");
//校验验证码
//获取生成的验证码
HttpSession session = request.getSession();
String checkcode_server = (String)session.getAttribute("CHECKCODE_SERVER");//强制转换
session.removeAttribute("CHECKCODE_SERVE"); //记得移除验证码,是为了确保验证码一次性
if(!checkcode_server.equalsIgnoreCase(verifycode)){ //忽略大小写
//验证码不正确
//提示信息
request.setAttribute("login_msg","验证码错误!");
// 跳转登录页面
request.getRequestDispatcher("/login.jsp").forward(request,response);
return;
}
//3.获取数据
Map<String, String[]> map = request.getParameterMap(); //将用户输入的数据封装成map集合
//4.封装User对象
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//4.调用Service查询
UserService service=new UserServiceImpl();
User loginUser = service.login(user);
//5.判断是否登录成功
if(loginUser!=null){
//登录成功
//将用户存入session
session.setAttribute("user",loginUser);
//跳转页面
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{
//登录失败
//提示信息
request.setAttribute("login_msg","用户名或密码错误");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}