数据的增删改查是如何完成的呢?过程你知道吗?流程你会画吗?MVC你真的学会了吗?其中运用的原理你真的知道吗?让我们更深层次的去了解。
第一部分:回顾java基础.面向对象与面向过程。
上面图中详细描绘了面向过程的思想。
面向对象的思想:将一项任务进行分解,让多个对象去完成。
上面的图是
老师将健康打卡的任务交给执行负责人。
执行负责人将健康打卡任务交给班长。
班长将健康打卡任务交给寝室长。
寝室长健康打卡将任务交给寝室成员 。
这就是对面向对象最好的理解。
上面我们理解了面向对象的基本理论。那请看下面的图。你是真的理解了吗?如果下面的图你了解的话,流程明白的话。说明你真的明白了。
注意:上面的图是利用了面向对象的思想哦。
实操部分
观察流程你要思考?建几个包几个类几个jsp导入那些框架,用那种方案连接数据库。
实操目标要将上面的图中数据显示在浏览器中。
第一步:你要有一个页面去显示数据。所以定义一个jsp文件用于显示mysql中的数据。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>学生信息对话列表</title> <style type="text/css"> *{ /* background: linear-gradient(to right,red,pink,blue); */ background:white font-size:30px; font-weight: bold; } input{ color: white; font-weight: bold; padding-bottom:10px; padding-top: 5px; padding-left:10px; padding-right:10px; border-width: 0px; } .in1{ background-color: lightcyan; color: black; } .in2{ background-color: darkcyan; color: black; } .in3{ background-color:red ; color: black; } in4{ background-color:black; color: white; } caption { font-size: 40px; font-weight:bold ; border: 2px solid pink; background: white; text-shadow: 3px 1px paleturquoise; } th{ font-size: 40px; font-weight:bold ; border: 2px solid pink; background: white; text-shadow: 3px 1px red; } tr{ font-size: 20px; font-weight: bold; border-radius: 6px; background: lightcyan; } td{ font-size: 20px; font-weight: bold; border-radius: 6px; background: pink; } </style> </head> <body> <!-- 使用表格展示从数据库中获取的所有学生信息 --> <div align="center"> <table border="3" style="width: 900px;text-align: center;border-collapse: collapse;"> <caption>学生书籍信息列表</caption> <tr> <th>书籍编号</th> <th>书籍名称</th> <th>书籍价格</th> <th>书籍数量</th> <th>书籍作者</th> <th>操作</th> </tr> <c:forEach items="${studentbook}" var="book" varStatus="v"> <tr> <td>${book.id}</td> <td>${book.bookname}</td> <td>${book.bookprick}</td> <td>${book.boooknumber}</td> <td>${book.bookautor}</td> <td style="width: 400px;"> <a href="bookaddstudent2.jsp"><input type="button" value="增加" class="in1"></a> <a href="bookUpdateStudent.jsp?index=${v.count-1 }"><input type="button" value="修改" class="in2"></a> <a href="bookDeleteStudent?id=${stu.id }"><input type="button" value="删除" class="in3"></a> </td> </tr> </c:forEach> </table> </div> <h3 style="color:white; background: black;"> MVC全名是Model View Controller,<br> 是 @@1模型(model)<br> @@2-视图(view)<br> @@3-控制器(controller)的缩写,<br> 一种软件设计典范,<br> 用一种业务逻辑、数据、界面显示分离的方法组织代码,<br> 将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,<br> 不需要重新编写业务逻辑。<br> MVC被独特的发展起来用于映射传统<br> 的输入、处理和输出功能在一个逻辑<br> 的图形化用户界面的结构中。<br> </h3> </body> </html>
第二步定义一个页面解决乱码问题这里运用到了,Servlect的过滤器。/*全部拦截。
package com.student.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * 用于拦截所有浏览器请求 */ @WebFilter("/*") public class MyFilter implements Filter { /** * Default constructor. */ public MyFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //设置请求和响应的字符编码格式为UTF-8 response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }
第三步.定义一个控制层的Servlect,用于发送信息,和接收信息。
首先你要明确你的数据库中发给servlect控制层时,用什么方式存放起来。方案一:实体类。方案二:四大域,利用list集合存放MAP集合的方式存放起来。
请看代码
package com.student.controller; import java.io.IOException; import java.util.List; import java.util.Map; 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 com.student.service.IStudentService; import com.student.service.StudentServiceImp; /** * Servlet implementation class HomeServlet */ @WebServlet("/HomeServlet") public class HomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HomeServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //将浏览器的任务接收,发给业务逻辑层处理 IStudentService service=new StudentServiceImp(); List<Map<String, Object>> oList=service.getStudents(); HttpSession session =request.getSession(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
控制层将任务发送给了逻辑层接口,而逻辑层的接口要发送给数据访问层的接口,数据访问层的接口将查询命令发送给数据访问层的实体类。在这之前要实现连接数据库。然后将数据层层返回个控制层的Servlect.
代码编译
package comstudentbookservlice; import java.util.List; import java.util.Map; public interface IStudentBookservlice { List<Map<String, Object>> getStudentBooks(); }
package comstudentbookservlice; import java.util.List; import java.util.Map; import comstudentbookdao.IStudentBookdao; import comstudentbookdao.StudentBookdaoImp; public class StudentBookserviceImp implements IStudentBookservlice { @Override public List<Map<String, Object>> getStudentBooks() { return ; } }
package comstudentbookdao; import java.util.List; import java.util.Map; public interface IStudentBookdao { List<Map<String, Object>> getStudentBooks(); }
package comstudentbookdao; import java.util.List; import java.util.Map; import com.student.utils.DBUtil; public class StudentBookdaoImp implements IStudentBookdao { @Override public List<Map<String, Object>> getStudentBooks() { return ; } }
控制层将任务发送给了逻辑层接口,而逻辑层的接口要发送给数据访问层的接口,数据访问层的接口将查询命令发送给数据访问层的实体类。在这之前要实现连接数据库。然后将数据层层返回个控制层的Servlect.理思路。
请看下面的代码。
上面的流程以完毕。