• 69期-Java SE-055_综合练习


    webdemo.sql

    -- MySQL dump 10.13  Distrib 8.0.11, for macos10.13 (x86_64)
    --
    -- Host: 127.0.0.1    Database: webdemo
    -- ------------------------------------------------------
    -- Server version    8.0.11
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
     SET NAMES utf8mb4 ;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    
    --
    -- Table structure for table `classes`
    --
    
    DROP TABLE IF EXISTS `classes`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
     SET character_set_client = utf8mb4 ;
    CREATE TABLE `classes` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `classes`
    --
    
    LOCK TABLES `classes` WRITE;
    /*!40000 ALTER TABLE `classes` DISABLE KEYS */;
    INSERT INTO `classes` VALUES (1,'一班'),(2,'二班'),(3,'三班');
    /*!40000 ALTER TABLE `classes` ENABLE KEYS */;
    UNLOCK TABLES;
    
    --
    -- Table structure for table `student`
    --
    
    DROP TABLE IF EXISTS `student`;
    /*!40101 SET @saved_cs_client     = @@character_set_client */;
     SET character_set_client = utf8mb4 ;
    CREATE TABLE `student` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(11) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `cid` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `cid` (`cid`),
      CONSTRAINT `student_ibfk_1` FOREIGN KEY (`cid`) REFERENCES `classes` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    --
    -- Dumping data for table `student`
    --
    
    LOCK TABLES `student` WRITE;
    /*!40000 ALTER TABLE `student` DISABLE KEYS */;
    INSERT INTO `student` VALUES (1,'张三',20,1),(2,'李四',21,1),(3,'王五',22,2),(4,'小明',18,2),(5,'小红',17,3);
    /*!40000 ALTER TABLE `student` ENABLE KEYS */;
    UNLOCK TABLES;
    /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
    
    /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
    
    -- Dump completed on 2019-07-30 22:03:45

    55.md

    ###Java Web 开发核心组件
    
    Servlet:负责业务逻辑处理,接收客户端请求,作出响应。
    
    JSP:负责用户交互界面,将业务数据展示给用户,并且提供用户操作界面。
    
    EL:简化 JSP 复杂的编码。
    
    JSTL:提供了一组标准标签库,进行开发,使得 JSP 代码更加简洁,JSTL + EL。
    
    Ajax:异步加载,局部刷新。
    
    Filter:对请求和响应进行过滤。
    
    客户端 —> Controller —> Service —> Repository —> DB

     index.jsp

    <%--
      Created by IntelliJ IDEA.
      User: southwind
      Date: 2019-07-30
      Time: 20:03
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
        <table>
          <tr>
            <th>学生编号</th>
            <th>学生姓名</th>
            <th>学生年龄</th>
            <th>所在班级</th>
            <th>操作</th>
          </tr>
          <c:forEach items="${requestScope.list}" var="student">
            <tr>
              <td>${student.id}</td>
              <td>${student.name}</td>
              <td>${student.age}</td>
              <td>${student.classes.name}</td>
              <td>
                <a href="/student.do?method=deleteById&id=${student.id}">删除</a>
                <a href="/student.do?method=findById&id=${student.id}">修改</a>
              </td>
            </tr>
          </c:forEach>
        </table>
      </body>
    </html>

    update.jsp

    <%--
      Created by IntelliJ IDEA.
      User: southwind
      Date: 2019-07-30
      Time: 21:50
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <form action="/student.do?method=update" method="post">
            学生编号:<input type="text" readonly value="${student.id}" name="id"/><br/>
            学生姓名:<input type="text" value="${student.name}" name="name"/><br/>
            学生年龄:<input type="text" value="${student.age}" name="age"/><br/>
            所在班级:<select>
            <c:forEach items="${list}" var="classes">
                <option
                        <c:if test="${student.cid == classes.id}">
                        selected
                        </c:if>
                        value="${classes.id}">${classes.name}</option>
            </c:forEach>
        </select>
        </form>
    </body>
    </html>

     web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    </web-app>

     

     c3p0-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
    
        <named-config name="testc3p0">
            
            <!-- 指定连接数据源的基本属性 -->
            <property name="user">root</property>
            <property name="password">root</property>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/webdemo?useUnicode=true&amp;characterEncoding=UTF-8</property>
            
            <!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 -->
            <property name="acquireIncrement">5</property>
            <!-- 初始化数据库连接池时连接的数量 -->
            <property name="initialPoolSize">5</property>
            <!-- 数据库连接池中的最小的数据库连接数 -->
            <property name="minPoolSize">5</property>
            <!-- 数据库连接池中的最大的数据库连接数 -->
            <property name="maxPoolSize">10</property>
        
        </named-config>
            
    </c3p0-config>

     

     StudentServlet.java

    package com.southwind.controller;
    
    import com.southwind.entity.Classes;
    import com.southwind.entity.Student;
    import com.southwind.service.StudentService;
    import com.southwind.service.impl.StudentServiceImpl;
    
    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 java.io.IOException;
    import java.util.List;
    
    @WebServlet("/student.do")
    public class StudentServlet extends HttpServlet {
    
        private StudentService studentService = new StudentServiceImpl();
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            this.doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String method = req.getParameter("method");
            if(method==null){
                method="findAll";
            }
            switch (method){
                case "findAll":
                    List<Student> list = studentService.findAll();
                    req.setAttribute("list",list);
                    req.getRequestDispatcher("index.jsp").forward(req,resp);
                    break;
                case "deleteById":
                    String idStr = req.getParameter("id");
                    Integer id = Integer.parseInt(idStr);
                    studentService.deleteById(id);
                    resp.sendRedirect("/student.do?method=findAll");
                    break;
                case "findById":
                    idStr = req.getParameter("id");
                    id = Integer.parseInt(idStr);
                    Student student = studentService.findById(id);
                    List<Classes> classList = studentService.findAllClasses();
                    req.setAttribute("student",student);
                    req.setAttribute("list",classList);
                    req.getRequestDispatcher("update.jsp").forward(req,resp);
                    break;
            }
    
        }
    }

     Classes.java

    package com.southwind.entity;
    
    import java.util.List;
    
    public class Classes {
        private Integer id;
        private String name;
        private List<Student> students;
    
        public Classes(Integer id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public List<Student> getStudents() {
            return students;
        }
    
        public void setStudents(List<Student> students) {
            this.students = students;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    Student.java

    package com.southwind.entity;
    
    public class Student {
        private Integer id;
        private String name;
        private Integer age;
        private Integer cid;
        private Classes classes;
    
        public Integer getCid() {
            return cid;
        }
    
        public void setCid(Integer cid) {
            this.cid = cid;
        }
    
        public Student(Integer id, String name, Integer age, Integer cid) {
            this.id = id;
            this.name = name;
            this.age = age;
            this.cid = cid;
        }
    
        public Classes getClasses() {
            return classes;
        }
    
        public void setClasses(Classes classes) {
            this.classes = classes;
        }
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }

     ClassesRepository.java

    package com.southwind.repository;
    
    import com.southwind.entity.Classes;
    
    import java.util.List;
    
    public interface ClassesRepository {
        public Classes findById(Integer id);
        public List<Classes> findAll();
    }

    StudentRepository.java

    package com.southwind.repository;
    
    import com.southwind.entity.Student;
    
    import java.util.List;
    
    public interface StudentRepository {
        public List<Student> findAll();
        public void deleteById(Integer id);
        public Student findById(Integer id);
    }

     ClassesRepositoryImpl.java

    package com.southwind.repository.impl;
    
    import com.southwind.entity.Classes;
    import com.southwind.repository.ClassesRepository;
    import com.southwind.util.JDBCTools;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class ClassesRepositoryImpl implements ClassesRepository {
        @Override
        public Classes findById(Integer id) {
            Connection connection = JDBCTools.getConnection();
            String sql = "select * from classes where id = ?";
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            Classes classes = null;
            try {
                preparedStatement = connection.prepareStatement(sql);
                preparedStatement.setInt(1,id);
                resultSet = preparedStatement.executeQuery();
                if(resultSet.next()){
                    String name = resultSet.getString(2);
                    classes = new Classes(id,name);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCTools.release(connection,preparedStatement,resultSet);
            }
            return classes;
        }
    
        @Override
        public List<Classes> findAll() {
            Connection connection = JDBCTools.getConnection();
            String sql = "select * from classes";
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            List<Classes> list = new ArrayList<>();
            try {
                preparedStatement = connection.prepareStatement(sql);
                resultSet = preparedStatement.executeQuery();
                while(resultSet.next()){
                    int id = resultSet.getInt(1);
                    String name = resultSet.getString(2);
                    Classes classes = new Classes(id,name);
                    list.add(classes);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCTools.release(connection,preparedStatement,resultSet);
            }
            return list;
        }
    }

    StudentRepositoryImpl.java

    package com.southwind.repository.impl;
    
    import com.southwind.entity.Student;
    import com.southwind.repository.StudentRepository;
    import com.southwind.util.JDBCTools;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class StudentRepositoryImpl implements StudentRepository {
        @Override
        public List<Student> findAll() {
            Connection connection = JDBCTools.getConnection();
            String sql = "select * from student";
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            List<Student> list = new ArrayList<>();
            try {
                preparedStatement = connection.prepareStatement(sql);
                resultSet = preparedStatement.executeQuery();
                while(resultSet.next()){
                    int id = resultSet.getInt(1);
                    String name = resultSet.getString(2);
                    int age = resultSet.getInt(3);
                    int cid = resultSet.getInt(4);
                    list.add(new Student(id,name,age,cid));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCTools.release(connection,preparedStatement,resultSet);
            }
            return list;
        }
    
        @Override
        public void deleteById(Integer id) {
            Connection connection = JDBCTools.getConnection();
            String sql = "delete from student where id = ?";
            PreparedStatement preparedStatement = null;
            try {
                preparedStatement = connection.prepareStatement(sql);
                preparedStatement.setInt(1,id);
                preparedStatement.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                JDBCTools.release(connection,preparedStatement,null);
            }
        }
    
        @Override
        public Student findById(Integer id) {
            Connection connection = JDBCTools.getConnection();
            String sql = "select * from student where id = ?";
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;
            Student student = null;
            try {
                preparedStatement = connection.prepareStatement(sql);
                preparedStatement.setInt(1,id);
                resultSet = preparedStatement.executeQuery();
                if(resultSet.next()){
                    String name = resultSet.getString(2);
                    int age = resultSet.getInt(3);
                    int cid = resultSet.getInt(4);
                    student = new Student(id,name,age,cid);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JDBCTools.release(connection,preparedStatement,resultSet);
            }
            return student;
        }
    }

     StudentService.java

    package com.southwind.service;
    
    import com.southwind.entity.Classes;
    import com.southwind.entity.Student;
    
    import java.util.List;
    
    public interface StudentService {
        public List<Student> findAll();
        public void deleteById(Integer id);
        public Student findById(Integer id);
        public List<Classes> findAllClasses();
    }

     StudentServiceImp.java

    package com.southwind.service.impl;
    
    import com.southwind.entity.Classes;
    import com.southwind.entity.Student;
    import com.southwind.repository.ClassesRepository;
    import com.southwind.repository.StudentRepository;
    import com.southwind.repository.impl.ClassesRepositoryImpl;
    import com.southwind.repository.impl.StudentRepositoryImpl;
    import com.southwind.service.StudentService;
    
    import java.util.List;
    
    public class StudentServiceImpl implements StudentService {
    
        private StudentRepository studentRepository = new StudentRepositoryImpl();
        private ClassesRepository classesRepository = new ClassesRepositoryImpl();
    
        @Override
        public List<Student> findAll() {
            List<Student> list = studentRepository.findAll();
            for(Student student:list){
                Classes classes = classesRepository.findById(student.getCid());
                student.setClasses(classes);
            }
            return list;
        }
    
        @Override
        public void deleteById(Integer id) {
            studentRepository.deleteById(id);
        }
    
        @Override
        public Student findById(Integer id) {
            return studentRepository.findById(id);
        }
    
        @Override
        public List<Classes> findAllClasses() {
            return classesRepository.findAll();
        }
    }

     JDBCTools.java

    package com.southwind.util;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JDBCTools {
        private static DataSource dataSource;
        static {
            dataSource = new ComboPooledDataSource("testc3p0");
        }
    
        public static Connection getConnection(){
            Connection connection = null;
            try {
                connection = dataSource.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return connection;
        }
    
        public static void release(Connection connection, Statement statement, ResultSet resultSet){
            try {
                if(connection!=null){
                    connection.close();
                }
                if(statement!=null){
                    statement.close();
                }
                if(resultSet!=null){
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    在有跳板机的情况下,SecureCRT自动连接到目标服务器
    JavaScript中使用console调试程序的坑
    Python中docstring文档的写法
    Nginx+uWSGI+Django原理
    uWSGI uwsgi_response_write_body_do(): Connection reset by peer 报错的解决方法
    Python LOGGING使用方法
    Python计算斗牛游戏的概率
    Python垃圾回收机制详解
    PhantomJS实现最简单的模拟登录方案
    如何设置Jquery UI Menu 菜单为横向展示
  • 原文地址:https://www.cnblogs.com/HiJackykun/p/11553671.html
Copyright © 2020-2023  润新知