JavaWeb-MVC设计模式

元数据sql

Meata data数据库

描述数据的数据 String sql , 描述这份sql字符串的数据叫作元数据设计模式

数据库元数据 DatabaseMetaData 参数元数据 ParameterMetaData 结果集元数据 ResultSetMetaData架构

MVC设计模式

JSP的开发模式

三层架构&MVC练习

学生信息管理系统

数据库准备

CREATE DATABASE stus;
USE stus;
CREATE TABLE stu (
    sid INT PRIMARY KEY  AUTO_INCREMENT,
    sname VARCHAR (20),
    gender VARCHAR (5),
    phone VARCHAR (20),
    birthday DATE,
    hobby VARCHAR(50),
    info VARCHAR(200)
);

查询

  1. 先写一个JSP 页面, 里面放一个超连接 。jsp

    学生列表显示ide

  2. 写Servlet, 接收请求, 去调用 Service , 由service去调用daopost

  3. 先写Dao , 作Dao实现。spa

    public interface StudentDao {

    ​ /**.net

    • 查询全部学生设计

      • @return List */ List findAll() throws SQLException ; }

      public class StudentDaoImpl implements StudentDao {

​ /** * 查询全部学生 * @throws SQLException */ @Override public List findAll() throws SQLException { QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource()); return runner.query("select * from stu", new BeanListHandler(Student.class)); }

}
  1. 再Service , 作Service的实现。

    /**
     * 这是学生的业务处理规范
     * @author xiaomi
     *
     */
    public interface StudentService {
    
        /**
         * 查询全部学生
         * @return  List<Student>
         */
        List<Student> findAll()  throws SQLException ;
    
    }
    
    ------------------------------------------
    
    /**
     * 这是学生业务实现
     * @author xiaomi
     *
     */
    public class StudentServiceImpl implements StudentService{
    
        @Override
        public List<Student> findAll() throws SQLException {
            StudentDao dao = new StudentDaoImpl();
            return dao.findAll();
        }
    }
  2. 在servlet 存储数据,而且作出页面响应。

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

​ try { //1. 查询出来全部的学生 StudentService service = new StudentServiceImpl(); List list = service.findAll();

//2. 先把数据存储到做用域中
        request.setAttribute("list", list);
        //3. 跳转页面
        request.getRequestDispatcher("list.jsp").forward(request, response);

    } catch (SQLException e) {
        e.printStackTrace();
    }

}
  1. 在list.jsp上显示数据

EL + JSTL + 表格

增长

  1. 先跳转到增长的页面 , 编写增长的页面

  2. 点击添加,提交数据到AddServlet . 处理数据。

  3. 调用service

  4. 调用dao, 完成数据持久化。

  5. 完成了这些存储工做后,须要跳转到列表页面。 这里不能直接跳转到列表页面,不然没有什么内容显示。 应该先跳转到查询全部学生信息的那个Servlet, 由那个Servlet再去跳转到列表页面。

  6. 爱好的value 值有多个。

request.getParameter("hobby"); String[] hobby = request.getParameterValues("hobby") ---> String[] String value = Arrays.toString(hobby): // [爱好, 篮球, 足球]

删除

  1. 点击超连接,弹出一个询问是否删除的对话框,若是点击了肯定,那么就真的删除。

    <a href="#" onclick="doDelete(${stu.sid})">删除</a>

  1. 让超连接,执行一个js方法

  2. 在js访问里面判断点击的选项,而后跳转到servlet。

  3. servlet收到了请求,而后去调用service , service去调用dao

更新

  1. 点击列表上的更新, 先跳转到一个EditServlet

在这个Servlet里面,先根据ID 去查询这个学生的全部信息出来。

  1. 跳转到更新的页面。 ,而后在页面上显示数据

    <tr>
        <td>姓名</td>
        <td><input type="text" name="sname" value="${stu.sname }"></td>
      </tr>
    
    
       <tr>
        <td>性别</td>
        <td>
            <!-- 若是性别是男的,  能够在男的性别 input标签里面, 出现checked ,
            若是性别是男的,  能够在女的性别 input标签里面,出现checked -->
            <input type="radio" name="gender" value="男" <c:if test="${stu.gender == '男'}">checked</c:if>>男
            <input type="radio" name="gender" value="女" <c:if test="${stu.gender == '女'}">checked</c:if>>女
        </td>
      </tr>
    
    
     <tr>
        <td>爱好</td>
    
    
        <td>
            <!-- 爱好: 篮球 , 足球 , 看书 
            由于爱好有不少个,  里面存在包含的关系 -->
            <input type="checkbox" name="hobby" value="游泳" <c:if test="${fn:contains(stu.hobby,'游泳') }">checked</c:if>>游泳
            <input type="checkbox" name="hobby" value="篮球" <c:if test="${fn:contains(stu.hobby,'篮球') }">checked</c:if>>篮球
            <input type="checkbox" name="hobby" value="足球" <c:if test="${fn:contains(stu.hobby,'足球') }">checked</c:if>>足球
            <input type="checkbox" name="hobby" value="看书" <c:if test="${fn:contains(stu.hobby,'看书') }">checked</c:if>>看书
            <input type="checkbox" name="hobby" value="写字" <c:if test="${fn:contains(stu.hobby,'写字') }">checked</c:if>>写字
    
        </td>
      </tr>
  2. 修改完毕后,提交数据到UpdateServlet

提交上来的数据是没有带id的,因此咱们要手动建立一个隐藏的输入框, 在这里面给定id的值, 以便提交表单,带上id。

<form method="post" action="UpdateServlet">
        <input type="hidden" name="sid" value="${stu.sid }">

        ...
    </form>
  1. 获取数据,调用service, 调用dao.

分页功能

  • 物理分页 (真分页)

来数据库查询的时候,只查一页的数据就返回了。

优势 内存中的数据量不会太大
缺点:对数据库的访问频繁了一点。

SELECT * FROM stu LIMIT 5 OFFSET 2
  • 逻辑分页 (假分页)

一口气把全部的数据所有查询出来,而后放置在内存中。

优势: 访问速度快。
缺点: 数据库量过大,内存溢出。

相关文章
相关标签/搜索