基础知识预备:

 目标:

构建一个书籍管理系统,实现以下功能。

功能:

1 图书信息查询,(查)

2 书籍管理:添加书籍

3 书籍管理:修改书籍信息

4 书籍管理:删除书籍

一、预备工作

Book{
Id,
Name,
Price,
Author,
Pubdate,
}

建表:

CREATE TABLE `book`  (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`price` double NULL DEFAULT NULL,
`author` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`pubDate` date NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;

二、书籍查询功能

在java项目中新建实体类(Book类):放于cn.piggy.entity中

package cn.piggy.entity;

import java.util.Date;

public class Book {
private int id;
private String name;
private double price;
private String author;
private Date pubDate; //需要三种构造方法:1无参的;2不带id的,用于添加书籍时;3 带有id的,用于查询时
//1无参构造方法
public Book(){ }
//2 不带id
public Book(String name, double price, String author, Date pubDate) {
super();
this.name = name;
this.price = price;
this.author = author;
this.pubDate = pubDate;
}
//3 带有id
public Book(int id, String name, double price, String author, Date pubDate) {
super();
this.id = id;
this.name = name;
this.price = price;
this.author = author;
this.pubDate = pubDate;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Date getPubDate() {
return pubDate;
}
public void setPubDate(Date pubDate) {
this.pubDate = pubDate;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", price=" + price + ", author=" + author + ", pubDate=" + pubDate
+ "]";
} }

分析功能:先做显示所有书籍的功能。

先做书籍查询功能----

由于对于书籍的操作有很多:如查询,修改,增加等与数据库交互的操作。将它们放于一个类中,放于BookDao中。

建一个Dao包,该包下放所有与数据库相关的操作。

由于需要与数据库进行连接、返回结果等操作,所以写了一个util的工具包,放于cn.piggy.util包中,其中有一个类叫做BaseDao.

BaseDao:加载jdbc驱动;实现数据库连接和关闭连接;查询,增删改SQL语句的实现。

package cn.piggy.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class BaseDao {
private Connection conn;
private PreparedStatement ps;
private ResultSet rs;
//获得连接
private void getConnection(){
try {
Class.forName("com.mysql.cj.jdbc.Driver");//加载MySQL的驱动,jar包放于webroot的lib目录下
System.out.println("数据库加载成功!"); String url="jdbc:mysql://localhost:3306/booksys?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";//booksys数据库的地址,本地,3306端口
conn = DriverManager.getConnection(url,"root","******");
System.out.println("连接成功,获取连接对象: " + conn);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} //关闭连接
public void close(){
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(ps!=null)
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} //更新--修改,增加,删除
//sql=insert into book(name,price,author,pubDate) values(?,?,?,?),更新时只需要传入这条sql语句即可
public int executeUpdate(String sql,Object...objects){//这里objects是不定参数,需要查资料看一下是什么
try {
this.getConnection();
ps = conn.prepareStatement(sql);
if(objects!=null)//设置四个参数
for(int i=0;i<objects.length;i++){
ps.setObject(i+1, objects[i]);//从1开始
}
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
this.close();
}
return -1;
} //查询(查询与前面三者不同)
public ResultSet executeQuery(String sql,Object...objects){
try {
this.getConnection();
ps = conn.prepareStatement(sql);
if((ps!=null)&(objects!=null))//设置四个参数
for(int i=0;i<objects.length;i++){
ps.setObject(i+1, objects[i]);//从1开始
}
return rs = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} }

BookDao:继承自BaseDao,当具体的实体类(Book)需要与数据库进行交互的时候,在BookDao中实现相应的查询,增加,修改,删除功能。

编写ListServlet类

部署Servlet

、500错误
显示语句中BaseDao的第71行if(objects!=null)有NullException的错误。一开始以为是没有判断空指针。后来分析,出现空指针的原因是
mysql没有连接上
数据库是空的 一开始以为是加载jdbc驱动失败的问题,
旧版本的驱动加载是这样写的:
com.mysql.jdbc.Driver 新版本是这样的:
com.mysql.cj.jdbc.Driver 修改完以后,添加一条打印语句:
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("数据库加载成功!");
发现打印了该语句,说明并不是加载驱动失败的问题。 然后检查发现是URL写错了,booksys写成了sysbook。 The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone.
出现这个的原因是因为 mysql返回的时间总是有问题,比实际时间要早8小时。 在jdbc连接的url后面加上serverTimezone=GMT即可解决问题,如果需要使用gmt+8时区,需要写成GMT%2B8
public static final String URL="jdbc:mysql://localhost:3306/jdbc01?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false";//链接的mysql

部署的时候出现的几个问题

三、书籍添加功能

思路:新建add.html,完成图书添加的操作(客户端请求,表单以post方式提交);编写AddServlet类,处理表单提交的数据,对get和post两种提交方式,有对应的doGet和doPost两种处理方式;获得表单数据以后,编写BookDao,将数据存到数据库中。

新建add.html,完成图书添加的操作。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>add.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
<form action="add" method="post">
<table width="80%" align="center">
<tr>
<td colspan="2"><h3>添加书籍</h3>></td>
</tr>
<tr>
<td>书名</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>价格</td>
<td><input type="text" name="price"/></td>
</tr>
<tr>
<td>作者</td>
<td><input type="text" name="author"/></td>
</tr>
<tr>
<td>出版日期</td>
<td><input type="text" name="pubDate"/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="提交"/></td>
</tr>
</table>
</form>
</body>
</html>

这里存在一个乱码的问题待解决(已解决:Chrome没有utf-8,插件也不太方便安装,转用360浏览器后,编码选择utf-8就可以正常显示了;更新:在add.html的head后增加

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>add.html</title>

即可解决问题)。 

下面编写AddServlet类,处理add.html提交的数据:HttpServletRequest有一个方法getParameter("fieldName"),可以获取表单提交的数据(fieldName是表单的项)。

package cn.piggy.servlet;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cn.piggy.dao.BookDao;
import cn.piggy.entity.Book; public class AddServlet extends HttpServlet{
private BookDao bookDao = new BookDao();//BookDao.java是一个类,需要new一个对象进行保存
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8"); //对乱码进行处理
resp.setCharacterEncoding("utf-8");
String bookName = req.getParameter("name"); //HttpServletRequest获取表单中fieldName的方法
//System.out.println("书名:"+bookName);
double price = Double.parseDouble(req.getParameter("price"));//getParameter返回的是String类型,需要转换一下
String author = req.getParameter("author");
Date pubDate = null;
try {
pubDate = new SimpleDateFormat("yyyy-MM-dd").parse(req.getParameter("pubDate")); //日期的格式转换
} catch (ParseException e) {
e.printStackTrace();
}
Book book = new Book(bookName, price, author, pubDate);
if(bookDao.add(book)>0){
// resp.setContentType("text/html;charset=utf-8");
// resp.getWriter().print("添加成功!! <a href='list'>查询列表</>");//出现查询列表按钮,点击可以跳转到“list”;还可以使用重定向方法
//重定向
resp.sendRedirect("list");//response对象的该函数可以重新定向到添加书籍后的状态
}else{
resp.getWriter().print("添加失败");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp); //当以post提交时,也采用get提交,以简化操作
}
}

在web.xml中增加代码,对AddServlet进行部署。

  <servlet>
<servlet-name>addServlet</servlet-name>
<servlet-class>cn.piggy.servlet.AddServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addServlet</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>

在BookDao.java中添加一个查询书籍的函数,通过添加SQL语句进行添加。

package cn.piggy.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List; import cn.piggy.entity.Book;
import cn.piggy.util.BaseDao; public class BookDao extends BaseDao{
//查询出所有书籍,放到一个List中
public List<Book> getAll(){
List<Book> list = new ArrayList<Book>();
String sql="select * from book";
//查询的操作
try {
ResultSet rs=this.executeQuery(sql);
while(rs.next()){
list.add(new Book(rs.getInt(1),rs.getString(2),rs.getDouble(3),
rs.getString(4),rs.getDate(5)));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.close();
}
return list;
} public Book getById(int id){
String sql="select * from book where id=?";
//查询的操作
try {
ResultSet rs=this.executeQuery(sql,id);
if(rs.next()){
return new Book(rs.getInt(1),rs.getString(2),rs.getDouble(3),
rs.getString(4),rs.getDate(5));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.close();
}
return null;
} //添加书籍
public int add(Book b){
String sql = "insert into book(name,price,author,pubDate) values(?,?,?,?)";
return this.executeUpdate(sql, b.getName(),b.getPrice(),b.getAuthor(),
new SimpleDateFormat("yyyy-MM-dd").format(b.getPubDate()));//b.getPubDate()直接传入不行
} //修改书籍
public int update(Book b){
String sql="update book set name=?,price=?,author=?,pubDate=? where id=?";
return this.executeUpdate(sql,b.getName(),b.getPrice(),b.getAuthor(),
new SimpleDateFormat("yyyy-MM-dd").format(b.getPubDate()),b.getId());
} //删除书籍
public int delete(int id){
String sql = "delete from book where id=?";
return this.executeUpdate(sql, id);
} }

四、书籍修改功能

package cn.piggy.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cn.piggy.dao.BookDao;
import cn.piggy.entity.Book; public class SelectByIdServlet extends HttpServlet {
private BookDao bookDao = new BookDao();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 获取id
int id = 0;
if(req.getParameter("id")!=null)
id = Integer.parseInt(req.getParameter("id"));
//根据id查询对应记录
Book book = bookDao.getById(id);
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.print("<html>");
out.print("<head>");
out.print("<title>书籍列表</title>");
out.print("</head>");
out.print("<body>");
out.print("<form action='update' method='post'>");
out.print("<table width='80%' align='center'>");
out.print("<tr><td colspan='2' align='center'>修改书籍</td></tr>");
out.print("<tr>");
out.print("<td>");
out.print("书名:<input type='hidden' name='id' value='"+book.getId()+"'/>");
out.print("</td>");
out.print("<td>");
out.print("<input type='text' name='name' value='"+book.getName()+"'/>");
out.print("</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>");
out.print("价格");
out.print("</td>");
out.print("<td>");
out.print("<input type='text' name='price' value='"+book.getPrice()+"'/>");
out.print("</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>");
out.print("作者");
out.print("</td>");
out.print("<td>");
out.print("<input type='text' name='author' value='"+book.getAuthor()+"'/>");
out.print("</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>");
out.print("出版日期");
out.print("</td>");
out.print("<td>");
out.print("<input type='text' name='pubDate' value='"+book.getPubDate().toLocaleString()+"'/>");
out.print("</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td colspan='2' align='center'>");
out.print("<input type='submit' value='修改'/>");
out.print("</td>");
out.print("</tr>");
out.print("</table>");
out.print("</form>");
out.print("</body>");
out.print("</html>");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp);
} }
package cn.piggy.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cn.piggy.dao.BookDao;
import cn.piggy.entity.Book; public class UpdateServlet extends HttpServlet {
private BookDao bookDao = new BookDao();//BookDao.java是一个类,需要new一个对象进行保存
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8"); //对乱码进行处理
resp.setCharacterEncoding("utf-8");
int id = 0;
if(req.getParameter("id")!=null)
id = Integer.parseInt(req.getParameter("id"));
String bookName = req.getParameter("name"); //HttpServletRequest获取表单中fieldName的方法
//System.out.println("书名:"+bookName);
double price = Double.parseDouble(req.getParameter("price"));//getParameter返回的是String类型,需要转换一下
String author = req.getParameter("author");
Date pubDate = null;
try {
pubDate = new SimpleDateFormat("yyyy-MM-dd").parse(req.getParameter("pubDate")); //日期的格式转换
} catch (ParseException e) {
e.printStackTrace();
}
Book book = new Book(id,bookName,price,author,pubDate);
System.out.println(book);
if(bookDao.update(book)>0){
// resp.setContentType("text/html;charset=utf-8");
// resp.getWriter().print("添加成功!! <a href='list'>查询列表</>");//出现查询列表按钮,点击可以跳转到“list”;还可以使用重定向方法
//重定向
resp.sendRedirect("list");//response对象的该函数可以重新定向到添加书籍后的状态
}else{
resp.getWriter().print("修改失败");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp); //当以post提交时,也采用get提交,以简化操作
}
}
package cn.piggy.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import cn.piggy.dao.BookDao;
import cn.piggy.entity.Book; public class SelectByIdServlet extends HttpServlet {
private BookDao bookDao = new BookDao();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 获取id
int id = 0;
if(req.getParameter("id")!=null)
id = Integer.parseInt(req.getParameter("id"));
//根据id查询对应记录
Book book = bookDao.getById(id);
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.print("<html>");
out.print("<head>");
out.print("<title>书籍列表</title>");
out.print("</head>");
out.print("<body>");
out.print("<form action='update' method='post'>");
out.print("<table width='80%' align='center'>");
out.print("<tr><td colspan='2' align='center'>修改书籍</td></tr>");
out.print("<tr>");
out.print("<td>");
out.print("书名:<input type='hidden' name='id' value='"+book.getId()+"'/>");
out.print("</td>");
out.print("<td>");
out.print("<input type='text' name='name' value='"+book.getName()+"'/>");
out.print("</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>");
out.print("价格");
out.print("</td>");
out.print("<td>");
out.print("<input type='text' name='price' value='"+book.getPrice()+"'/>");
out.print("</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>");
out.print("作者");
out.print("</td>");
out.print("<td>");
out.print("<input type='text' name='author' value='"+book.getAuthor()+"'/>");
out.print("</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td>");
out.print("出版日期");
out.print("</td>");
out.print("<td>");
out.print("<input type='text' name='pubDate' value='"+book.getPubDate().toLocaleString()+"'/>");
out.print("</td>");
out.print("</tr>");
out.print("<tr>");
out.print("<td colspan='2' align='center'>");
out.print("<input type='submit' value='修改'/>");
out.print("</td>");
out.print("</tr>");
out.print("</table>");
out.print("</form>");
out.print("</body>");
out.print("</html>");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp);
} }

