MVC/MyBatis+web-CRUD
MVC思想
目的:实现责任分离,把业务代码从视图中剥离出来
M: Model:模型对象(封装业务操作,算法,可重复使用,JavaBean).DAO Domain
V: View:视图(界面,JSP,HTML)
C: Controler:控制器(控制界面跳转,Servlet)
三层架构
就是把业务划分成:表现层、业务逻辑层、数据访问层。目的是为了“高内聚低耦合”的思想。
表现层(Predentation Layer):MVC,负责处理与界面交互的相关操作(Struts2/Spring MVC) JSP Servlet
业务层(Business Layer) :service,负责复杂的业务逻辑计算和判断(Spring) service
持久层(Persistent Layer) :ORM,负责将业务逻辑数据进行持久化存储(Hibernate/MyBatis) dao
项目实例的搭建
web-crud 流程(重点)
列表 显示所有员工的信息
获取数据库中的数据,显示到页面上。
执行list方法,调用业务方法,获取到员工列表数据,把列表数据用el表达式获取出来,用jstl循环标签显示到表格中
删除
删除指定的员工信息,并且回到列表界面。
执行delete方法,获取要删除的指定的id,调用业务方法删除指定id的员工信息。
添加
在点击添加按钮的时候,进入到编辑界面,当输入了数据之后,点击保存,在数据库中增加信息,并且回到列表界面.
点击添加按钮,执行input方法,直接使用请求转发,到input.jsp
在input.jsp中提交表单,执行saveOrUpdate方法,接受请求参数封装成Employee对象,调用业务方法保存Employee信息,重定向到/product
修改
在点击编辑按钮,进入到编辑界面,回显数据,点击保存,更新数据库,回到列表界面
执行input方法,根据是否传递了id值,来区分到底是编辑或者是新增,如果是编辑操作,查询出来指定的员工信息,并且显示到input.jsp中。
在input.jsp中提交表单,执行saveOrUpdate,根据是否提交了id参数来区分是编辑或者新增,使用隐藏域来提交id。
常见的错误演示
-
编码的处理一定要放在获取所有参数之前,不然无效.
-
出现数字格式化异常 : 把一个空字符串转化为Number 类型 --> 没有判空直接转化
java.lang.NumberFormatException: null
-
当不需要做数据共享的时候,使用URL重定向做跳转,不使用请求转发。
死循环执行添加操作–> 请求转发数据一直都在.
找问题的原则:
对于web应用,出现了数据错误问题,一定要第一时间定位到错误的位置.第一时间确定问题是出在前台界面,或者是后台数据库
-
在浏览器中打开F12,查看数据是否传递给了服务器,如果在请求中已经传递了数据,那么就可以不用看前台界面了.问题是后台的代码.
-
在servlet的service方法中,调用业务方法的地方打断点,确定到底是参数封装问题,还是调用业务的问题.这样可以将问题定位到是否是数据库问题.
注:web应用是交给tomcat管理的,所以直接打断点,只要有请求过来,service就可以被断掉.