这个案例用模拟数据库结合Spring MVC开发,旨在更好地理解后面的整合mybatis框架。
步骤:
1 . 设计User类
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
//省略set/get方法
2 . 写UserController类,构造方法里面模拟数据库信息
@Controller
@RequestMapping("/user")//窄化----分模块开发,团队协作,相当于Struts2的namespace
public class UserController {
private List<User> list=new ArrayList<User>();
public UserController() {
list.add(new User(1,"张三","11111"));
list.add(new User(2,"李四","22222"));
list.add(new User(3,"王五","33333"));
}
3 . 设计展示页面
首先写@RequestMapping跳转,里面封装数据
@RequestMapping("/list")
public String list(ModelMap map){
map.addAttribute("list", list);
return "/list.jsp";//注意页面的跳转
}
再者写JSP页面,JSP导入JSTL标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
利用forEach循环结合HTML写出展示页面
<body>
<table width="80%" align="center">
<tr>
<td colspan="4" align="right"><a href="add.jsp">添加</a></td>
</tr>
<tr>
<td>编码</td>
<td>姓名</td>
<td>名字</td>
<td>操作</td>
</tr>
<c:forEach items="${list }" var="bean">
<tr>
<td>${bean.id }</td>
<td>${bean.name }</td>
<td>${bean.pwd }</td>
<td><a href="user/delete1.do?id=${bean.id }">删除1</a></td>
<td><a href="user/delete2/${bean.id}.do">删除2</a></td>
</tr>
</c:forEach>
</table>
</body>
4 . JSP里面设计add和delete链接
add链接点击跳转到add.jsp,add.jsp写form提交数据交给@RequestMapping处理后给list.do,最后再次到展示页面
<body>
<form action="user/add.do" method="post">
姓名<input type="text" name="name"><br>
密码<input type="password" name="pwd"><br>
<input type="submit" name="submit">
</form>
</body>
@RequestMapping("/add")
//表单的name和pwd作为对象的属性提交给user参数
public String add(User user){
//获取user的id
user.setId(list.get(list.size()-1).getId()+1);
list.add(user);
return "redirect:list.do";//最好重定向,如果是转发,请求数据还在,刷新后还会添加
}
delete链接直接到@RequestMapping请求处理再给list.do最后到展示页面,上述delete2使用了restful风格
@RequestMapping("/delete1")
public String delete(int id){
for(int i=0;i<list.size();i++){
if(list.get(i).getId()==id){
list.remove(i);//id可能会变,比如list.get(3).getId()不一定为4,所以不能直接写list.remove(id-1)
break;
}
}
return "redirect:list.do";
}
@RequestMapping("/delete2/{id}")
public String delete2(@PathVariable("id")int id){
for(int i=0;i<list.size();i++){
if(list.get(i).getId()==id){
list.remove(i);//id可能会变,比如list.get(3).getId()不一定为4,所以不能直接写list.remove(id-1)
break;
}
}
return "redirect:/user/list.do";
}
调试记载:
1 .在一个类前面有@RequestMapping请求路径方法也有请求路径像这种就叫窄化。上述就是在/user下找/list.do
窄化—-分模块开发,团队协作,相当于Struts2的namespace
2 . 要注意页面的跳转,路径是否正确,也可以使用视图解析器,就不用再书写时候特别注意,因为视图解析器可以配置前后缀,但是上述这种不用视图解析器最常用和常见。
3 . jsp导入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
prefix是定义的标签前缀
uri是要用的标签库的一个资源定位
特别注意后面的uri地址,不要和下面的搞混了,特别小心
http://java.sun.com/jstl/core
4 .<!--items是迭代的集合对象,var是变量名,items取出的元素赋值给var变量名字 -->
<c:forEach items="${list }" var="bean">
<tr>
<!-- 通过get方法取出bean的值,所以bean对象这里就是User对象必须有get方法,否则成员变量private无法取出-->
<td>${bean.id }</td>