难点:

out.print("<td>");
out.print("书名:<input type='hidden' name='id' value='"+book.getId()+"'/>");
out.print("</td>");

在SelectByIdServlet中,建立了一个表单,其中不需要显示Id。该表单向服务器提交请求。

服务器收到请求以后,在UpdateServlet中响应。UpdateServlet需要获取Id的值,所以有了上述代码。‘hidden’参数:请求中既提交了id的信息,又不会在表单中显示id。

五、最终效果:

六、附录:

知识点(包括笔记):

1 DAO:data access object数据访问对象

HttpServletResponse对象

3 HttpServletRequest对象

注:http协议的小知识:

客户端:浏览器;服务端:Tomcat服务器

如果表单是get提交,所提交的参数是跟在URL后的,以?name=value&price=23这样的方式追加在URL后。特点:长度有限;不安全;效率相对较高。

如果表单是post提交,那么数据将被封装在formdata里面。特点:长度没有限制;安全性高;效率相对低。

HttpServletRequest有一个方法getParameter("fieldName"),可以获取表单提交的数据(fieldName是表单的项)。

4 重定向与转发

由response.sendRedirect("list") 实现,当使用重定向时,服务器会将重新定向的地址(“list”)交给浏览器,浏览器会根据新的URL,重新发起请求。

