JavaWeb

Junit单元测试
测试分类:黑盒测试、白盒测试
Junit使用:

1.定义一个测试类
2. 定义测试方法:可以独立运行
3. 给方法加注解@test
4. 导入junit依赖环境

判断:红色代表成功,绿色代表失败。一般使用断言(assert)操作处理结果
Assert.assertEquals(期望的结果,运算的结果)
加@Before,初始化方法,在所有测试方法执行之前执行
加@After,在所有测试方法执行完后,都会自动执行该方法
反射:框架设计的灵魂
框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
概念:将类的各个组成部分封装为其他对象,这就是反射机制
在这里插入图片描述
好处:可以在成员运行过程中操作这些对象
可以解耦,提高程序可扩展性

获取class对象的方式:

  1. class.forName(“全类名”):将字节码文件加载进内存,返回class对象(对应源代码阶段)
    对用于配置文件
  2. 类名.class:通过类名的属性class获取(对应class类对象阶段)
    多用于参数的传递
  3. 对象.getclass():getclass()方法在object中定义着
    多用于对象的获取字节码的方式
    同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个。
    Class对象的功能
    获取功能:
    1.获取成员变量们
    2.获取构造方法们
    3.获取成员方法们
    4获取类名
    在这里插入图片描述
    Filed:成员变量
    设置值:void set(Object obj,Object value)
    获取值:get(Object obj)
    忽略访问权限修饰符的安全检查:setAccessible(true):暴力反射
    Constructer:构造方法
    创建对象:T newInstance(Object…initargs)
    如果使用空参构造方法创建对象,操作可以简化:Class对象的newInstance
    Method:成员方法
    执行方法:invoke(Object obj)
    获取方法名称:getName

注解
使用方法:@注解名称
作用分类

1.编写文档:通过代码标识的注解生成文档
2. 代码分析:通过代码里标识的注解对代码进行分析
3. 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查

JDK预定义的一些注解
@Override:检测被注解的方法是否是继承自父类的
@Deprecated:该注解标注的内容,表示已过时
@SuppressWarnings:压制警告
自定义注解
格式:元注解public @interface 注解名称{属性列表}
本质:就是一个接口,该接口默认继承Annotation接口
属性:接口中的抽样方法。
要求:
a.属性的返回值类型为:基本数据类型、String、枚举、注解及以上类型的数组。
b.定义了属性,在使用时需要给属性赋值。
如果定义属性时,使用default关键字给属性默认初始化值,则可以不用赋值。
如果只有一个属性需要赋值,并且属性的名称是value,则vaue可以省略,直接定义值即可
元注解:用于描述注解的注解
@Target:描述注解能够作用的位置
@Retention:描述注解被保留的阶段
@Documented:描述注解是否被抽取到api中
@Inherited:描述注解是否被子类继承

Web相关概念

  1. 软件架构
    a. C/S:客户端/服务端
    b. B/S:浏览器/服务端
  2. 资源分类
    a. 静态资源:html,css,javaScript
    b. 动态资源:Servlet/jsp,php,asp….
  3. 网络通信三要素
    a. ip地址
    b. 端口0-65536
    c. 传输协议:规定了数据传输的规则
    基础协议:tcp:安全协议,三次握手
    Udp:不安全协议,速度快

前端知识:
HTML:用于搭建基础网页,展示页面内容
CSS:用于美化页面,布局页面
JavaScript:控制页面的元素,让页面有一些动态的效果

Web服务器软件
服务器:安装了服务器软件的计算机
Web服务器软件:接收用户的请求,处理请求,做出相应
Tomcat
web服务器。
Servlet:
概念:运行在服务端的小程序
servlet就是sun公司开发动态web的一门技术,servlet就是一个接口,定义了java类被浏览器访问到(tomcat)的规则。
将来我们自定义一个类,实现servlet接口,复写方法。
面试题:如何访问到一个网站?
1.客户端发起一个请求:www.baidu.com
2.检查本机的C:\Windows\System32\driver\etc\hosts配置文件有没有这个域名映射
有:直接访问对应的ip地址,这个地址中有我们需要访问的web程序,可以直接访问
没有:去DNS服务器找,找到就返回,找不到就返回找不到
在这里插入图片描述
面试题:当你在浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
1)域名解析
2)发起TCP的三次握手
3) 建立起TCP连接后发起http请求
4)服务器响应http请求,浏览器得到html代码
5) 浏览器解析html代码,并请求html代码中的资源(css JavaScript 图片)
6)浏览器对页面进行渲染呈现
HTTP
超文本传输协议是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
文本:html,字符串,…
超文本:图片,音乐,视频,定位,地图…
80
HTTPS: 安全的
443

