日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

学生管理系统(SSM简易版)总结

發布時間:2025/3/20 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学生管理系统(SSM简易版)总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

技術準備

為了完成這個項目,需要掌握如下技術:

  • Java
    基礎知識
  • 前端:
    HTML, CSS, JAVASCRIPT, JQUERY
  • J2EE:
    Tomcat, Servlet, JSP, Filter
  • 框架:
    Spring, Spring MVC, MyBatis, Spring 與 MyBatis 整合, SSM 整合
  • 數據庫:
    MySQL
  • 開發工具:
    IDEA, Maven

開發流程

之前雖然已經使用 Servlet + JSP 完成了簡單的開發,這次使用 SSM 僅僅是重構工作,但我們仍然按照商業項目的開發步驟來一步一步完成,進一步熟悉這個過程,重復的部分我就直接復制了。

① 需求分析

首先要確定要做哪些功能

  • 使用數據庫保存數據
  • 增刪改查學生的信息(學號,名稱,年齡,性別,出生日期)

② 表結構設計

根據需求,那么只需要一個 student 表就能夠完成功能了。

  • 創建數據庫:student
    將數據庫編碼格式設置為 UTF-8 ,便于存取中文數據

    DROP DATABASE IF EXISTS student; CREATE DATABASE student DEFAULT CHARACTER SET utf8;
  • 創建學生表:student
    不用學生學號(studentID)作為主鍵的原因是:不方便操作,例如在更新數據的時候,同時也要更改學號,那這樣的操作怎么辦呢?
    所以我們加了一個 id 用來唯一表示當前數據。

    CREATE TABLE student(id int(11) NOT NULL AUTO_INCREMENT,student_id int(11) NOT NULL UNIQUE,name varchar(255) NOT NULL,age int(11) NOT NULL,sex varchar(255) NOT NULL,birthday date DEFAULT NULL,PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

MySQL 在 Windows 下不區分大小寫,但在 Linux 下默認區分大小寫,因此,數據庫名、表明、字段名都不允許出現任何大寫字母,避免節外生枝。

③ 原型設計

就是設計界面,在商業項目中,這是很重要的一步,我們可以解除界面原型,低成本、高效率的與客戶達成需求的一致性

這個項目一共就分為兩個頁面:

  • 主頁面:

  • 學生編輯頁面:

④ SSM 環境搭建

在真正開始編寫代碼之前,我們首先需要先來搭建好我們的 SSM 環境。

第一步:創建 Maven webapp 項目

首先新建工程,選擇 Maven 標簽,然后勾選上【Create from archetype】選擇 webapp:

點擊下一步,填寫上【GroupId】和【ArtifactId】:

  • GroupId:項目組織唯一的標識符,實際對應 JAVA 的包的結構,也就是 main 目錄下 java 的目錄結構(包)
  • AritifactId:項目的唯一標識符,實際對應項目的名稱,就是項目根目錄的名稱
  • 實際上你可以亂填上試試,我就不亂填了

然后是確認項目路徑,這一步你可以看到 Maven 配置中的參數,不需要做改動,直接下一步就可以(圖中的路徑是我配置的本地 Maven 倉庫的地址):

確認項目名稱和路徑,點擊【Finish】即可:

等待一會兒,控制臺就會有創建成功的提示信息,我們把【Enable Auto-Import】點上,這個提示會在每次 pom.xml 有改動時出現,自動導入,省掉麻煩:

第二步:搭建項目目錄結構

下面就是 Maven 風格的 webapp 的默認目錄結構:

  • 注意: webapp 是默認沒有 java 源文件也沒有 test 目錄的。

遵循 Maven 的統一項目結構,我們搭建出項目的完整目錄結構如下圖:

  • 我們并沒有使用 Log4j 來輸出日志,而是使用 logback
  • 提示:我們可以在 IDEA 中右鍵目錄然后選擇【Make Directory as】,讓 IDEA 識別不同的目錄作用

這里的目錄建好之后還需要設置一下,讓 IDEA 識別目錄作用,選擇【File】>【Project Structure】:

設置好之后點擊 OK,即完成了項目目錄的搭建。

第三步:配置文件內容

在【pom.xml】文件中聲明依賴的 jar 包 :

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><packaging>war</packaging><name>StudentManagerSSM</name><groupId>cn.wmyskxz</groupId><artifactId>StudentManagerSSM</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.7</version><configuration><connectors><connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"><port>8888</port><maxIdleTime>30000</maxIdleTime></connector></connectors><webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory><contextPath>/</contextPath></configuration></plugin></plugins></build><properties><!-- 設置項目編碼編碼 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- spring版本號 --><spring.version>4.3.5.RELEASE</spring.version><!-- mybatis版本號 --><mybatis.version>3.4.1</mybatis.version></properties><dependencies><!-- jstl標簽 --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-impl</artifactId><version>1.2.5</version></dependency><!-- java ee --><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>7.0</version></dependency><!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- 實現slf4j接口并整合 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.2</version></dependency><!-- JSON --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.7</version></dependency><!-- 數據庫 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.41</version><scope>runtime</scope></dependency><!-- 數據庫連接池 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><!-- MyBatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!-- mybatis/spring整合包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency></dependencies></project>
  • <build> 標簽是默認生成的
  • 我們在 <properties> 中聲明了編碼格式以及使用的 spring 和 mybatis 的版本號,然后在 <dependencies> 中聲明了具體的 jar 包

在【web.xml】中聲明編碼過濾器并配置 DispatcherServlet :

<?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_3_1.xsd"version="3.1"><!-- 編碼過濾器 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 配置DispatcherServlet --><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置springMVC需要加載的配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-*.xml</param-value></init-param><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>SpringMVC</servlet-name><!-- 匹配所有請求 --><url-pattern>/</url-pattern></servlet-mapping></web-app>

在【spring-mybatis.xml】中完成 spring 和 mybatis 的配置:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 掃描service包下所有使用注解的類型 --><context:component-scan base-package="cn.wmyskxz.service"/><!-- 配置數據庫相關參數properties的屬性:${url} --><context:property-placeholder location="classpath:jdbc.properties"/><!-- 數據庫連接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driver}"/><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><property name="maxPoolSize" value="${c3p0.maxPoolSize}"/><property name="minPoolSize" value="${c3p0.minPoolSize}"/><property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/><property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/><property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/></bean><!-- 配置SqlSessionFactory對象 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注入數據庫連接池 --><property name="dataSource" ref="dataSource"/><!-- 掃描entity包 使用別名 --><property name="typeAliasesPackage" value="cn.wmyskxz.entity"/><!-- 掃描sql配置文件:mapper需要的xml文件 --><property name="mapperLocations" value="classpath:mapper/*.xml"/></bean><!-- 配置掃描Dao接口包,動態實現Dao接口,注入到spring容器中 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 注入sqlSessionFactory --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!-- 給出需要掃描Dao接口包 --><property name="basePackage" value="cn.wmyskxz.dao"/></bean><!-- 配置事務管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 注入數據庫連接池 --><property name="dataSource" ref="dataSource"/></bean><!-- 配置基于注解的聲明式事務 --><tx:annotation-driven transaction-manager="transactionManager"/></beans>

在【spring-mvc.xml】中完成 Spring MVC 的相關配置:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><!-- 掃描web相關的bean --><context:component-scan base-package="cn.wmyskxz.controller"/><!-- 開啟SpringMVC注解模式 --><mvc:annotation-driven/><!-- 靜態資源默認servlet配置 --><mvc:default-servlet-handler/><!-- 配置jsp 顯示ViewResolver --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean></beans>

在【jdbc.properties】中配置 c3p0 數據庫連接池:

jdbc.driver=com.mysql.jdbc.Driver #數據庫地址 jdbc.url=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8 #用戶名 jdbc.username=root #密碼 jdbc.password=root #最大連接數 c3p0.maxPoolSize=30 #最小連接數 c3p0.minPoolSize=10 #關閉連接后不自動commit c3p0.autoCommitOnClose=false #獲取連接超時時間 c3p0.checkoutTimeout=10000 #當獲取連接失敗重試次數 c3p0.acquireRetryAttempts=2

在【logback.xml】中完成日志輸出的相關配置:

<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT"/></root> </configuration>

以上就完成了 SSM 框架的基本配置:

  • 添加進了 SSM 項目所需要的 jar 包
  • 配置好了 spring/mybatis/spring MVC 的相關配置信息(自動掃描 cn.wmyskxz 包下的帶有注解的類)
  • 通過 xml 配置的方式配置好了日志和數據庫

⑤ 實體類設計

實體類僅僅是對數據庫中表的一一映射(表中字段名應該和實體類中的名稱一一對應),同時可能還需要兼顧對業務能力的支持。

  • 在 Packge【cn.wmyskxz.entity】下創建 Student 類:
package cn.wmyskxz.entity;import java.util.Date;/** ?Student 實體類*/public class Student {private int id;private int student_id;private String name;private int age;private String sex;private Date birthday;/* getter and setter */}

