1.会话技术

(1)会话概念:一次会话中包含多次请求和响应。
一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
(2)会话功能:在一次会话的范围内的多次请求间,共享数据
(3)会话方式:
  1. 客户端会话技术:Cookie
  2. 服务器端会话技术:Session

2.Cookie
(1)概念:客户端会话技术,将数据保存到客户端

  Cookie实际上是一小段的文本信息,在网络服务器上产生,并发送给浏览器。通过使用cookie,可以标识用户身份,记录用户名和密码,跟踪重复用户,浏览器将cookie以key/value的形式保存到客户机的某个指定目录中。

  客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

(2) 快速入门:
使用步骤:
  1. 创建Cookie对象,绑定数据
    new Cookie(String name, String value)
  2. 发送Cookie对象
    response.addCookie(Cookie cookie)
  3. 获取Cookie,拿到数据
    Cookie[] request.getCookies()

案例一:

CookieTest01Servlet.java

package cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet(name = "CookieTest01Servlet",urlPatterns = "/cookieTest01Servlet")
public class CookieTest01Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建cookie对象
Cookie cookie=new Cookie("msg","hello");
//2.发送cookie
response.addCookie(cookie);
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

CookieTest02Servlet.java

package cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet(name = "CookieTest02Servlet", urlPatterns = "/cookieTest02Servlet")
public class CookieTest02Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3.获取cookie
Cookie[] cookies=request.getCookies();
//4.获取数据
if(cookies!=null){
for (Cookie cookie : cookies) {
String name=cookie.getName();
String value=cookie.getValue();
System.out.println(name+":"+value);
}
}
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

控制台输出:

(3) 实现原理
基于响应头set-cookie和请求头cookie实现

(4)cookie的细节
  1. 一次可不可以发送多个cookie?
    可以
    可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。
  2. cookie在浏览器中保存多长时间?
    1. 默认情况下,当浏览器关闭后,Cookie数据被销毁
    2. 持久化存储:
      * setMaxAge(int seconds)
        1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
        2. 负数:默认值
        3. 零:删除cookie信息

package cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet(name = "CookieTest03Servlet",urlPatterns = "/cookieTest03Servlet")
public class CookieTest03Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建cookie对象
Cookie cookie1=new Cookie("msg","setmaxage"); //2.设置cookie的存活时间
cookie1.setMaxAge(60);//将cookie持久化到硬盘,60秒后自动删除文件
//3.发送cookie
response.addCookie(cookie1); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

    3. cookie能不能存中文?
      * 在tomcat 8 之前 cookie中不能直接存储中文数据。
      * 需要将中文数据转码---一般采用URL编码(%E3)
      * 在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析
    4. cookie共享问题?
      1. 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
        * 默认情况下cookie不能共享

        * setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录
        * 如果要共享,则可以将path设置为"/"

      2. 不同的tomcat服务器间cookie共享问题?
        * setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享
        * setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享

    5. Cookie的特点和作用
      1. cookie存储数据在客户端浏览器
      2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)

      * 作用:
        1. cookie一般用于存出少量的不太敏感的数据
        2. 在不登录的情况下,完成服务器对客户端的身份识别

3.Cookie综合案例:记住上一次访问时间

(1) 需求:
  1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
  2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串

(2) 分析:
  1. 可以采用Cookie来完成
  2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie
    1. 有:不是第一次访问
      1. 响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20
      2. 写回Cookie:lastTime=2018年6月10日11:50:01
    2. 没有:是第一次访问
      1. 响应数据:您好,欢迎您首次访问
      2. 写回Cookie:lastTime=2018年6月10日11:50:01

package cookie;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date; @WebServlet(name = "CookieVisitServlet", urlPatterns = "/cookieVisitServlet")
public class CookieVisitServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应的消息体的数据格式及编码
response.setContentType("text/html;charset=utf-8"); //1.获取所有的cookie
Cookie[] cookies = request.getCookies();
boolean flag=false;
//2.遍历cookies数组
if(cookies!=null&&cookies.length>0){
for (Cookie cookie : cookies) {
//3.获取cookie的名称
String name = cookie.getName();
if("lasttime".equals(name)){ flag=true;//存在lasttime这个cookie
//4.响应数据
String value = cookie.getValue();
String value_decode = URLDecoder.decode(value, "utf-8"); //对cookie值进行解码
response.getWriter().write("欢迎回来,你上一次的访问时间为"+value_decode); //5.修改cookie中存储的时间
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
String date_format = sdf.format(date); //设置时间格式
System.out.println("编码前:"+date_format); //进行URL编码
String date_format_encode = URLEncoder.encode(date_format, "utf-8");
System.out.println("编码后:"+date_format_encode);
cookie.setValue(date_format_encode);
cookie.setMaxAge(60*60*24*30);//设置cookie的有效时间为一个月
response.addCookie(cookie);
break;
}
}
} if(cookies==null||cookies.length==0||flag==false){
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd HH:mm:ss");
String date_format = sdf.format(date); //设置时间格式
System.out.println("编码前:"+date_format);
//进行URL编码
String date_format_encode = URLEncoder.encode(date_format, "utf-8");
System.out.println("编码后:"+date_format_encode);
Cookie cookie=new Cookie("lasttime",date_format_encode);
cookie.setMaxAge(60*60*24*30);//设置cookie的有效时间为一个月
response.addCookie(cookie);
response.getWriter().write("欢迎您首次访问");
} } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