快速入门:
1 创建javaEE项目
2 定义一个类
Public class Servlet
3 实现接口中的抽样方法
4 配置Servlet,在web.xml中

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.shuai.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

servlet-mapping:对请求设置映射文件

执行原理:
1 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。
2 查找web.xml文件,是否有对应的url-pattern标签体内容
3 如果有,则在找到对应的servlet - class全类名
4 Tomcat会将字节码文件加载进内存,并且创建其对象
5 调用其方法

ServletContext
Web容器在启动的时候,它会给每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用;
1)共享数据
在这个Servlet中保存的数据,可以在另外一个Servlet中拿到

//在HelloServlet里面保存数据
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String username = "帅";
        context.setAttribute("username",username);
    }
//在GetServlet里面获取数据
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String username = (String) servletContext.getAttribute("username");

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print("名字"+username);
    }

2)获取初始化参数

  <!--配置一些web应用初始化参数-->
  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
  </context-param>
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String url =servletContext.getInitParameter("url");
        resp.getWriter().print(url);
    }

3)请求转发

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        //RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/hello");//转发的请求路径
        //requestDispatcher.forward(req,resp);//调用forward实现请求转发
        servletContext.getRequestDispatcher("/hello").forward(req,resp);
    }

4)读取资源文件
Properties
在java目录下新建properties
在resources目录下新建properties
发现:都被打包到了同一个路径下:classes,我们俗称这个路径为classpath
思路:需要一个文件流

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INFO/classes/db.properties");
        Properties prop = new Properties();
        prop.load(is);
        String user = prop.getProperty("username");
        String pwd = prop.getProperty("password");
        resp.getWriter().print(user+":"+pwd);
    }

Servlet中的生命周期
1)被创建:执行init方法,只执行一次
指定Servlet的创建时机:
在servlet标签下配置
a. 第一次被访问时,创建
load-on-startup的值为负数
b. 在服务器启动时,创建
load-on-startup的值为0或正整数
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
多个用户同时访问,可能存在线程安全问题。
解决:尽量不要在servlet中定义成员变量,即使定义了成员变量,也不要对其修改值
2)提供服务:执行service方法,执行多次
每次访问servlet时,service方法都会被调用一次
3) 被销毁:执行destory方法,只执行一次

Servlet3.0版本之后步骤
1 创建javaEE项目
2 定义一个类
Public class Servlet
3 实现接口中的抽样方法
4 在类上使用@WebServlet注解,进行配置:@WebServlet(“资源路径”)

GenericServlet
将servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,将来定义servlet类时,可以继承GenericServlet,实现service方法即可

httpServlet(推荐)
对http协议的一种封装,简化操作
1 定义类继承HTTPServlet
2 复写doGet/doPost方法

HTTP协议
概念:超文本传输协议
特点:
1.基于TCP/IP的高级协议
2.默认端口号:80
3.基于请求/响应模型的:一次请求对应一次响应
4.无状态的每次请求直接相互独立,不交互数据

请求消息数据格式
a. 请求行
请求方式 请求url 请求协议/版本
HTTP协议有7种请求方式,常用的有两种
GET:请求参数在请求行中,在url后;
请求的url长度有限制的;
不太安全
POST:请求参数在请求体中
请求的url长度没有限制的
相对安全
b. 请求头:客户端浏览器告诉服务器一些信息
请求头名称:请求头值
常见请求头:
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
可以在服务端获取该头的信息,解决浏览器的兼容性问题
Referer:告诉服务器,我(当前请求)从哪里来?
作用:1.防盗链
2.统计工作
c. 请求空行
分割POST请求的请求头和请求体
d. 请求体(正文)
封装POST请求消息的请求参数的

Request对象和response对象的原理
1 request和response对象是由服务器创建的。我们来使用他们
2 request对象是来获取请求消息,response对象来设置响应消息
request功能:
1.获取请求消息数据
a.获取请求行