5 JDBC 

Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

简单地说,就是用于执行SQL语句的一类Java API

Base.Dao中:

public ResultSet executeQuery(String sql,Object...objects){
} //在java中实现query(查询)SQL语句 java.sql.ResultSet类型包含从数据库中查询的结果集
public int executeUpdate(String sql,Object...objects){
} //在java中实现Update(增删改)SQL语句

6 书籍管理系统中的难点分析

jsp-servlet(2)响应HTML文档-书籍管理系统的更多相关文章

  1. MinDoc v0.6 发布,轻量级文档在线管理系统

    更新日志 新增 标签功能,可以根据标签组织项目 新增 用户删除功能,删除后的用户项目以及其他数据会自动转移到超级管理员账户上 新增 项目描述支持Markdown语法 优化 项目标签添加效果 优化 登录 ...

  2. Maven+JSP+Servlet+JDBC+Mysql实现的dbExper宾馆管理系统

    本文存在视频版本,请知悉 项目简介 项目来源于:https://github.com/mafulong/databaseExper-hotelMaster 这次分享的也是毕设或课程设计选择一样很多的宾 ...

  3. JSP+Servlet+JDBC+Mysql实现的天才会议管理系统

    本文存在视频版本,请知悉 项目简介 项目来源于:https://github.com/hegexunmeng/meeting-system 这次分享一个会议管理系统,前端后端几乎没有使用任何框架,适合 ...

  4. JSP+Servlet+JDBC+mysql实现的学生成绩管理系统

    项目简介 项目来源于:https://gitee.com/zzdoreen/SSMS 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术 ...

  5. SmartWiki文档在线管理系统简介

    简介 SmartWiki是一款针对IT团队开发的简单好用的文档管理系统.可以用来储存日常接口文档,数据库字典,手册说明等文档.内置项目管理,用户管理,权限管理等功能,能够满足大部分中小团队的文档管理需 ...

  6. 推荐一款接口文档在线管理系统-MinDoc

    项目简介 MinDoc 是一款针对IT团队开发的简单好用的文档管理系统. MinDoc 的前身是 SmartWiki 文档系统.SmartWiki 是基于 PHP 框架 laravel 开发的一款文档 ...

  7. 《MinDoc 接口文档在线管理系统》

    项目简介 MinDoc 是一款针对IT团队开发的简单好用的文档管理系统. MinDoc 的前身是 SmartWiki 文档系统.SmartWiki 是基于 PHP 框架 laravel 开发的一款文档 ...

  8. Sharepoint 文档知识管理系统--Word在试图打开文件时遇到错误

    在系统开发中,遇到问题:SharePoint 2010与Office 2010安装在一台服务器上,当用Office打开SharePoint文档库中的文档时,遇到“Word在试图打开文件时遇到错误,请尝 ...

  9. [项目分享]JSP+Servlet+JDBC实现的云端汽修后台管理系统

    本文存在视频版本,请知悉 项目简介 项目来源于:https://gitee.com/chenlinSir/CloudDemo-servlet 难度等级:简单 基于JSP+Servlet+Jdbc的云端 ...