控制台输出:

4.JSP

(1)JSP概念:Java Server Pages 即java服务器端页面
可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
用于简化书写!!!

(2)原理
JSP本质上就是一个Servlet

(3)JSP的脚本:JSP定义Java代码的方式
  1. <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
  2. <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置,可以定义成员变量或成员方法。注意:用的较少
  3. <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

(4) JSP的内置对象:
在jsp页面中不需要获取和创建,可以直接使用的对象
jsp一共有9个内置对象。
今天学习3个:
  * request
  * response
  * out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
    * response.getWriter()和out.write()的区别:
    * 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
    * response.getWriter()数据输出永远在out.write()之前

5.Session:主菜
(1) 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
(2)快速入门:
  1. 获取HttpSession对象:
    HttpSession session = request.getSession();
  2. 使用HttpSession对象:
    Object getAttribute(String name)
    void setAttribute(String name, Object value)
    void removeAttribute(String name)

案例:使用Session共享数据

SessionTest01Servlet.java

package session;

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 javax.servlet.http.HttpSession;
import java.io.IOException; /**
* 使用Session共享数据
*/
@WebServlet(name = "SessionTest01Servlet", urlPatterns = "/sessionTest01Servlet")
public class SessionTest01Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用session存储数据
//1.获取session
HttpSession session = request.getSession();
//2.存储数据
session.setAttribute("msg","Hello session"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

SessionTest02Servlet.java

package session;

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 javax.servlet.http.HttpSession;
import java.io.IOException; /**
* 使用Session共享数据
*/
@WebServlet(name = "SessionTest02Servlet", urlPatterns = "/sessionTest02Servlet")
public class SessionTest02Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用session获取数据
//1.获取session
HttpSession session = request.getSession();
//2.获取数据
Object msg = session.getAttribute("msg");
System.out.println(msg); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

(3) 原理
Session的实现是依赖于Cookie的。

一次会话范围内,多次获得的Session对象是同一个。


(4) 细节:
  1. 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
    * 默认情况下。不是。
    * 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
案例:打开浏览器,访问地址后,再关闭浏览器,重新访问,通过设置Cookie实现,获取的session为同一个

package session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException; /**
* 使用Session共享数据
*/
@WebServlet(name = "SessionTest03Servlet", urlPatterns = "/sessionTest03Servlet")
public class SessionTest03Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用session存储数据
//1.获取session
HttpSession session = request.getSession();
System.out.println(session);
//2.期望客户端关闭后,session也能相同
Cookie cookie=new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60);//设置cookie的有效时间
response.addCookie(cookie); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

控制台输出:

  2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
    * 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作
    * session的钝化:
    * 在服务器正常关闭之前,将session对象系列化到硬盘上
    * session的活化:
    * 在服务器启动后,将session文件转化为内存中的session对象即可。

  3. session什么时候被销毁?
    1. 服务器关闭
    2. session对象调用invalidate() 。
    3. session默认失效时间 30分钟
      选择性配置修改
      <session-config>
      <session-timeout>30</session-timeout>
      </session-config>

(5)session的特点
  1. session用于存储一次会话的多次请求的数据,存在服务器端
  2. session可以存储任意类型,任意大小的数据

    * session与Cookie的区别:
      1. session存储数据在服务器端,Cookie在客户端
      2. session没有数据大小限制,Cookie有
      3. session数据安全,Cookie相对于不安全

6.案例:验证码
(1)案例需求:
  1. 访问带有验证码的登录页面login.jsp
  2. 用户输入用户名,密码以及验证码。
    * 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误
    * 如果验证码输入有误,跳转登录页面,提示:验证码错误
    * 如果全部输入正确,则跳转到主页success.jsp,显示:用户名,欢迎您