b.获取请求头
Resuest.getHeader(“请求头名称”)
c.获取请求体数据
只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数。
步骤:1.获取流对象
BufferedReader getReader():获取字符流,只能操作字符数据
SercletInputStream getInuputStream():获取字节输入流,可以操作所有类型数据
2.再从流对象中拿数据
2.其他功能
a.获取请求参数通用方式
String getParameter(String name ):根据参数名称获取参数值
String[] getParameterValue(String name):根据参数名称获取参数值数组
Enumeration getParameterNames();获取所有请求的参数名称
Map<String, String[]> getParameterMap():获取所有参数的map集合
中文乱码问题:在获取参数前,设置request的编码request.setCharacterEncoding(“utf-8”)
b.请求转发:一种在服务器内部的资源跳转方式
步骤:
通过request对象获取请求转发器对象:RequestDispatcher
getRequestDispatcher(String path)
使用ResquestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
特点:
浏览器地址栏路径不发生变化
只能转发到当前服务器内部资源中
转发是一次请求
c.共享数据:
域对象:一个有作用范围的对象,可以在范围内共享数据
Request域:代表一次请求范围,一般用于请求转发的多个资源共享数据
方法:SetAttribute(String name, Object obj):存储数据
getAttribute(String name):通过键获取值
removeAttribute(String name):通过键移除键值对
d.获取servletContext
ServletContext getServletContext()

案例:用户登录
需求:1.编写login.html登录页面
2.使用Druid数据库连接池技术,操作mysql,day14数据库中的user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
5.登录失败跳转到FailServlet:登录失败,用户名或密码错误
在这里插入图片描述开发步骤:
1 创建项目,导入html页面,配置文件,jar包
2 创建数据库环境
CREATE DATABASE day14;
USE day14;
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(32) UNIQUE NOT NULL,
PASSWORD VARCHAR(32) NOT NULL
);
3. 创建包cn.itcast.domain,创建类User

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

4.创建包cn.itcast.dao,创建UserDao,提供login的方法

import cn.itcast.domain.User;
import cn.itcast.util.JDBCUtil;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * 操作数据库中User表的类
 */
public class UserDao {
    //声明JDBCTemplate对象共用
    private JdbcTemplate template = new JdbcTemplate(JDBCUtil.getDataSource());
    /**
     * 登录方法
     * @param loginUser 只有用户名和密码
     * @return user包含用户全部数据,没有查询到,返回null
     */
    public User login(User loginUser){
        try {
            //1.编写sql
            String sql = "select * from user where username = ? and password = ?";
            //2.调用query方法
            User user = template.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),loginUser.getUsername(),loginUser.getPassword());
            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

5.编写cn.itcast.web.servlet.LoginServlet类
6.login.html中form表单的action路径的写法
虚拟目录+Servlet的资源路径
7.BeanUtils工具类,简化数据封装

响应消息:
服务器发送给客户端的数据
数据格式:
1) 相应行
组成:协议/版本 响应状态码 状态码描述
响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态
状态码都是3位数字
分类:a.1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx多状态码
b.2xx:成功。代表:200.
c.3xx:重定向。代表:302(重定向),304(访问缓存)
d.4xx:客户端错误。代表:404(路径没有对应的资源),405(请求方式没有对应的doxxx方法)
e.5xx:服务端错误。
2) 响应头
格式:头名称:值
常见响应头:Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
3) 响应空行
4)响应体
传输的数据

Response对象
功能:设置响应消息
1)设置响应行
格式:HTTP/1.1 200 ok
设置状态码:setStatus(int sc)
2)设置响应头
setHeader(String name, String value)
3) 设置响应体
使用步骤:
1 获取输出流
字符输出流:PrintWriter getWriter()
字节输出流:ServletOutputstream getOutputstream
2 使用输出流,将数据输出到客户端浏览器

重定向
在这里插入图片描述
B一个Web资源收到客户端A请求后,B会通知A客户端去访问另一个web资源C,这个过程叫重定向。
常用场景:
1)用户登录
Response.sendRedirect(“/day15/responseDemo2”)
重定向于转发的区别(forward和redirect区别)
特点:
1 地址栏发送变化
2 重定向可以访问其他站点
3 重定向是两次请求。不能使用request对象来共享数据

转发的特点:
1 转发地址栏路径不变
2 转发只能访问当前服务器下的资源
3 转发是一次请求。可以使用request对象来共享数据

服务器输出字符数据到浏览器
1) 获取字符输出流
printWriter pw = Response.getWriter
2) 输出数据

pw.write()
防止乱码:response.setContentType(“text/html;charset=utf-8”)
服务器输出字节数据到浏览器
1) 获取字节输出流
ServletOutStream sos = response.getOutputStream;
2) 输出数据

