jsp-servlet(2)响应HTML文档-书籍管理系统
基础知识预备:
目标:
构建一个书籍管理系统,实现以下功能。
功能:
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数据访问对象
2 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文档-书籍管理系统的更多相关文章
- MinDoc v0.6 发布,轻量级文档在线管理系统
更新日志 新增 标签功能,可以根据标签组织项目 新增 用户删除功能,删除后的用户项目以及其他数据会自动转移到超级管理员账户上 新增 项目描述支持Markdown语法 优化 项目标签添加效果 优化 登录 ...
- Maven+JSP+Servlet+JDBC+Mysql实现的dbExper宾馆管理系统
本文存在视频版本,请知悉 项目简介 项目来源于:https://github.com/mafulong/databaseExper-hotelMaster 这次分享的也是毕设或课程设计选择一样很多的宾 ...
- JSP+Servlet+JDBC+Mysql实现的天才会议管理系统
本文存在视频版本,请知悉 项目简介 项目来源于:https://github.com/hegexunmeng/meeting-system 这次分享一个会议管理系统,前端后端几乎没有使用任何框架,适合 ...
- JSP+Servlet+JDBC+mysql实现的学生成绩管理系统
项目简介 项目来源于:https://gitee.com/zzdoreen/SSMS 本系统基于JSP+Servlet+Mysql 一个基于JSP+Servlet+Jdbc的学生成绩管理系统.涉及技术 ...
- SmartWiki文档在线管理系统简介
简介 SmartWiki是一款针对IT团队开发的简单好用的文档管理系统.可以用来储存日常接口文档,数据库字典,手册说明等文档.内置项目管理,用户管理,权限管理等功能,能够满足大部分中小团队的文档管理需 ...
- 推荐一款接口文档在线管理系统-MinDoc
项目简介 MinDoc 是一款针对IT团队开发的简单好用的文档管理系统. MinDoc 的前身是 SmartWiki 文档系统.SmartWiki 是基于 PHP 框架 laravel 开发的一款文档 ...
- 《MinDoc 接口文档在线管理系统》
项目简介 MinDoc 是一款针对IT团队开发的简单好用的文档管理系统. MinDoc 的前身是 SmartWiki 文档系统.SmartWiki 是基于 PHP 框架 laravel 开发的一款文档 ...
- Sharepoint 文档知识管理系统--Word在试图打开文件时遇到错误
在系统开发中,遇到问题:SharePoint 2010与Office 2010安装在一台服务器上,当用Office打开SharePoint文档库中的文档时,遇到“Word在试图打开文件时遇到错误,请尝 ...
- [项目分享]JSP+Servlet+JDBC实现的云端汽修后台管理系统
本文存在视频版本,请知悉 项目简介 项目来源于:https://gitee.com/chenlinSir/CloudDemo-servlet 难度等级:简单 基于JSP+Servlet+Jdbc的云端 ...
随机推荐
- 字符序列(characts)
字符序列(characts) 问题描述: 从三个元素的集合[A,B,C]中选取元素生成一个N 个字符组成的序列,使得没有两个相邻的 子序列(子序列长度=2)相同,例:N=5 时ABCBA 是合格的,而 ...
- java高级---->Serializable的过程分析
本次讲解中我们在上次的基础上,深入的了解一下序列化的流程以及其中的原理.关于序列化的一些知识与使用,请参见我的另一篇博客:java基础---->Serializable的使用.好了,我们进行以下 ...
- 浏览器行为模拟之requests、selenium模块
requests模块 前言: 通常我们利用Python写一些WEB程序.webAPI部署在服务端,让客户端request,我们作为服务器端response数据: 但也可以反主为客利用Python的re ...
- TLS与SSL之间关系——SSL已经被IEFT组织废弃,你可以简单认为TLS是SSL的加强版
TLS与SSL之间关系 原文地址:SSL vs. TLS - What's the Difference? from:https://juejin.im/post/5b213a0ae51d4506d4 ...
- MongoDB,无模式文档型数据库简介
MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂 ...
- Python3+ssl实现加密通信
一.说明 1. python标准库ssl可实现加密通信 2. ssl库底层使用openssl,做了面向对像化改造和简化,但还是可以明显看出openssl的痕迹 3. 本文先给出python实现的soc ...
- react router @4 和 vue路由 详解(一)vue路由基础和使用
完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 1.vue路由基础和使用 a.大概目录 我这里建了一个router文件夹,文件夹下有in ...
- learning ddr RTT
Rtt: Dynamic ODT.DDR3引入的新特性.在特定的应用环境下为了更好的在数据总线上改善信号完整性, 不需要特定的MRS命令即可以改变终结强度(或者称为终端匹配).在MR2中的A9和A10 ...
- mips编译器交叉编译openssl
1.下载源码: git clone https://github.com/openssl/openssl.git 2. 配置生成Makefile ./config no-asm shared --p ...
- poj3261
题解: 同bzoj1717 代码: #include<bits/stdc++.h> using namespace std; ,P2=,P=; int a1[P],num[P],a2[P] ...