1.学习内容
对SpringMVC进行了详细的学习,SpringMVC的请求与响应、拦截器、异常处理。
SpringMVC的数据响应方式
页面跳转
1.直接返回字符串
2.通过ModelAndView对象返回
回写数据
1.直接返回字符串
2.返回对象或集合
SpringMVC可以接收的参数:基本类型参数、POJO类型参数、数组类型参数、集合类型参数。
Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。
Spring异常处理:
1使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver
2.实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器
2.成果展示
Spring自动完成参数注入,转发数据到其他页面
@RequestMapping("/login")
public String login(String loginName, String loginPassword, String checkCode, HttpSession session, Model model){
//获取生成验证码
String checkCode_session = (String) session.getAttribute("checkCode_session");
//删除Session储存的验证码
session.removeAttribute("checkCode_session");
if (checkCode_session != null && checkCode_session.equalsIgnoreCase(checkCode)) {
//调用login方法
UserService service = new UserServiceImpl();
User user = service.user_login(loginName,loginPassword);
//调用findbyName方法将信息传入reg_success.jsp
User userByName = service.findUserByName(loginName);
//判断user
if (user == null) {
//登录失败
//储存提示信息到request
model.addAttribute("longin_error", "用户名或密码错误!");
//转发到登陆页面
return "/user/login.jsp";
//request.getRequestDispatcher("/login.jsp").forward(request, response);
} else {
//登录成功
//储存用户信息
session.setAttribute("user",loginName);
session.setAttribute("users",userByName);
//重定向到index.jsp页面
return "redirect:/index.jsp";
//response.sendRedirect(request.getContextPath() + "/index.jsp");
}
} else {
//验证码不一致
//储存信息到request
model.addAttribute("cc_error", "验证码错误!");
//转发到登录页面
return "/user/login.jsp";
//request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
完成用户与订单的多表查询
Service层
@Override
public List<User> findAll() {
//调用Dao完成查询
List<User> userList = dao.findAll();
//封装userList中的每一个user的food数据
for (User user : userList) {
//获得user的id
int id = user.getId();
//将user的id作为参数,查询对应food的集合数据
List<Food> foods =dao.findFoodsById(id);
user.setFoods(foods);
}
return userList;
}
dao层
public List<Food> findFoodsById(int id) {
//定义sql
String sql = "select * from user_food uf,food f where uf.foodId=f.id and uf.userId=?";
return template.query(sql,new BeanPropertyRowMapper<Food>(Food.class),id);
}
视图层
<%--jstl简化java书写遍历--%>
<c:forEach items="${users}" var="user" varStatus="s">
<tr>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.gender}</td>
<td>${user.age}</td>
<td>${user.tel}</td>
<td>${user.password}</td>
<td>
<c:forEach items="${user.foods}" var="food">
${food.foodName}
</c:forEach>
</td>
<td>
<a class="cha" href="${pageContext.request.contextPath}/manger/findUserById?id=${user.id}">修改</a>
<a class="dle" href="javascript:deleteUser(${user.id})">删除</a>
</td>
</tr>
</c:forEach>