ServletContext对象
概念:代表整个web应用,可以和程序的容器(服务器)通信
获取:通过request对象获取:request.getServletContext();
通过HttpServlet获取:this.getServletContext()
功能:获取MIME类型
域对象:共享数据
获取文件的真实(服务器)路径:context.getRealPath(“/b.txt”)

会话技术
会话:一次会话中包含多次请求和响应
功能:在一次会话的范围内的多次请求间,共享数据
方式:客户端会话技术:Cookie
服务端会话技术:Session
Cookie
概念:客户端会话技术,将数据保存到客户端
在这里插入图片描述

快速入门:

  1. 创建cookie对象,绑定数据
    New cookie(String name, string value)
  2. 发送cookie对象
    Response.addCookie(Cookie cookie)
  3. 获取cookie,拿到数据
    String[] = Request.getCookies()

Cookie的特点和作用:
1 cookie存储数据在客户端浏览器
2 浏览器对于单个cookie的大小有限制(4kb),以及同一个域名的总cookie数量也有限制(20个)
作用:
1 cookie一般用于存储少量不太敏感的数据
2 在不登陆的情况下,完成服务器对客户端的身份识别
案例:记住上一次访问时间
需求:访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
如果不是第一次访问,则提示:欢迎回来,您上次访问的时间为:显示时间字符串

JSP
Java服务端页面。
可以理解为:一个特殊的页面,其中既可以定义html标签,又可以定义java代码
JSP本质上就是一个Servlet.
JSP的脚本:
1.<% 代码 %>:定义的Java代码,在service方法中。Service方法中可以定义什么,该脚本就可以定义什么
2.<%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置
3.<%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本就可以定义什么
JSP的内置对象:request、response、out

Session
概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession。
服务器会给每一个用户(浏览器)创建一个Session对象;
一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在;
用户登录之后,整个网站它都可以访问。
在这里插入图片描述

快速入门:

  1. 获取Session对象
    HttpSession session = request.getSession
  2. 使用HttpSession对象
    Object getAttribute(String name, Object value)
    Void setAttribute(String name, Object value)
    Void removeAttribute(String name)
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        //得到Session
        HttpSession session = req.getSession();
        //注销Session
        //session.invalidate();
        //给Session中存东西
        session.setAttribute("name","shuai");
        //获取session的ID
        String sessionId = session.getId();
        //判断session是否为新创建的
        if(session.isNew()){
            resp.getWriter().write("session创建成功,id"+sessionId);
        }
        else{
            resp.getWriter().write("已经存在"+sessionId);
        }
    }

设置Session的默认失效时间

  <!--设置Session默认的失效时间-->
  <session-config>
    <!--15分钟后Session自动失效,以分钟为单位-->
    <session-timeout>15</session-timeout>
  </session-config>

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

session与cookie的区别:
1)Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
2)Session把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息,减少服务器资源的浪费)
3)Session对象由服务器创建
4)session没有数据大小限制,cookie有
5)session数据安全,cookie相对不安全
使用场景:
1)保存登录用户信息
2)购物车信息
3)在整个网站中经常会使用的数据,将其保存在Session中

MVC开发模式
M:model,模型。JavaBean
完成具体的业务操作,如:查询数据库,封装对象
V:view,视图。JSP
展示数据
C:controller,控制器。Servlet
获取用户的输入,调用模型,将数据交给视图进行展示
优点:
1 耦合性低,方便维护,可以利于分工合作
2 重用性高
缺点:
使得项目变得复杂,对开发人员要求高