login.jsp

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/7/22 0022
Time: 下午 19:46
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
<script>
window.onload=function () {
document.getElementById("img").onclick=function () {
var date = new Date();
var img = document.getElementById("img");
img.src="/day04/checkCodeServlet?"+date.getTime();
}; }
</script>
<style>
div{
color: red;
}
</style>
</head>
<body>
<form action="/day04/loginServlet" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password"></td>
</tr> <tr>
<td>验证码</td>
<td><input type="text" name="checkcode"></td>
</tr>
<td colspan="2"><img src="/day04/checkCodeServlet" id="img"></td> <tr>
<td colspan="2"><input type="submit" value="登录"></td>
</tr> </table>
</form>
<div><%=request.getAttribute("checkcode_error")==null?"":request.getAttribute("checkcode_error")%></div>
<div><%=request.getAttribute("usermessage_error")==null?"":request.getAttribute("usermessage_error")%></div>
</body>
</html>

LoginServlet.java:验证用户名和密码及验证码

package login;

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 javax.servlet.http.HttpSession;
import java.io.IOException; @WebServlet(name = "LoginServlet", urlPatterns = "/loginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置request编码
request.setCharacterEncoding("utf-8");
//2.获取参数
String username = request.getParameter("username");
String password = request.getParameter("password");
String checkcode = request.getParameter("checkcode"); //3.获取生成的验证码
HttpSession session = request.getSession();
String checkCode_session = (String) session.getAttribute("checkCode_session"); //3.判断验证码是否正确
if(checkCode_session.equals(checkcode)){
//验证码正确
//判断用户名和密码
boolean flag = UserDao.userLogin(username, password);
if(flag){
session.setAttribute("user",username);
response.sendRedirect(request.getContextPath()+"/success.jsp");
}else {
//登录失败
//1.存储提示信息到request
request.setAttribute("usermessage_error","用户名或密码错误");
//2.转发到登录页面
request.getRequestDispatcher("/login.jsp").forward(request,response);
} }else {
//验证码错误
//1.存储提示信息到request
request.setAttribute("checkcode_error","验证码错误");
//2.转发到登录页面
request.getRequestDispatcher("/login.jsp").forward(request,response);
} } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}

数据库连接配置工具类:JDBCConfigUtil.java