⑤ DAO 類的設計

DAO,即 Date Access Object,數據庫訪問對象,就是對數據庫相關操作的封裝,讓其他地方看不到 JDBC 的代碼。

在【cn.wmyskxz.dao】包下創建【StudentDao】接口:

package cn.wmyskxz.dao;import cn.wmyskxz.entity.Student;import java.util.List;public interface StudentDao {int getTotal();void addStudent(Student student);void deleteStudent(int id);void updateStudent(Student student);Student getStudent(int id);List<Student> list(int start, int count); }

然后在【resources/mapper】下創建好對應的映射文件【StudengDao.xml】:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 將namespace的值設置為DAO類對應的路徑 --> <mapper namespace="cn.wmyskxz.dao.StudentDao"><!-- 查詢數據條目 --><select id="getTotal" resultType="int">SELECT COUNT(*) FROM student</select><!-- 增加一條數據 --><insert id="addStudent" parameterType="Student">INSERT INTO student VALUES(NULL, #{student_id}, #{name}, #{age}, #{sex}, #{birthday})</insert><!-- 刪除一條數據 --><delete id="deleteStudent" parameterType="int">DELETE FROM student WHERE id = #{id}</delete><!-- 更新一條數據 --><update id="updateStudent" parameterType="Student">UPDATE student SET student_id = #{student_id}, name = #{name},age = #{age}, sex = #{sex}, birthday = #{birthday} WHERE id = #{id}</update><!-- 查詢一條數據 --><select id="getStudent" resultMap="student" parameterType="int">SELECT * FROM student WHERE id = #{id}</select><resultMap id="student" type="student"><id column="id" property="id"/><result column="student_id" property="student_id"/><result column="name" property="name"/><result column="age" property="age"/><result column="sex" property="sex"/><result column="birthday" property="birthday"/></resultMap><!-- 查詢從start位置開始的count條數據--><select id="list" resultMap="student">SELECT * FROM student ORDER BY student_id desc limit #{param1}, #{param2}</select> </mapper>

編寫好了 Dao 類是需要測試的,這里測試類就不給出了。

⑦ 業務類設計

  • 問題: 為什么不直接使用 Dao 類而是還要在上面封裝一層 Service 層呢?
  • 回答:
    基于責任分離的原則,Dao 層就應該專注于對數據庫的操作,而在 Service 層我們可以增加一些非 CRUD 的方法去更好的完成本身抽離出來的 service 服務(業務處理)。

在【cn.wmyskxz.service】包下創建【StudentService】接口:

package cn.wmyskxz.service;import cn.wmyskxz.entity.Student;import java.util.List;public interface StudentService {/*** 獲取到 Student 的總數* @return*/int getTotal();/*** 增加一條數據* @param student*/void addStudent(Student student);/*** 刪除一條數據* @param id*/void deleteStudent(int id);/*** 更新一條數據* @param student*/void updateStudent(Student student);/*** 找到一條數據* @param id* @return*/Student getStudent(int id);/*** 列舉出從 start 位置開始的 count 條數據* @param start* @param count* @return*/List<Student> list(int start, int count); }

并在相同包名下創建實現類【StudentServiceImpl】:

package cn.wmyskxz.service;import cn.wmyskxz.dao.StudentDao; import cn.wmyskxz.entity.Student; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.List;/*** StudentService 的實現類** @author: @我沒有三顆心臟* @create: 2018-04-23-下午 13:51*/ @Service public class StudentServiceImpl implements StudentService {@AutowiredStudentDao studentDao;public int getTotal() {return studentDao.getTotal();}public void addStudent(Student student) {studentDao.addStudent(student);}public void deleteStudent(int id) {studentDao.deleteStudent(id);}public void updateStudent(Student student) {studentDao.updateStudent(student);}public Student getStudent(int id) {return studentDao.getStudent(id);}public List<Student> list(int start, int count) {return studentDao.list(start, count);} }

⑧ 功能開發

在【cn.wmyskxz.controller】包下創建【StudentController】控制器,代碼基本上都是復制黏貼之前在 Servlet 中的代碼:

package cn.wmyskxz.controller;import cn.wmyskxz.entity.Student; import cn.wmyskxz.service.StudentService; import cn.wmyskxz.util.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List;/*** Student 控制器** @author: @我沒有三顆心臟* @create: 2018-04-23-下午 13:27*/ @Controller @RequestMapping("") public class StudentController {@Autowiredprivate StudentService studentService;@RequestMapping("/addStudent")public String addStudent(HttpServletRequest request, HttpServletResponse response) {Student student = new Student();int studentID = Integer.parseInt(request.getParameter("student_id"));String name = request.getParameter("name");int age = Integer.parseInt(request.getParameter("age"));String sex = request.getParameter("sex");Date birthday = null;// String 類型按照 yyyy-MM-dd 的格式轉換為 java.util.Date 類SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");try {birthday = simpleDateFormat.parse(request.getParameter("birthday"));} catch (ParseException e) {e.printStackTrace();}student.setStudent_id(studentID);student.setName(name);student.setAge(age);student.setSex(sex);student.setBirthday(birthday);studentService.addStudent(student);return "redirect:listStudent";}@RequestMapping("/listStudent")public String listStudent(HttpServletRequest request, HttpServletResponse response) {// 獲取分頁參數int start = 0;int count = 10;try {start = Integer.parseInt(request.getParameter("page.start"));count = Integer.parseInt(request.getParameter("page.count"));} catch (Exception e) {}Page page = new Page(start, count);List<Student> students = studentService.list(page.getStart(), page.getCount());int total = studentService.getTotal();page.setTotal(total);request.setAttribute("students", students);request.setAttribute("page", page);return "listStudent";}@RequestMapping("/deleteStudent")public String deleteStudent(int id) {studentService.deleteStudent(id);return "redirect:listStudent";}@RequestMapping("/editStudent")public ModelAndView editStudent(int id) {ModelAndView mav = new ModelAndView("editStudent");Student student = studentService.getStudent(id);mav.addObject("student", student);return mav;}@RequestMapping("/updateStudent")public String updateStudent(HttpServletRequest request, HttpServletResponse response) {Student student = new Student();int id = Integer.parseInt(request.getParameter("id"));int student_id = Integer.parseInt(request.getParameter("student_id"));String name = request.getParameter("name");int age = Integer.parseInt(request.getParameter("age"));String sex = request.getParameter("sex");SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");Date birthday = null;try {birthday = simpleDateFormat.parse(request.getParameter("birthday"));} catch (ParseException e) {e.printStackTrace();}student.setId(id);student.setStudent_id(student_id);student.setName(name);student.setAge(age);student.setSex(sex);student.setBirthday(birthday);studentService.updateStudent(student);return "redirect:listStudent";} }
  • 注意: 所有的學號都用 student_id 表示,為了契合在數據庫中的字段名(包括下面的 JSP 文件)

JSP 文件也直接黏之前的就好了,不過需要注意所有的 name 屬性

  • 【listStudent.jsp】:
<!DOCTYPE html> <%@ page contentType="text/html;charset=UTF-8" language="java"pageEncoding="UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html> <head><%-- 引入JQ和Bootstrap --%><script src="js/jquery/2.0.0/jquery.min.js"></script><link href="css/bootstrap/3.3.6/bootstrap.min.css" rel="stylesheet"><script src="js/bootstrap/3.3.6/bootstrap.min.js"></script><link href="css/style.css" rel="stylesheet"><title>學生管理頁面 - 首頁</title><script>$(function () {$("ul.pagination li.disabled a").click(function () {return false;});});</script> </head><body><div class="listDIV"><table class="table table-striped table-bordered table-hover table-condensed"><caption>學生列表 - 共${page.total}人</caption><thead><tr class="success"><th>學號</th><th>姓名</th><th>年齡</th><th>性別</th><th>出生日期</th><th>編輯</th><th>刪除</th></tr></thead><tbody><c:forEach items="${students}" var="s" varStatus="status"><tr><td>${s.student_id}</td><td>${s.name}</td><td>${s.age}</td><td>${s.sex}</td><td>${s.birthday}</td><td><a href="/editStudent?id=${s.id}"><span class="glyphicon glyphicon-edit"></span> </a></td><td><a href="/deleteStudent?id=${s.id}"><span class="glyphicon glyphicon-trash"></span> </a></td></tr></c:forEach></tbody></table> </div><nav class="pageDIV"><ul class="pagination"><li <c:if test="${!page.hasPreviouse}">class="disabled"</c:if>><a href="?page.start=0"><span>?</span></a></li><li <c:if test="${!page.hasPreviouse}">class="disabled"</c:if>><a href="?page.start=${page.start-page.count}"><span>?</span></a></li><c:forEach begin="0" end="${page.totalPage-1}" varStatus="status"><c:if test="${status.count*page.count-page.start<=30 && status.count*page.count-page.start>=-10}"><li <c:if test="${status.index*page.count==page.start}">class="disabled"</c:if>><ahref="?page.start=${status.index*page.count}"<c:if test="${status.index*page.count==page.start}">class="current"</c:if>>${status.count}</a></li></c:if></c:forEach><li <c:if test="${!page.hasNext}">class="disabled"</c:if>><a href="?page.start=${page.start+page.count}"><span>?</span></a></li><li <c:if test="${!page.hasNext}">class="disabled"</c:if>><a href="?page.start=${page.last}"><span>?</span></a></li></ul> </nav><div class="addDIV"><div class="panel panel-success"><div class="panel-heading"><h3 class="panel-title">增加學生</h3></div><div class="panel-body"><form method="post" action="/addStudent" role="form"><table class="addTable"><tr><td>學號:</td><td><input type="text" name="student_id" id="student_id" placeholder="請在這里輸入學號"></td></tr><tr><td>姓名:</td><td><input type="text" name="name" id="name" placeholder="請在這里輸入名字"></td></tr><tr><td>年齡:</td><td><input type="text" name="age" id="age" placeholder="請在這里輸入年齡"></td></tr><tr><td>性別:</td><td><input type="radio" class="radio radio-inline" name="sex" value="男"> 男<input type="radio" class="radio radio-inline" name="sex" value="女"> 女</td></tr><tr><td>出生日期:</td><td><input type="date" name="birthday" id="birthday" placeholder="請在這里輸入出生日期"></td></tr><tr class="submitTR"><td colspan="2" align="center"><button type="submit" class="btn btn-success">提 交</button></td></tr></table></form></div></div></div></body> </html>
  • 【editStudent.jsp】:
<!DOCTYPE html> <%@ page contentType="text/html;charset=UTF-8" language="java"pageEncoding="UTF-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><%-- 引入JQ和Bootstrap --%><script src="js/jquery/2.0.0/jquery.min.js"></script><link href="css/bootstrap/3.3.6/bootstrap.min.css" rel="stylesheet"><script src="js/bootstrap/3.3.6/bootstrap.min.js"></script><link href="css/style.css" rel="stylesheet"><title>學生管理頁面 - 編輯頁面</title> </head><body><div class="editDIV"><div class="panel panel-success"><div class="panel-heading"><h3 class="panel-title">編輯學生</h3></div><div class="panel-body"><form method="post" action="/updateStudent" role="form"><table class="editTable"><tr><td>學號:</td><td><input type="text" name="student_id" id="student_id" value="${student.student_id}"placeholder="請在這里輸入學號"></td></tr><tr><td>姓名:</td><td><input type="text" name="name" id="name" value="${student.name}" placeholder="請在這里輸入名字"></td></tr><tr><td>年齡:</td><td><input type="text" name="age" id="age" value="${student.age}" placeholder="請在這里輸入年齡"></td></tr><tr><td>性別:</td><td><input type="radio" class="radio radio-inline" name="sex" value="男"> 男<input type="radio" class="radio radio-inline" name="sex" value="女"> 女</td></tr><tr><td>出生日期:</td><td><input type="date" name="birthday" id="birthday" value="${student.birthday}"placeholder="請在這里輸入出生日期"></td></tr><tr class="submitTR"><td colspan="2" align="center"><input type="hidden" name="id" value="${student.id}"><button type="submit" class="btn btn-success">提 交</button></td></tr></table></form></div></div></div></body> </html>
  • style.css 文件:
body {padding-top: 60px; }div.listDIV {width: 600px;margin: 0 auto; }div.editDIV {width: 400px;margin: 0 auto; }nav.pageDIV {text-align: center; }div.addDIV {width: 300px;margin: 0 auto; }table.addTable {width: 100%;padding: 5px; }table.addTable td {padding: 5px; }table.editTable {width: 100%;padding: 5px; }table.editTable td {padding: 5px; }

項目的整體結構

分頁功能

  • 首先在 Packge【util】包下創建一個 Page 工具類:
package cn.wmyskxz.util;public class Page {int start; // 開始數據int count; // 每一頁的數量int total; // 總共的數據量public Page(int start, int count) {super();this.start = start;this.count = count;}public boolean isHasPreviouse(){if(start==0)return false;return true;}public boolean isHasNext(){if(start==getLast())return false;return true;}public int getTotalPage(){int totalPage;// 假設總數是50,是能夠被5整除的,那么就有10頁if (0 == total % count)totalPage = total /count;// 假設總數是51,不能夠被5整除的,那么就有11頁elsetotalPage = total / count + 1;if(0==totalPage)totalPage = 1;return totalPage;}public int getLast(){int last;// 假設總數是50,是能夠被5整除的,那么最后一頁的開始就是40if (0 == total % count)last = total - count;// 假設總數是51,不能夠被5整除的,那么最后一頁的開始就是50elselast = total - total % count;last = last<0?0:last;return last;}// 各種 setter 和 getter }
  • totalPage 是計算得來的數,用來表示頁碼一共的數量

在首頁顯示的 StudentList 用 page 的參數來獲取:

List<Student> students = studentService.list(page.getStart(), page.getCount());

并且在映射文件中用 LIMIT 關鍵字:

<!-- 查詢從start位置開始的count條數據--> <select id="list" resultMap="student">SELECT * FROM student ORDER BY student_id desc limit #{param1}, #{param2} </select>
  • 第一個參數為 start,第二個參數為 count
    這樣就能根據分頁的信息來獲取到響應的數據

  • 編寫分頁欄:

1.寫好頭和尾

<nav class="pageDIV"><ul class="pagination">.....</ul> </nav>

2.寫好? ?這兩個功能按鈕
使用 <c:if>標簽來增加邊界判斷,如果沒有前面的頁碼了則設置為disable狀態

<li <c:if test="${!page.hasPreviouse}">class="disabled"</c:if>><a href="?page.start=0"><span>?</span></a></li><li <c:if test="${!page.hasPreviouse}">class="disabled"</c:if>><a href="?page.start=${page.start-page.count}"><span>?</span></a></li>

再通過 JavaScrip 代碼來完成禁用功能:

<script>$(function () {$("ul.pagination li.disabled a").click(function () {return false;});}); </script>

3.完成中間頁碼的編寫
從 0 循環到 page.totalPage - 1 ,varStatus 相當于是循環變量

  • status.count 是從1開始遍歷
  • status.index 是從0開始遍歷
  • 要求:顯示當前頁碼的前兩個和后兩個就可,例如當前頁碼為3的時候,就顯示 1 2 3(當前頁) 4 5 的頁碼
  • 理解測試條件:
    -10 <= 當前頁*每一頁顯示的數目 - 當前頁開始的數據編號 <= 30

  • 只要理解了這個判斷條件,其他的就都好理解了
<c:forEach begin="0" end="${page.totalPage-1}" varStatus="status"><c:if test="${status.count*page.count-page.start<=30 && status.count*page.count-page.start>=-10}"><li <c:if test="${status.index*page.count==page.start}">class="disabled"</c:if>><ahref="?page.start=${status.index*page.count}"<c:if test="${status.index*page.count==page.start}">class="current"</c:if>>${status.count}</a></li></c:if> </c:forEach>

4.在控制器中獲取參數

// 獲取分頁參數 int start = 0; int count = 10;try {start = Integer.parseInt(request.getParameter("page.start"));count = Integer.parseInt(request.getParameter("page.count")); } catch (Exception e) { }....// 共享 page 數據 request.setAttribute("page", page);

Date 轉換的問題

最開始的時候,我們看到頁面上顯示的日期是這樣的格式:

這顯然是我們不希望看到的

  • 解決方案:在映射文件中設置日期顯示的類型。

重新部署文件,然后刷新頁面,就能看到我們希望的效果啦:

項目總結

  • 由于之前的項目代碼都有,所以在重構的時候,基本上沒有花什么時間就完成了項目的搭建,能夠體會到代碼分離的重要性,這在很大程度上保證了我們的代碼復用。
  • 相較于之前用 Servlet + JSP 來完成,很明顯的感覺是DAO層的編寫方便了很多,僅僅需要編寫一個 xml 映射文件和一個 Dao 層接口就可以完成功能,而不用自己再去重復的去在每一個 CRUD 方法中去處理結果集,重復而且繁瑣。
  • 注解真的很方便,這不僅僅提升了我們自身開發的效率,寫起來也很帶勁兒。
  • 開發效率快,而且低耦合,我們基于 xml 配置了大部分的工作,在基于 SSM 框架開發時,我們可以把專注點集中在邏輯處理上。
  • 在 SSM 框架中能方便的對項目進行修改,這不僅僅得益于框架的約定,使得代碼分離并且可復用,也得益于 Maven 工具對于項目的管理。
  • 我們能夠通過一個 Controller 來完成五個 Servlet 的功能,并且通過注解來完成配置。
  • 項目改進

    項目很簡單,僅僅也只是在數據庫增刪改查的基礎上增加了一個界面,我們來動手改一改。

    改進一:增加刪除提示

    第一個想到的就是刪除提示,沒有刪除提示是很要命的一件事情,如果手滑了一下那可能就悲劇了....

    首先我們在頂部的 <head> 標簽中的 <script> 中增加一段代碼:

    function del() {var msg = "您真的確定要刪除嗎?\n\n請確認!";if (confirm(msg) == true) {return true;} else {return false;} }

    然后在刪除 a 標簽頁中增加 onclick 屬性:

    onclick="javascript:return del();" ....就像下面這樣.... td><a href="/deleteStudent?id=${s.id}" onclick="javascript:return del();"><spanclass="glyphicon glyphicon-trash"></span> </a></td>

    當我們刷新頁面后,點擊刪除就會彈出提示信息:

    改進二:編輯頁面自動勾選上性別

    在當前的項目中,如果點擊編輯按鈕進入到編輯頁面后,性別這個選項是空選的狀態,這就很low:

    這個也很簡單,在 editStudent 頁面增加一些判斷就好了:

    用 <c:if> 標簽來判斷 sex 的值,然后根據對應的屬性增加 checked 屬性,這樣就可以自動勾選上所對應的屬性:

    改進三:空值判斷

    我們允許設置為 null 的值僅僅為出生日期,其他的值均不允許出現空值,所以我們需要加入空值判斷:

    function checkEmpty(id, name) {var value = $("#" + id).val();if (value.length == 0) {alert(name + "不能為空");$("#" + id).focus();return false;}return true; }

    然后再為 form 創建一個 id 屬性值為 “addForm” 并添加進判斷空值的方法:

    • 注意: 這里需要寫在 $(function(){}) 里面,等待文檔加載完畢才能生效。
    • 這里并沒有為 sex 屬性判斷空值,我們采用一個簡單的為 sex 添加一個默認勾選項來省略空值的判斷。

    同樣的,我們也在編輯頁面,采用同樣的方法進行空值判斷:

    • 當進入編輯頁面的時候已經有默認的勾選項了,所以 sex 值仍然不需要判空
    • 最后給出項目地址:https://github.com/wmyskxz/StudentManager-SSM

    我有一個微信公眾號,經常會分享一些Java技術相關的干貨;如果你喜歡我的分享,可以用微信搜索“Java團長”或者“javatuanzhang”關注。

    轉載于:https://my.oschina.net/u/3721254/blog/1806977

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的学生管理系统(SSM简易版)总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日本九九视频 | 人人澡人人澡人人 | 免费av一级电影 | 久久视频免费观看 | 在线亚州 | 久久久网址 | 久久手机在线视频 | 亚洲日本一区二区在线 | 99精品视频免费在线观看 | 久国产在线播放 | 日韩精品免费在线播放 | 亚洲成成品网站 | 欧美夫妻性生活电影 | 波多野结衣精品在线 | 成人av高清在线 | 99色婷婷| 91在线视频在线 | 久久久久在线视频 | 奇米影视999 | 免费福利片 | 久久手机免费视频 | 亚洲精品高清一区二区三区四区 | se婷婷| 99久久久久国产精品免费 | 在线观看国产v片 | 国产色视频网站2 | 欧美日韩国产二区三区 | 日韩欧美一区二区在线播放 | 日韩中文字幕第一页 | 欧美色插| 97超碰人人模人人人爽人人爱 | 日韩中文字幕免费看 | 婷婷五综合 | 在线免费观看国产视频 | 国产精品女视频 | 成年人黄色在线观看 | 日日摸日日碰 | 久久视频精品在线 | 韩国av一区二区三区 | 狠狠色狠狠色综合日日小说 | 欧美aaa大片| 尤物97国产精品久久精品国产 | 国产资源在线视频 | 欧美影院久久 | 亚洲国产成人精品在线 | 日韩中文在线观看 | 精品一区在线 | 久久久香蕉视频 | 午夜精品久久久久久久久久久 | 日韩久久视频 | 国产精品久久久久久久久蜜臀 | 久久经典国产视频 | 亚洲午夜av电影 | 米奇影视7777 | 成人免费电影 | 日韩美视频 | 五月婷婷综合久久 | 精品国产成人av | 成人黄色免费观看 | 国产精品美女免费视频 | 中文字幕观看在线 | 欧美成年黄网站色视频 | 久久一级片 | 99久久99久久精品国产片果冰 | 日本精品久久久一区二区三区 | 午夜精品成人一区二区三区 | 国产日本在线播放 | 久久亚洲精品国产亚洲老地址 | 99精品久久精品一区二区 | 中文字幕一区二区三区视频 | 久久精品免费看 | 一区二区三区在线看 | 国产精品一区二区三区四区在线观看 | 超碰人人做 | 欧美精品少妇xxxxx喷水 | 久久人人爽爽人人爽人人片av | 最近中文字幕免费av | 爱情影院aqdy鲁丝片二区 | 亚洲国产一区av | 国产91丝袜在线播放动漫 | 日韩欧美国产精品 | 久久国产精品区 | 亚洲色影爱久久精品 | 日韩在线观看一区二区三区 | 国产特级毛片 | 狠狠色伊人亚洲综合网站色 | 久久国产视频网站 | 精品高清美女精品国产区 | 精品a级片 | 青草视频在线看 | www视频在线播放 | 亚洲视频免费视频 | 精品视频久久久久久 | 中文字幕亚洲欧美日韩2019 | 九九99靖品 | 天堂麻豆| 日韩网站在线免费观看 | 国产精品午夜在线 | 国产一区在线免费观看视频 | 全黄网站 | 日韩v在线 | 黄色av成人在线观看 | 8x成人在线 | 成人在线超碰 | 91精品久久久久久久久久入口 | 午夜99| 91天堂素人约啪 | 久久久受www免费人成 | 超碰97人人在线 | 香蕉久草在线 | 在线观看日韩免费视频 | 国产午夜精品一区 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 久久久久久久影视 | 国产精品三级视频 | 色姑娘综合| 国产打女人屁股调教97 | 免费看一级特黄a大片 | 97成人精品视频在线播放 | 国产成人久久av免费高清密臂 | 国产精品尤物视频 | 日韩精品一区二区三区高清免费 | 国产成人综 | 激情五月五月婷婷 | 最近中文字幕第一页 | 欧美精品v国产精品v日韩精品 | 精品99在线 | 欧亚久久| 国产精品国产三级国产aⅴ入口 | 五月天久久精品 | av高清免费 | av.com在线 | 国产亚洲人成网站在线观看 | 中文字幕在线免费看 | 久久国产影视 | 日日噜噜噜噜夜夜爽亚洲精品 | 天堂v中文 | 国产亲近乱来精品 | 国产成人精品久久亚洲高清不卡 | 免费观看www小视频的软件 | 成人a毛片 | 婷婷久月 | 成人sm另类专区 | 国产精品午夜久久久久久99热 | 国产视频18 | 精品国偷自产在线 | 精品伦理一区二区三区 | 中文字幕电影网 | 欧美日韩国产免费视频 | 98久久| 91精品国| 色a4yy| 午夜美女福利直播 | 精品国产123 | 亚洲最新合集 | 人人爽人人av | 亚洲精品一区二区在线观看 | 精品福利av| 超碰在线天天 | 国产99精品 | 狠狠干夜夜| 91桃花视频 | 久久精品超碰 | 国产一区二区免费 | 精品国产免费人成在线观看 | 看片在线亚洲 | 日韩免费在线观看视频 | 91看片在线观看 | 99爱国产精品 | 婷婷五月在线视频 | 久久草在线免费 | 开心激情网五月天 | 五月激情丁香 | 99人成在线观看视频 | 国产九九热 | 日韩av专区| 久久毛片高清国产 | 久久免费看视频 | 超碰人人在 | 国产日产精品一区二区三区四区 | 激情视频区 | www.com黄色 | 久久久综合九色合综国产精品 | 狠狠干电影 | av综合网址 | 国产精品成久久久久三级 | 黄色片网站av | 久久久久久看片 | 日韩精品亚洲专区在线观看 | 久久国产网 | 国产色视频一区 | 国产免费又爽又刺激在线观看 | 日韩中文字幕国产 | 国产精品免费不卡 | 色婷婷亚洲精品 | 久久久久久久久久伊人 | 欧美日韩免费观看一区=区三区 | av网站在线观看播放 | 婷婷视频 | 亚洲一级理论片 | 久久艹艹| 亚洲色图av | 婷婷色在线观看 | 久久免费视频这里只有精品 | 中文字幕在线乱 | 999亚洲国产996395 | 91久久久国产精品 | 天天干天天操天天拍 | 黄色小说在线免费观看 | 5月丁香婷婷综合 | 日韩精品久久久久久中文字幕8 | 久久人人爽爽 | 午夜精品一区二区三区免费视频 | 一区av在线播放 | 欧美另类视频 | 国产一区二区视频在线播放 | 欧美亚洲精品在线观看 | 精品国产一区二区久久 | 免费在线国产精品 | 亚洲久草在线视频 | 久久国产亚洲精品 | 97国产大学生情侣白嫩酒店 | 韩国三级av在线 | 成人永久免费 | 狠色在线 | 在线免费av网站 | 国产成a人亚洲精v品在线观看 | 99热国产在线中文 | 最新国产精品久久精品 | 日本黄网站 | 天天操天天操天天爽 | 欧美色综合久久 | 国产乱对白刺激视频在线观看女王 | 九九九九热精品免费视频点播观看 | 久久久久亚洲精品男人的天堂 | 天天射天天射天天射 | 国产日韩精品一区二区 | 日本三级香港三级人妇99 | 欧美日韩高清国产 | 欧美久久久久久久久中文字幕 | 亚洲欧美视屏 | 国产精品乱码久久久久久1区2区 | 久草在线在线精品观看 | 精品一区二区亚洲 | 国产精品久久久久9999吃药 | 在线观看中文字幕视频 | 日韩黄色免费电影 | 国产午夜剧场 | 国产精品亚洲综合久久 | 欧美一级专区免费大片 | 亚洲激情 | 日日摸日日添日日躁av | 亚洲欧美成人在线 | 久久香蕉电影网 | 亚洲精品一区二区久 | 青青啪 | 69av免费视频 | 日韩欧美高清一区二区 | 九九九热精品免费视频观看网站 | 在线成人观看 | 成人黄色大片在线免费观看 | 久久久精品国产免费观看一区二区 | 日韩欧美网站 | 日日夜夜精品网站 | 国产精品成人国产乱 | 免费av影视 | 亚洲日本va中文字幕 | 伊色综合久久之综合久久 | av福利超碰网站 | 国产精品成人一区二区 | 西西444www大胆无视频 | 97涩涩视频 | 97成人免费 | 99久热在线精品视频 | av高清一区二区三区 | 五月婷婷av | 亚洲国产精品日韩 | 国产91小视频 | 国产91精品一区二区绿帽 | 国产美女精彩久久 | 亚洲天堂毛片 | 欧美精品乱码久久久久久按摩 | 97超碰资源总站 | 91大神精品视频在线观看 | 超碰在线天天 | 91在线精品视频 | 色国产在线 | 91黄色在线视频 | 国产精品毛片久久久久久久 | 日韩丝袜 | 天天操,夜夜操 | 国产尤物在线视频 | 婷婷五月在线视频 | 国产在线精品播放 | 99精品欧美一区二区蜜桃免费 | 久久久久高清 | 国产美女视频一区 | 九九综合九九综合 | 成人91在线观看 | 色婷婷九月 | 一级片免费观看视频 | 免费视频一级片 | 国产精品乱码久久 | 在线视频观看成人 | 国产一区二区在线免费观看 | 亚洲精品一区二区18漫画 | 精品美女在线视频 | a在线一区 | 国产精品久久 | 五月婷婷激情六月 | 亚洲一级片在线观看 | 久久国产精彩视频 | 999日韩| 精品久久国产精品 | 毛片网站免费在线观看 | 91视频三区 | 午夜影院一级片 | 美女视频黄免费 | 天天爽天天摸 | 久久久久久久久久国产精品 | 午夜黄色影院 | 99一级片| 欧美三级高清 | 日本女人在线观看 | 色在线高清| 精品日韩av | 国产一区二区在线视频观看 | 久久精品久久精品久久 | 91麻豆福利 | 国产精品久久久久一区二区三区 | 久久久久国产成人免费精品免费 | 久久免费a | 色综合久久综合中文综合网 | 爱爱av网 | 欧美午夜久久 | 亚洲国内精品 | 免费在线观看午夜视频 | 欧美在线一级片 | 在线导航av| 日本久久成人中文字幕电影 | 免费h视频| 日韩av片免费在线观看 | 一区二区三区四区在线 | 一区在线播放 | 欧美网址在线观看 | 成人免费精品 | 美女黄濒| 一区二区不卡高清 | 97国产在线观看 | 欧美精品午夜 | 在线观看视频福利 | 97人人模人人爽人人喊中文字 | 国产亚洲在线视频 | 欧美日韩性视频在线 | 国产99久久精品一区二区300 | 激情综合啪 | 日韩av高清在线观看 | 六月婷色 | 久黄色 | 欧美成人h版电影 | 久久成人黄色 | 国产精品美女久久久久久网站 | 99精品区 | 久精品视频在线 | 开心激情五月婷婷 | 狠狠干在线 | 国产专区精品视频 | 亚洲精品视频在线观看免费视频 | 久久久久久福利 | 国产精品永久免费视频 | 国产伦理剧 | 亚洲一级片在线观看 | 91久久久久久久一区二区 | 国产色资源 | 精品在线小视频 | 中文字幕在线看视频国产 | 色a4yy| 国产成人精品亚洲精品 | 天堂av网在线| 国产精品久久嫩一区二区免费 | 国产免费视频一区二区裸体 | 973理论片235影院9 | 久久九九免费视频 | 91福利视频久久久久 | 91精品亚洲影视在线观看 | 日本黄区免费视频观看 | 91在线最新 | 五月婷婷综合网 | 五月婷香蕉久色在线看 | 国产中文a| 精品久久久免费视频 | 亚洲japanese制服美女 | 98精品国产自产在线观看 | 一级黄色片在线免费看 | 久久久免费看片 | 91在线精品播放 | 97偷拍视频 | www.黄色片网站 | 激情综合五月网 | 99热超碰在线| 91成人观看 | 91精品国产麻豆国产自产影视 | 在线免费av网 | 狠狠狠色丁香综合久久天下网 | 国产高清视频色在线www | 黄色软件大全网站 | 欧美成人高清 | 中文字幕成人在线观看 | 黄色三级在线看 | 国产成人精品一区二区三区在线观看 | 国产精品美女久久久久久久 | 亚洲国产精彩中文乱码av | 亚洲成色777777在线观看影院 | 日本成人免费在线观看 | 五月天最新网址 | 国产免费高清视频 | 九九爱免费视频在线观看 | 亚洲激情小视频 | 久久免费观看少妇a级毛片 久久久久成人免费 | 国产 一区二区三区 在线 | 久久你懂得 | 日日夜夜精品网站 | 久草在线高清视频 | 欧美午夜a| 色综合久久88色综合天天6 | 国产精品k频道 | а中文在线天堂 | 高清av免费一区中文字幕 | 天天躁日日躁狠狠躁av麻豆 | 免费亚洲视频 | 在线天堂视频 | 五月婷久久 | 欧美91成人网 | 中文字幕av在线免费 | 在线看av的网址 | 色综合久久88色综合天天6 | 成人午夜电影在线观看 | 日韩视频区 | 四川妇女搡bbbb搡bbbb搡 | 亚洲精品动漫成人3d无尽在线 | 日韩成人不卡 | 日韩啪啪小视频 | 成人免费观看完整版电影 | 午夜视频在线网站 | 色偷偷88888欧美精品久久 | 国产一区国产精品 | 亚洲国产大片 | 九九在线视频免费观看 | 久久99精品久久久久久三级 | 免费福利在线视频 | 久久久久久高潮国产精品视 | 日韩成人免费在线观看 | 国产精品毛片一区视频播 | www欧美色| 国产视频手机在线 | 色婷婷一区 | 在线观看日本韩国电影 | 狠狠插狠狠干 | 久久刺激视频 | 日韩一级片网址 | 成人久久免费 | 久久一二三四 | 成人在线视频你懂的 | 曰韩精品 | 久草新在线 | 欧美日韩在线第一页 | 日本在线观看视频一区 | 亚洲v欧美v国产v在线观看 | 国产伦精品一区二区三区无广告 | 玖玖在线免费视频 | 中文字幕第一页在线 | 欧美日韩免费在线观看视频 | 狠狠婷婷 | 成人久久18免费网站 | 欧美 亚洲 另类 激情 另类 | 成人免费观看a | 激情婷婷在线 | 国产在线黄 | 在线观看黄色免费视频 | a成人v在线 | 欧美日韩一级久久久久久免费看 | 国产亚洲观看 | 日韩美在线观看 | 一区二区理论片 | 婷婷综合 | 久久精品视频网站 | 欧美孕妇与黑人孕交 | 一区二区三区免费在线 | 国产电影黄色av | 日本h视频在线观看 | 正在播放国产一区二区 | 日本久久电影 | 久久爽久久爽久久av东京爽 | 91手机电影 | 日韩理论电影在线 | 亚洲国产精品一区二区久久hs | 在线91网 | 97精品一区二区三区 | 亚洲电影影音先锋 | 亚洲视频 视频在线 | 欧美性黄网官网 | 欧美va天堂在线电影 | 免费观看一区二区 | 久久精品一二三 | 精品在线视频一区 | 婷婷在线播放 | 黄色av大片| 在线观看视频黄色 | 久久不射电影网 | 日韩美女黄色片 | 91成品人影院 | 波多野结衣在线观看视频 | 欧美日韩亚洲一 | av丁香花| 久久亚洲私人国产精品va | 欧美日韩1区 | 国产精品视频免费观看 | 婷婷网站天天婷婷网站 | 麻豆精品在线视频 | 国产手机在线观看视频 | 激情在线免费视频 | 九九在线免费视频 | 亚洲国产69| 色综合天天综合 | 日韩免费三区 | 精品一区二区久久久久久久网站 | 久久国产精品99久久久久久老狼 | 国产精品毛片一区视频播 | 少妇搡bbb| 五月婷婷久久综合 | 91爱在线 | 亚州精品一二三区 | 久草在线免费资源站 | 国产精品久久久精品 | 亚洲婷久久 | 精品一区二区精品 | 国产免费人成xvideos视频 | 日韩免费电影网 | 操久久免费视频 | 日韩在线在线 | 国产精品久久精品国产 | 天天操天天舔天天干 | 久草在线看片 | 国产一性一爱一乱一交 | 亚洲精品国精品久久99热一 | 日韩午夜在线播放 | 久久久久久久久免费视频 | 国产一及片 | 伊人五月在线 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 婷婷成人亚洲综合国产xv88 | 久久1区| 伊人手机在线 | 国产精品免费大片视频 | 国产97免费 | 91在线操 | 国产精品网站一区二区三区 | 久久韩国免费视频 | 日日夜夜网 | 美女视频a美女大全免费下载蜜臀 | 亚洲天天在线 | 国产精品久久久久久久婷婷 | 国产在线一卡 | 国产精品网红直播 | 伊人色综合网 | 午夜久久影视 | 国产精品麻豆99久久久久久 | 国产精品一区二区在线观看免费 | 91激情在线视频 | 国产精品一区二区三区视频免费 | 国产精品美女在线观看 | 中文字幕 欧美性 | 国产又粗又长又硬免费视频 | 日色在线视频 | 日韩在线欧美在线 | 最新色站 | 欧美老少交 | 国产精品99久久久久人中文网介绍 | 国产精品v欧美精品v日韩 | 91久久黄色 | 精品亚洲欧美无人区乱码 | 香蕉视频导航 | www.久久免费视频 | 五月婷婷丁香综合 | 开心激情网五月天 | 狂野欧美激情性xxxx | 国产91免费在线 | 美女激情影院 | 国产午夜av | 韩国精品福利一区二区三区 | 狠狠色丁香婷婷 | 91最新网址在线观看 | 国产黄免费看 | 欧美日韩国产在线精品 | 18网站在线观看 | 国产精品久久久视频 | 国产99久久精品一区二区永久免费 | bayu135国产精品视频 | 91九色在线播放 | 日韩电影在线观看一区二区 | 国产 日韩 在线 亚洲 字幕 中文 | wwwwwww色| 黄色不卡av | 草久在线视频 | 免费三级av | 黄网站免费看 | 91亚洲综合| 免费福利视频网站 | 99精品国产福利在线观看免费 | 91在线永久 | 18久久久久| 亚洲少妇天堂 | 国产精品精品久久久久久 | 久综合网 | 国产精品嫩草影视久久久 | 五月天激情婷婷 | 国产午夜精品视频 | 最近最新mv字幕免费观看 | 国产精品嫩草影院99网站 | 国产精品九九视频 | 久久99久久99精品免观看粉嫩 | 欧美日韩国产二区三区 | 国产免费视频在线 | 日韩国产在线观看 | 欧美日韩视频免费 | 美女又爽又黄 | 麻豆久久精品 | 国产热re99久久6国产精品 | 伊人导航 | 日日操天天操狠狠操 | 婷婷激情综合网 | 色视频在线免费观看 | 久久精品2 | 欧美日本不卡高清 | av在线播放观看 | 国产看片网站 | 婷婷六月天在线 | 国产成人99久久亚洲综合精品 | 亚洲jizzjizz日本少妇 | 色中色亚洲 | 99久久精品国产亚洲 | 成人av电影在线观看 | 久草视频中文 | 午夜av在线电影 | 亚洲高清91 | 日韩精品一区二区不卡 | 高清av网 | 99久久精 | 午夜av电影院 | 又黄又网站 | 91大片网站 | 久日精品 | 天天天天爱天天躁 | 蜜桃视频成人在线观看 | 日韩大片在线观看 | 日韩成人邪恶影片 | 国产精品免费成人 | 91亚洲精品久久久 | 在线观看免费观看在线91 | 日韩精品中文字幕av | 99精品偷拍视频一区二区三区 | 久久99九九99精品 | 亚洲精品白浆高清久久久久久 | 亚洲免费在线看 | 国产一区在线视频观看 | 日本字幕网 | 黄色视屏av | 婷婷综合导航 | 91精品免费看 | 2021国产在线视频 | 精品视频久久久久久 | 久久精品免费看 | 中文十次啦 | 久久精品久久久久 | 在线精品观看国产 | 天天操天天干天天操天天干 | 在线视频欧美日韩 | 欧美精品做受xxx性少妇 | 国产一区二区久久久久 | 五月婷影院| 婷婷六月丁香激情 | 天天操天天操天天 | 夜夜爽www | 国产天天综合 | 粉嫩一区二区三区粉嫩91 | 国产精品久久久久久久久久了 | 精品国产一区二区三区四 | 国产在线看一区 | 高清视频一区二区三区 | 亚洲国产精选 | 在线观看蜜桃视频 | 欧美老少交 | 欧美一区二区三区在线观看 | 中文字幕在线观看网址 | 欧美三级高清 | 美女国产免费 | 精品麻豆入口免费 | 九九热免费观看 | 国产女做a爱免费视频 | 亚洲综合导航 | 五月婷婷综合在线视频 | 国产无套精品久久久久久 | 91mv.cool在线观看 | 欧美日韩视频在线 | 欧美日韩大片在线观看 | 久久精品久久精品 | 国产又黄又爽又猛视频日本 | 天天射天天操天天 | 亚洲一区免费在线 | 天天干,天天操 | 中文字幕激情 | 999久久国产精品免费观看网站 | 国产一级二级三级在线观看 | 日本久久不卡视频 | 男女全黄一级一级高潮免费看 | 成人免费大片黄在线播放 | 天堂在线视频免费观看 | 4438全国亚洲精品在线观看视频 | 久久久久成人免费 | 国内精品视频在线播放 | 国产一区二区电影在线观看 | 日韩电影在线视频 | 在线亚洲成人 | 成人在线免费看视频 | 国产综合香蕉五月婷在线 | 国产精品国产三级国产不产一地 | 日韩在线看片 | 国产精品久久久久久久久久新婚 | 国产一区成人 | 色婷婷激情四射 | www亚洲视频| 亚洲综合在线观看视频 | 99久久精品免费看国产 | 色视频网址 | 91成人免费看 | 在线观看涩涩 | 色偷偷88888欧美精品久久 | 黄色片网站av | 在线观看av网 | 国产精品久久久久久久久久直播 | 97在线播放视频 | 9999精品免费视频 | 亚洲永久精品视频 | 啪啪肉肉污av国网站 | 五月天网页 | 天天拍夜夜拍 | 麻豆系列在线观看 | 色综合久久99 | 97视频网站 | 国产福利一区二区三区在线观看 | 一区二区三区精品在线视频 | 成人国产一区二区 | 色爽网站| 一区精品在线 | 日韩视频欧美视频 | 91av免费在线观看 | 久久草精品 | 国产精品九九九 | 天天射天天干 | 黄色片网站免费 | 国产日产欧美在线观看 | 麻豆播放 | 天堂麻豆| 在线免费亚洲 | 天天躁天天狠天天透 | 日韩伦理片一区二区三区 | 国产精品麻 | 国产精品国产精品 | 黄色软件在线观看免费 | 久久久久久久久亚洲精品 | 国产不卡高清 | 2022国产精品视频 | 97超碰人人看 | 搡bbbb搡bbb视频 | 精品国产电影 | 伊人黄| 500部大龄熟乱视频使用方法 | 亚州精品天堂中文字幕 | 亚洲精品乱码久久久久久按摩 | av电影免费看 | 日韩精品免费专区 | 亚洲电影成人 | 亚洲视频axxx | 亚州精品成人 | 在线观看视频在线 | 在线观看视频你懂 | 韩日色视频 | 天堂网中文在线 | 国产成人一区二区精品非洲 | 亚洲视频久久久久 | 激情综合婷婷 | 亚洲开心激情 | 国内精品毛片 | 97成人在线观看视频 | 毛片视频电影 | 久久免费视频这里只有精品 | 国产中文字幕在线 | 久久天堂亚洲 | 国产麻豆传媒 | 日韩r级电影在线观看 | 五月婷婷综合久久 | 久99视频| 午夜久久网站 | 亚洲年轻女教师毛茸茸 | 久久夜夜夜 | 久久一区二区三区超碰国产精品 | 在线黄色国产 | 成年人在线观看网站 | 日本黄色免费在线观看 | 国产成人333kkk | 亚洲视频精选 | 日韩高清久久 | 亚洲精品久久久久999中文字幕 | 免费在线黄色av | 亚洲自拍av在线 | 亚洲国产午夜精品 | 久久久久久久毛片 | 人人干人人搞 | 亚洲aⅴ免费在线观看 | 最近免费中文字幕 | 亚洲精品国产精品国自产 | 国产夫妻性生活自拍 | 超碰在97 | 国产在线不卡视频 | 99免费在线观看视频 | 超碰公开在线观看 | 最新日韩视频在线观看 | 亚洲成av人片在线观看无 | 国产精品一区久久久久 | 中文字幕在线观看第一区 | 一本一本久久a久久精品综合小说 | 日韩欧美国产免费播放 | 在线探花| 国产自制av| 中文字幕在线观看国产 | www视频在线播放 | av成人在线网站 | 成人久久久久久久久久 | 91精品视屏| japanesexxxhd奶水 91在线精品一区二区 | 欧美日韩国产成人 | 欧美另类调教 | 国产精品伦一区二区三区视频 | 热久久免费视频精品 | 亚洲免费在线观看视频 | 国产精品成久久久久三级 | 亚洲mv大片欧洲mv大片免费 | 日韩欧美在线视频一区二区 | 色五婷婷| 欧美视频日韩 | 国产视频亚洲 | 日韩a在线 | 久久99欧美 | 超碰在线个人 | 国产精品久免费的黄网站 | 性色av一区二区三区在线观看 | 久久久国产精品网站 | 欧美色888 | 天天操天天操天天操 | 日韩高清片 | 久久系列| 永久免费精品视频网站 | 国产成本人视频在线观看 | 久久在线免费观看视频 | 久草手机视频 | 一区二区三区四区久久 | 久久视频在线观看 | 色综合人人| 久久成人精品 | 欧美黄污视频 | 久草在线资源观看 | 午夜性盈盈 | 97香蕉超级碰碰久久免费软件 | 免费看一及片 | 五月天丁香亚洲 | 日韩69av | 欧美日韩二区在线 | 成人国产精品 | 欧美日韩免费视频 | 免费成人在线网站 | 精品久久久久国产 | 日韩素人在线观看 | 天天干,天天操 | 欧美a免费 | 久久三级毛片 | 69久久久 | 黄色中文字幕在线 | 欧美激情xxxx性bbbb | 69久久夜色精品国产69 | 西西444www高清大胆 | 精品美女久久久久 | 人人干人人搞 | 91传媒在线看 | 色婷婷色 | 国产最新91 | 欧美在线视频第一页 | av中文字幕免费在线观看 | 免费看一级一片 | 日韩在线观看视频免费 | 久久躁日日躁aaaaxxxx | 国产一区二区三区免费观看视频 | 中文字幕在线专区 | 久久久人| 国产91九色视频 | 四虎国产精品免费观看视频优播 | 探花系列在线 | 亚洲精品在线电影 | 亚洲精品99久久久久久 | 久久综合影音 | 亚洲午夜不卡 | 久久综合久久鬼 | 国产99视频在线观看 | 久久99国产一区二区三区 | 日韩精品一区二区三区视频播放 | 99久久久国产精品美女 | 天天综合成人 | 久久久精品网站 | 国产精品一区二区电影 | 伊人春色电影网 | 色综合色综合色综合 | 国产区高清在线 | 久久五月婷婷丁香 | 天堂网av 在线 | 免费看的av片 | 在线综合 亚洲 欧美在线视频 | 日本在线h | 东方av在| 久久精品一区二区国产 | 国产美女免费观看 | 91漂亮少妇露脸在线播放 | 国产午夜在线观看视频 | 日本精品一区二区三区在线播放视频 | 久久伦理电影 | 久久伊人色综合 | 久草视频免费观 | 夜夜爽天天爽 | 深夜福利视频在线观看 | 一区二区三区中文字幕在线观看 | 中文欧美字幕免费 | 国产高清一区二区 | 亚洲国产成人在线播放 | 久草在线免费在线观看 | 一区av在线播放 | 国产又粗又猛又黄 | 亚洲一区精品人人爽人人躁 | 伊人电影天堂 | 亚洲在线视频网站 | 五月天中文字幕 | 国产亚洲精品久久久久秋 | 在线观看视频黄 | 黄色大全视频 | 天天摸天天操天天舔 | 国产一级免费av | 国产精品入口麻豆 | 久久亚洲国产精品 | 日日夜夜中文字幕 | 九九视频在线观看视频6 | 日韩精品久久久 | 亚洲欧洲精品一区二区精品久久久 | 精品久久免费看 | 热热热热热色 | 国产亚洲观看 | www视频免费在线观看 | 精品国产一区二区三区四区在线观看 | 国产精品一区二区久久久 | 一区二区三区免费在线观看视频 | 久久视讯 | 国产成人精品一区二区三区 | 婷婷国产一区二区三区 | 久久久久久久久影视 | 91精品免费 | 久久99热久久99精品 | 国产三级香港三韩国三级 | 日韩在线视频网站 | 91观看视频| 国产精品美女久久久久久久久久久 | 天天操天天操天天爽 | 国产一区二区网址 | 日韩a在线看 | 狠狠干夜夜操天天爽 | 丰满少妇在线观看资源站 | 久久久久亚洲精品 | 久久免费国产精品 | 中文字幕在线观看不卡 | 亚洲成人国产精品 | 久久久久久久久久久久影院 | 久久久久亚洲精品 | 97网在线观看 | 亚洲日本va中文字幕 | 久久影院中文字幕 | 亚洲在线网址 | 91在线视频精品 | 欧美精品一区二区蜜臀亚洲 | 91精品在线免费视频 | 免费日韩av电影 | 免费涩涩网站 | 亚洲九九九在线观看 | 国产精品女人久久久久久 |