EL表达式
概念:表达式语言
作用:替换和简化JSP页面中Java代码的编写
语法:$(表达式),
$(表达式):忽略当前这个el表达式
使用:

  1. 运算
    运算符:算术运算符,比较运算符,逻辑运算符,空运算符(Empty)
  2. 获取值
    El表达式只能从域对象中获取值
    语法:
    1. 域 名 称 . 键 名 : 从 指 定 域 中 获 取 指 定 键 的 值 域 名 称 : p a g e S c o p e − − − − p a g e C o n t e x t r e q u e s t S c o p e − − − − r e q u e s t s e s s i o n S c o p e − − − − − s e s s i o n a p p l i c a t i o n S c o p e − − − − a p p l i c a t i o n ( S e r v l e t C o n t e x t ) 2. {域名称.键名}:从指定域中获取指定键的值 域名称:pageScope ----pageContext requestScope----request sessionScope-----session applicationScope----application(ServletContext) 2. .pageScopepageContextrequestScoperequestsessionScopesessionapplicationScopeapplication(ServletContext)2.{键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止
    3.获取对象、List集合、Map集合的值
    对象: 域 名 称 . 键 名 . 属 性 名 , 本 质 上 回 去 调 用 g e t t e 方 法 L i s t 集 合 : {域名称.键名.属性名},本质上回去调用gette方法 List集合: ..getteList{域名称.键名[索引]}
    Map集合:${域名称.键名.key名称}
    ${域名称.键名[“key名称”]}
  3. 隐式对象
    El表达式中有11个隐式对象
    pageContext:

JSTL
JSP标准标签库
作用:用于简化和替换 jsp页面上的java代码
使用步骤:

  1. 导入jstl相关jar包
  2. 引入标签库:taglib指令:<%@ taglib %>
  3. 使用标签
    常用的JSTL标签:
    1. If
    2. Choose
    3. Foreach

三层架构:软件设计架构

  1. 界面层(表示层/web层):用户看的界面。用户可以通过界面上的组件和服务器进行交互。接收用户参数,封装数据,调用业务逻辑层完成处理。转发jsp页面完成显示
  2. 业务逻辑层(service层):处理逻辑业务的,组合DAO层的简单方法,形成复杂的功能
  3. 数据访问层(dao层):定义了数据库的最基本增删改查。

案例:用户信息列表展示
需求:用户信息的增删改查操作
设计:

  1. 技术选型:Servlet+JSP+Mysql+JDBCTemplate+Durid+BeanUtils+tomcat
  2. 数据库设计:
    Create database day17;
    Use day17;
    Create table user(
    Id int primary key anto_inccreament,
    Name varchar(20) not null,
    Gender varchar(5),
    Age int,
    Address varchar(32),
    Qq varchar(20),
    Email varchar(50)
    );
  3. 开发:
    1.环境搭建
    创建数据库环境
    创建项目,导入需要的jar包
    2.编码
  4. 测试
  5. 部署运维
    在这里插入图片描述

JSON
概念:JavaScript对象表示法。现在多用于存储和交换文本信息的语法,进行数据的传输。
语法:

  1. 基本规则
    数据在名称/值对中:Json数据是由键值对构成的
    数据由逗号分隔:多个键值对由逗号分隔
    花括号保存对象:使用{}定义json格式
    方括号保存数组:[]
  2. 获取数据:
    a. json对象.键名
    b. json对象[“键名”]
    c. 数组对象[索引]
  3. JSON数据和Java对象的相互转换
    JSON解析器:Jackson
    a. JSON转为Java对象
    使用步骤:
    导入Jackson的jar包
    创建Jackson核心对象ObjectMapper
    调用ObjectMapper的相关方法进行转换
    ReadValue(json字符串,class)
    b. Java对象转为JSON
    1. 使用步骤:
      导入Jackson的jar包
      创建Jackson核心对象ObjectMapper
      调用ObjectMapper的相关方法进行转换
      String json = Mapper.writeValueAsString(obj):将对象转换为字符串
      Mapper.writeValue(new File(“d://a.txt”),p):将数据写到文件
    2. 注解:
      @JsonIgnore:排除属性
      @JsonFormat:属性值得格式化

Redis
概念:redis是一款高性能得NOSQL系列得非关系型数据库。
关系型数据库,Mysql,oracal…
1 数据之间有管理关系
2 数据存储在硬盘得文件上
非关系型数据库,redis、hbase…
1.数据之间没有关联关系
2 数据存储在内存中
一般会将数据存储在关系型数据库中,在nosqy数据库中备份存储关系型数据库得数据
经常查询一些不太经常发生变化得数据?
1.缓存思想:从缓存中获取数据,若有数据直接返回,没有数据从数据库查询并将数据放入缓存。
2.使用非关系型数据库

Redis的数据结构
Redis的存储是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构:
1.字符串类型 string
2.哈希类型 hash :map格式
3.列表类型 list :linkedlist格式
4.集合类型 set:
5.有序集合类型 sortedset
持久化:
Redis是一个内存数据库,dang 服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
Redis持久化机制:
Rdb:默认方式,不需要进行配置,默认使用这种机制
AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作之后,持久化数据

Java客户端jedis

  1. 获取连接
  2. 操作
  3. 关闭连接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值