package login;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; public class JDBCConfigUtil {
public JDBCConfigUtil(){}
//若一个类中的静态方法
public static Connection getConnection(){
Connection con=null;
try{
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver"); //android
//Class.forName("com.mysql.jdbc.Driver"); //连接数据库
String url="jdbc:mysql://localhost:3306/day1?serverTimezone=UTC&useSSL=false";
String user="root";
//密码需要根据实际情况修改
String password="plj824";
con=DriverManager.getConnection(url,user,password);
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
return con;
}
}

CheckCodeServlet.java:验证码图片生成

package login;

import javax.imageio.ImageIO;
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.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random; /**
* 生成验证码图片
*/
@WebServlet(name = "CheckCodeServlet",urlPatterns = "/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int width=100;
int height=50;
//1.创建对象,验证码图片对象
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //2.美化图片
//2.美化图片
//2.1 填充背景色
Graphics g = image.getGraphics();//画笔对象
g.setColor(Color.PINK);//设置画笔颜色
g.fillRect(0,0,width,height); //2.2画边框
g.setColor(Color.BLUE);
g.drawRect(0,0,width - 1,height - 1); String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
//生成随机角标
Random ran = new Random();
StringBuilder sb=new StringBuilder();
for (int i = 1; i <= 4; i++) {
int index = ran.nextInt(str.length());
//获取字符
char ch = str.charAt(index);//随机字符
sb.append(ch);
//2.3写验证码
g.drawString(ch+"",width/5*i,height/2);
}
String checkCode_session = sb.toString();
//将验证码存入session
request.getSession().setAttribute("checkCode_session",checkCode_session); //2.4画干扰线
g.setColor(Color.GREEN); //随机生成坐标点 for (int i = 0; i < 10; i++) {
int x1 = ran.nextInt(width);
int x2 = ran.nextInt(width); int y1 = ran.nextInt(height);
int y2 = ran.nextInt(height);
g.drawLine(x1,y1,x2,y2);
} //3.将图片输出到页面展示
ImageIO.write(image,"jpg",response.getOutputStream());
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

UserDao.java:使用jdbc连接数据库

package login;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; /**
* 使用jdbc连接数据库
*/
public class UserDao {
public static boolean userLogin(String username,String psw){
//1.获取数据库连接
Connection con= JDBCConfigUtil.getConnection();
String sql="select * from user where username='"+username+"'";
try {
//2.获取SQL语句执行者对象
PreparedStatement pst=con.prepareStatement(sql);
//3.执行SQL语句,并得到结果集
ResultSet rs=pst.executeQuery(); //根据结果集中是否有内容(rs.next()方法),进行判断
if(rs.next()){
if(rs.getString("password").equals(psw)){
return true;
}else {
return false;
}
}else {
return false;
}
} catch (SQLException e1) {
e1.printStackTrace();
}
return false;
} }

效果图:

12 Cookie、Session和JSP基础的更多相关文章

  1. JSP基础笔记

    主要内容:1. JSP基础2. Cookie3. HttpSession ================================ JSP基础 1. jsp的作用: * Servlet: &g ...

  2. JSP基础知识➣Cookie和Session(五)

    JSP Cookie 处理 Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookie的支持.JSP脚本通过request对象 ...

  3. JSP基础--会话跟踪技术、cookie、session

    会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...

  4. Cookie&Session&Jsp总结

    知识点梳理 Cookie&Session&Jsp 1 会话技术 1.1 会话管理概述 1.1.1 会话技术介绍 会话:浏览器和服务器之间的多次请求和响应 (一次对话) 为了实现一些功能 ...

  5. Cookie、Session、jsp、EL、JSTL

      会话技术 Cookie Session 从访问一个站点,到关闭不继续访问 称为一次会话过程.会话技术就是记录本次会话中客户端的状态与数据的. 会话技术分为cookie.session. cooki ...

  6. django基础之day10,cookie session token

    https://www.cnblogs.com/Dominic-Ji/p/10886902.html cookie session token

  7. 【转】Cookie/Session机制详解

    Cookie/Session机制详解   会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息 ...

  8. Java面试题_第二阶段(Servlet、HTTP、Session、JSP、 Ajax、Filter、JDBC、Mysql、Spring)

    1.1. 描述Servlet调用过程? 答案: (1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址. (2)浏览器根据 ...

  9. JSP基础--JAVA遇见HTML

    1.手工编写第一个WEB应用程序 2.默认访问服务器网页首页欢迎界面是 index.jsp,就是网页链接访问其所在的文件夹目录,不访问这个文件,也会自动访问的.如果这个文件夹目录下没有index.js ...

随机推荐

  1. junit4的进一步探讨

    上次只是大概记录了下junit4几个常见标签的用法. 在这篇文章中,我们来进一步分析junit4的用法. 1.断言 junit4中一个很常见的用法就是断言.说到断言,大家再熟悉不过了.不过也许有的朋友 ...

  2. LeetCode 935. Knight Dialer

    原题链接在这里:https://leetcode.com/problems/knight-dialer/ 题目: A chess knight can move as indicated in the ...

  3. LeetCode 959. Regions Cut By Slashes

    原题链接在这里:https://leetcode.com/problems/regions-cut-by-slashes/ 题目: In a N x N grid composed of 1 x 1 ...

  4. MySQL 内连接、外连接、左连接、右连接、全连接……太多了

    用两个表(a_table.b_table),关联字段a_table.a_id和b_table.b_id来演示一下MySQL的内连接.外连接( 左(外)连接.右(外)连接.全(外)连接). 主题:内连接 ...

  5. CollectionUtils.select用法

    import java.util.ArrayList;import java.util.List; import org.apache.commons.collections.CollectionUt ...

  6. dinoql 试用

    dinoql 前面有过介绍,详细的参考文档即可,这篇主要是简单使用 注意目前dinoql 直接通过node 运行会有window 的问题,有好几种解决方法,后边会说明 环境准备 项目初始化 yarn ...

  7. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  8. 洛谷 P2422 良好的感觉 题解

    P2422 良好的感觉 题目描述 kkk做了一个人体感觉分析器.每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适.在一段时间[i, j]内,人的舒适程度定义为[i, j]中最不舒服的那一天的感 ...

  9. jmeter5实现mysql数据库值提取--单sql提取

    字段背景: 在进行接口测试或者压力测试过程中下文的请求需要用到上文请求的值,除了通过正则表达式的方式外,为了更准确的获得数据库值,我们可以直接从数据库提取 一.如何实现数据库的连接.此处不再赘述 点击 ...

  10. mysql 引擎类型

    innodb: 可靠的事物处理引擎,不支持全文搜索 memeory: 数据存储在内存,速度很快 myisam: 性能极高的引擎,支持全文本搜索,但不支持事物