随机推荐

  1. 字符序列(characts)

    字符序列(characts) 问题描述: 从三个元素的集合[A,B,C]中选取元素生成一个N 个字符组成的序列,使得没有两个相邻的 子序列(子序列长度=2)相同,例:N=5 时ABCBA 是合格的,而 ...

  2. java高级---->Serializable的过程分析

    本次讲解中我们在上次的基础上,深入的了解一下序列化的流程以及其中的原理.关于序列化的一些知识与使用,请参见我的另一篇博客:java基础---->Serializable的使用.好了,我们进行以下 ...

  3. 浏览器行为模拟之requests、selenium模块

    requests模块 前言: 通常我们利用Python写一些WEB程序.webAPI部署在服务端,让客户端request,我们作为服务器端response数据: 但也可以反主为客利用Python的re ...

  4. TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版

    TLS与SSL之间关系 原文地址:SSL vs. TLS - What's the Difference? from:https://juejin.im/post/5b213a0ae51d4506d4 ...

  5. MongoDB,无模式文档型数据库简介

    MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂 ...

  6. Python3+ssl实现加密通信

    一.说明 1. python标准库ssl可实现加密通信 2. ssl库底层使用openssl,做了面向对像化改造和简化,但还是可以明显看出openssl的痕迹 3. 本文先给出python实现的soc ...

  7. react router @4 和 vue路由 详解(一)vue路由基础和使用

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 1.vue路由基础和使用 a.大概目录 我这里建了一个router文件夹,文件夹下有in ...

  8. learning ddr RTT

    Rtt: Dynamic ODT.DDR3引入的新特性.在特定的应用环境下为了更好的在数据总线上改善信号完整性, 不需要特定的MRS命令即可以改变终结强度(或者称为终端匹配).在MR2中的A9和A10 ...

  9. mips编译器交叉编译openssl

    1.下载源码: git clone https://github.com/openssl/openssl.git 2. 配置生成Makefile ./config  no-asm shared --p ...

  10. poj3261

    题解: 同bzoj1717 代码: #include<bits/stdc++.h> using namespace std; ,P2=,P=; int a1[P],num[P],a2[P] ...