XML 基本介绍 1.概念:Extensible Markup Language 可扩展标记语言
可扩展:标签都是自定义的
功能
xml与html的区别
xml标签都是自定义的,html标签是预定义。 xml的语法严格,html语法松散 xml是存储数据的,html是展示数据 2.基本语法:
xml文档的后缀名 .xml xml第一行必须定义为文档声明 xml文档中有且仅有一个根标签 属性值必须使用引号(单双都可)引起来 标签必须正确关闭 xml标签名称区分大小写 3.组成部分
文档声明 格式: 属性列表: version:版本号1.0 ,必须的属性 encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1 standalone:是否独立 标签:标签名称自定义的 规则: 名称可以包含字母、数字以及其他的字符 名称不能以数字或者标点符号开始 名称不能以字母 xml(或者 XML、Xml 等等)开始 名称不能包含空格 文本: 约束 作为xml文档的书写规则
分类:
DTD:一种简单的约束技术
<!ELEMENT students (student*) > <!ELEMENT student (name,age,sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #REQUIRED>
引入dtd文档到xml文档中
内部dtd:将约束规则定义在xml文档中
外部dtd:将约束的规则定义在外部的dtd文件中
Schema:一种复杂的约束技术
引入: 1.填写xml文档的根元素
2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.引入xsd文件命名空间. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml"
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.itcast.cn/xml" xsi:schemaLocation="http://www.itcast.cn/xml student.xsd" >
解析 操作xml文档,将文档中的数据读取到内存中
操作xml文档
解析(读取):将文档中的数据读取到内存中 写入:将内存中的数据保存到xml文档中。持久化的存储 解析xml的方式:
DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树 优点:操作方便,可以对文档进行CRUD的所有操作 缺点:占内存 SAX:逐行读取,基于事件驱动的。 xml常见的解析器:
JAXP:sun公司提供的解析器,支持dom和sax两种思想 DOM4J:一款非常优秀的解析器 Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 PULL:Android操作系统内置的解析器,sax方式的。 Jsoup 入门步骤:
导入jar包 获取Document对象 获取对应的标签Element对象 获取数据 对象的使用:
Jsoup:工具类,可以解析html或xml文档,返回Document
parse(File in, String charsetName):解析xml或html文件的 parse(String html):解析xml或html字符串 parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象 Document:文档对象。代表内存中的dom树,可以来获取Element对象
getElementById(String id):根据id属性值获取唯一的element对象 getElementsByTag(String tagName):根据标签名称获取元素对象集合 getElementsByAttribute(String key):根据属性名称获取元素对象集合 getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合 Elements:元素Element对象的集合。可以当做 ArrayList来使用
获取子元素对象,Element:元素对象
getElementById(String id):根据id属性值获取唯一的element对象
getElementsByTag(String tagName):根据标签名称获取元素对象集合
getElementsByAttribute(String key):根据属性名称获取元素对象集合
getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
获取属性值
String attr(String key):根据属性名称获取属性值 3. 获取文本内容 String text():获取文本内容 String html():获取标签体的所有内容(包括子标签的字符串内容) Node:节点对象
快捷查询方式: 1. selector:选择器 * 使用的方法:Elements select(String cssQuery) * 语法:参考Selector类中定义的语法 2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集) 文档中某部分位置的语言
Servlet 概念:运行在服务器端的小程序
Servlet就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则 将来我们自定义一个类,实现Servlet接口,复写方法 执行原理 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径 查找web.xml文件,是否有对应的标签体内容 如果有,则在找到对应的全类名 tomacat会将字节码文件加载进内存,并且创建其对象 调用方法 生命周期 被创建:执行init方法,只执行一次
默认情况下,第一次访问时,Servlet被创建
可以在web.xml里标签里配置创建时机
第一次访问时创建
<load-on-startup>的值为负数
在服务器启动时创建
<load-on-startup>的值为0或正数
Servlet的init方法,只执行一次,说明Servlet在内存中村中只存在一个对象,Servlet是单例的
提供服务:执行service方法,执行多次
每次访问Servlet时,Service方法都会被调用一次 被销毁:执行destroy方法,只执行一次
Servlet被销毁时执行。服务器关闭,Servlet被销毁 注解 在类上使用注解进行配置
Servlet体系 Servlet(接口)---->GenericServlet(抽象类)---->HttpServlet(抽象类)
GenericServlet:将Servlet接口中其他方法做了默认空实现,只将service()方法作为抽象 HttpServlet:对http协议的一种封装,简化操作 定义类继承HttpServlet 复写doGet()/doPost()方法 HTTP 基于TCP/IP的高级协议 默认端口号:80 基于请求/响应模型的:一次请求对应一次响应 无状态的:每次请求之间相互独立,不能交互数据 请求消息数据格式 请求行
请求方式 请求url 协议/版本 GET/POST 地址 HTTP/1.1
请求头:客户端浏览器告诉服务器一些信息
格式:请求头名称:请求头值
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
Referer:告诉服务器,当前请求从哪里来 作用:1.放盗链 2.统计工作
请求空行
空行,用于分割POST请求头和请求体的 请求体(正文)
封装POST请求消息的请求参数 响应消息数据格式 响应行
协议/版本 响应状态码 状态码描述 HTTP/1.1 200 ok
响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态
响应头
格式:响应头名称:响应头值 Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式 Content-disposition:服务器告诉客户端以什么格式打开响应数据 in-line:默认值,在当前页面内打开 attachment;filename-xxx:以附件形式打开响应体 响应空行
响应体:传输的数据
Request request和response对象是由服务器创建的
获取请求消息数据
获取请求行数据 获取请求方法:String getMethod() 获取虚拟目录:String getContextPath() 获取Servlet路径:String getServletPath() 获取GET方式请求参数:String getQueryString() 获取请求URL:StringBuffer getRequestURL() 获取协议及版本:String getProtocol() 获取客户机的IP地址:String getRemoteAddr() 获取请求头数据 通过请求头的名称获取请求的值:String getHeader() 获取所有请求头名称:Enumeration getHeaderNames() 获取请求体数据 获取字符输入流:BufferedReader getReader() 获取字节输入流:ServletInputStream getInputStream() 其他功能
获取请求参数通用方式: 根据参数名称获取参数值:String getParameter(String name) 根据参数名称获取参数值的数组:String[] getParameterValues(String name) 获取所有请求的参数名称:Enumeration getParameterNames() 获取所有参数的map集合:Map<String,String[]> getParameterMap() 请求转发:一种在服务器内部的资源跳转方式 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path) 使用RequestDispatcher对象来进行转发:forward(ServletRequest,ServletRespinse response) 特点: 浏览器地址栏路径不发生变化 只能转发当前服务器内部资源中 转发是一次请求 共享数据 域对象:一个有作用范围的对象,可以在范围内共享数据 request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据 方法: 存储数据:void setAttribute(String name,Object obj) 通过键获取值:Object getAttribute(String name) 通过键移除键值对:void removeAttribute(String name) 编码格式设置: request.setCharacterEncoding("utf-8"); BeanUtils工具类 简化数据封装
JavaBean:标准的Java类 类必须被public修饰 必须提供空参构造器 成员变量必须使用private修饰 提供公共setter和getter方法 常用方法: 将map集合的键值对信息,封装到对应的JavaBean对象中:populate(Object obj,Map map) 设置数据:setProperty() 获取数据:getProperty() Response 设置响应消息 设置响应行 设置响应头:setHeader(String name,String value) 设置响应体: 获取输出流 字符输出流:PrintWriter getWriter() 字节输出流:ServletOutputStream getOutputStream() 乱码解决:获取流之前设置 resp.setContentType("text/html;charset=utf-8") 使用输出流,将数据输出到客户端浏览器 重定向: 资源跳转的方式:resp.sendRedirect() 特点: 地址栏发生变化 重定向可以访问其他站点(服务器)的资源 重定向是两次请求,不能使用request对象来共享数据 路径写法: 相对路径:通过相对路径不可以确定唯一资源 绝对路径:通过绝对路径可以确定唯一资源 规则: 给客户端浏览器使用:需要加虚拟目录(项目的访问路径) 虚拟目录动态获取:request.getContextPaath() 给服务器使用:不需要加虚拟目录 ServletContext 概念:代表整个web应用,可以和程序的容器(服务器)来通信
获取:
通过request对象获取 request.getServletContext() 通过HttpServlet获取 功能
获取MIME类型 在互联网通信过程中定义的一种文件数据类型 获取:String grtMineType(String file) :file是文件后缀名 域对象:共享数据 范围:所有用户所有请求的数据 方法: 存储数据:void setAttribute(String name,Object obj) 通过键获取值:Object getAttribute(String name) 通过键移除键值对:void removeAttribute(String name) 获取文件的真实(服务器)路径 方法:String getRealPath(String path) 会话技术 HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性
Cookie 概念:HTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie,它是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的 Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器。通常,它用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态。 步骤: 创建Cookie对象,绑定数据 new Cookie(String name,String value) 发送Cookie对象 response.addCookie(Cookie cookie) 获取Cookie,拿到数据 Cookie[] request.getCookies() 实现原理: 基础响应头set-cookie 和请求头cookie 实现 其他: 发送多个Cookie 创建多个Cookie对象,使用response调用多次addCookie方法 存活时间 默认情况下,当浏览器关闭后,Cookie数据被销毁 持久化存储:cookie.setMaxAge(int seconds) 整数:将Cookie数据写到硬盘的文件中。持久化存储。secods数值表示存活时间,时间过后Cookie文件自动失效 负数:默认值 零:手动删除Cookie数据 同一个服务器下部署多个项目Cookie共享 默认情况下Cookie不能共享 设置Cookie的获取范围:cookie.setPath(String path) 默认情况下,设置当前虚拟目录 共享将path设置为**/** 不同服务器Cookie共享 cookie.setDomain(String path) :如果一级域名相同,多个服务器之间cookie可以共享 Session 概念:客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMap。Session 弥补了 HTTP 无状态特性,服务器可以利用 Session 存储客户端在同一个会话期间的一些操作记录
步骤:
获取session对象 HttpSession session =new request.getSession() 存储数据: session.setAttribute(String name,Object value) 获取数据: session.getAttribute(String name) 实现原理:
服务器第一次接收到请求时,开辟了一块 Session 空间(创建了Session对象),同时生成一个 sessionId ,并通过响应头的 **Set-Cookie:JSESSIONID=XXXXXXX **命令,向客户端发送要求设置 Cookie 的响应; 客户端收到响应后,在本机客户端设置了一个 **JSESSIONID=XXXXXXX **的 Cookie 信息,该 Cookie 的过期时间为浏览器会话结束
其他:
当客户端关闭,服务器不关闭,两次获取的session对象
默认不相同 创建Cookie,键为:JSESSIONID ,值为session.getId() ,设置存活时间,持久化 客户端不关闭,服务器关闭,两次获取的session对象
不是同一个,但要确保数据不会丢失。Tomcat自动完成以下工作: session的钝化: 在服务器正常关闭之前,将session对象序列化到硬盘中 session的活化: 在服务器启动后,将session文件转化为内存的session对象 存活时间
服务器关闭
session对象调用**invalidate()**自杀
session默认失效时间为30分钟
选择性配置修改
<session-config> <session-timeout>30</session-timeout> </session-config>
JSP JSP脚本:定义Java代码的方式: <% %>:Servlet中的service中定义方式一样 <%! %>:在jsp转换后的Java类的成员变量 <%= %>:输出到页面 指令:用于配置JSP页面,导入资源文件 格式:<%指令名称 属性名1=属性值1 属性名2=属性值2 ...%> 分类: page:配置JSP页面 contentType:设置响应体的mime类型以及字符集,等同于response.setContentTypr() import:导包 errorPage:当前页面发生异常后,会自动跳转到指定的错误页面 isErrorPage:标识当前是否为错误页面 true:是,可以使用内置对象execption false:否,默认值。不可以使用内置对象exception include:页面包含的。导入页面的资源文件 taglib:导入资源 注释: JSP九个内置对象 PageContext pageContext:当前页面共享数据,还可以获取其他八个内置对象 HttpServletRequest request:一次请求访问的多个资源(转发) HttpSession session:一次会话的多个请求间 ServletContext application:所有用户间共享数据 HttpServletResponse response:响应对象 Object page:当前页面(Servlet)的对象 JsWriter out:字符输出流对象,response.getWriter()优先于它 ServletConfig config:Servlet的配置对象 Throwable exception:异常对象 EL表达式 概念:Expression Language 表达式语言 语法:${表达式} 忽略el表达式: 设置jsp中page指令中:isElIgnored="true",忽略所有 表达式前加“\,忽略当前el表达式 运算: 算数运算符:+ - * /(div) %(mod) 比较运算符:> < >= <= == != 逻辑运算符:&&(and) ||(or) !(not) 空运算符:empty not empty 用于判断字符串、集合、数组对象是否为null并且长度是否为0 获取值 el表达式只能从域对象中获取值 语法: ${域名称.键名}:从指定域中获取指定键的值 pageScope requestScope sessionScope applicationScope ${键名}:依次从最小的域中查找是否有该对应的值,直到找到为之 {域名称.键名[索引]} Map集合: {域名称.键名.key名称} {域名称.键名.["key名称"]} 隐式对象 el表达式有11个隐式对象 pageContext:获取jsp其他八个内置对象 ${pageContext.request.contextPath}:动态获取虚拟目录 JSTL标签 概念:JavaServer Pages Tag Library JSP标准标签库
步骤:
导入jstl相关jar包
引入标签库:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用的JSTL标签 if <c:if test=""></c:if> test为必须属性,接受boolean表达式 如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容 一般情况下,test属性值会结合el表达式一起使用 choose <c:choose> <c:when test=""></c:when> <c:otherwise></c:otherwise></c:choose> foreach <c:forEach begin="1" end="10" var="i" step="1" varStatus="s"> Filter 概念:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能 步骤 执行流程 执行过滤器 执行放行后资源 回来执行过滤器放行下面的代码 生命周期 init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源 doFilter:每次请求被拦截资源时,会执行。执行多次 destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源 过滤器配置 拦截路径配置:@WebFilter() 具体资源路径:/名称 只有访问该名称资源时,过滤器才会执行 拦截目录:/目录/* 访问/目录下的所有资源时,过滤器都会被执行 后缀名拦截:*.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行 拦截所有资源:/* 访问所有资源时,过滤器都会被执行 拦截方式配置:资源被访问的方式 注解配置: 设置dispatcherTypes属性 REQUEST:默认值。浏览器直接请求资源 FORWARD:转发访问资源 INCLUDE:包含访问资源 ERROR:错误跳转资源 ASYNC:异步访问资源 web.xml配置 过滤器链 执行顺序:如果有两个过滤器:
1.过滤器1 2.过滤器2 3.资源执行 4.过滤器2 5.过滤器1
执行先后
注解配置:按照类名的字符串比较规则比较,值小的先执行 web.xml配置:谁定义在上边,谁先执行 Listener ServletContextListener:监听ServletContext对象的创建和销毁 void contextDestroyed(ServletContextEvent sce):ServletContext对象被销毁之前会调用该方法 void contextInitialized(ServletContextEvent sce):ServletContext对象创建后会调用该方法 注解:@WebListener Ajax 概念: ASynchronous JavaScript And XML 异步的JavaScript 和 XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。 异步:客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。 JQuery实现方式 .ajax({键值对}); .ajax({ url:"" , //请求路径 type:"POST/GET" , //请求方式 data:{"username":"jack","age":23},//请求参数 success:function (data) {//响应成功后的回调函数 alert(data); }, error:function () {//表示如果请求响应出现错误,会执行的回调函数 alert("出错啦...") }, dataType:"text"//设置接受到的响应数据的格式 }); $.get():发送get请求
语法:$.get(url, [data], [callback], [type]) 参数: url:请求路径 data:请求参数 callback:回调函数 type:响应结果的类型 $.post():发送post请求
语法:$.post(url, [data], [callback], [type]) 参数: url:请求路径 data:请求参数 callback:回调函数 type:响应结果的类型 Json json数据是由键值对构成的
键用引号(单双都行)引起来,也可以不使用引号
数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 数组(在方括号中) 对象(在花括号中) null 数据由逗号分隔:多个键值对由逗号分隔
方括号保存数组:[]
获取数据:
json对象.键名 json对象["键名"] 数组对象[索引] 遍历 JSON数据和Java对象的相互转换 Java对象转换JSON
使用步骤:
导入jackson的相关jar包 创建Jackson核心对象 ObjectMapper 调用ObjectMapper的相关方法进行转换 转换方法:
writeValue(参数1,obj)
参数1: File:将obj对象转换为JSON字符串,并保存到指定的文件中 Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中 OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中 参数2:obj对象 writeValueAsString(obj):将对象转为json字符串
属性注解:
@JsonIgnore:排除属性。 @JsonFormat:属性值得格式化 @JsonFormat(pattern = "yyyy-MM-dd") 复杂java对象转换
JSON转为Java对象
使用步骤: 导入jackson的相关jar包 创建Jackson核心对象 ObjectMapper 调用ObjectMapper的相关方法进行转换 转换方法: readValue(json字符串数据,Class) JSON转JavaScript
JSON.parse() JavaScript转JSON
JSON.stringify() Redis 概念: redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL和关系型数据库比较 优点: 成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。 查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。 存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。 缺点: 维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。 不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。 不提供关系型数据库对事务的处理。 非关系型数据库的优势 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。 关系型数据库的优势 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。 事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。 互补关系 关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据 命令操作 redis的数据结构:
redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构 value的数据结构: 字符串类型 string 哈希类型 hash : map格式 列表类型 list : linkedlist格式。支持重复元素 集合类型 set : 不允许重复元素 有序集合类型 sortedset:不允许重复元素,且元素有顺序 字符串类型 string 存储: set key value 获取: get key 删除: del key 哈希类型 hash 存储: hset key field value 获取: hget key field: 获取指定的field对应的值 hgetall key:获取所有的field和value 删除: hdel key field 列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边) 添加: lpush key value: 将元素加入列表左表 rpush key value:将元素加入列表右边 获取:lrange key start end :范围获取 删除: lpop key: 删除列表最左边的元素,并将元素返回 rpop key: 删除列表最右边的元素,并将元素返回 集合类型 set : 不允许重复元素 存储:sadd key value 获取:smembers key:获取set集合中所有元素 判断:sismember key value:判断值是否存在 删除:srem key value:删除set集合中的某个元素 有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序 存储:zadd key score value 获取:zrange key start end [withscores] 删除:zrem key value 通用命令 keys * : 查询所有的键 type key : 获取键对应的value的类型 del key:删除指定的key value 持久化
redis持久化机制:
RDB:默认方式,不需要进行配置,默认就使用这种机制,在一定的间隔时间中,检测key的变化情况,然后持久化数据
编辑redis.windwos.conf文件
#after 900 sec (15 min) if at least 1 key changed save 900 1 #after 300 sec (5 min) if at least 10 keys changed save 300 10 #after 60 sec if at least 10000 keys changed save 60 10000
在文件目录下打开cmd窗口,重新启动redis服务器,并指定配置文件名称
redis-server.exe redis.windows.conf
AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
编辑redis.windwos.conf文件
appendonly no(关闭aof) --> appendonly yes (开启aof) # appendfsync always : 每一次操作都进行持久化 # appendfsync everysec : 每隔一秒进行一次持久化 # appendfsync no : 不进行持久化
Java客户端 Jedis 一款java操作redis数据库的工具 步骤 导入jar包: jedis-2.7.0.jar 创建对象:Jedis jedis = new Jedis("localhost",6379) Jedis连接池: JedisPool 导入jar包:commons-pool2-2.3.jar
创建jedis.properties配置
#最大活动对象数 redis.pool.maxTotal=1000 #最大能够保持idel状态的对象数 redis.pool.maxIdle=100 #最小能够保持idel状态的对象数 redis.pool.minIdle=50 #当池内没有返回对象时,最大等待时间 redis.pool.maxWaitMillis=10000 #当调用borrow Object方法时,是否进行有效性检查 redis.pool.testOnBorrow=true #当调用return Object方法时,是否进行有效性检查 redis.pool.testOnReturn=true #“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1. redis.pool.timeBetweenEvictionRunsMillis=30000 #向调用者输出“链接”对象时,是否检测它的空闲超时; redis.pool.testWhileIdle=true # 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3. redis.pool.numTestsPerEvictionRun=50 #redis服务器的IP redis.ip=127.0.0.1 #redis服务器的Port redis1.port=6379
public class JedisPoolUtils {
private static JedisPool jp;
static {
//读取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties
Properties pro = new Properties();
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//创建JedisPoolConfig对象
JedisPoolConfig jpc = new JedisPoolConfig();
//获取数据,设置到JedisPoolConfig中
jpc.setMaxTotal(Integer.parseInt(pro.getProperty("redis.pool.maxTotal")));
jpc.setMaxIdle(Integer.parseInt(pro.getProperty("redis.pool.maxIdle")));
//初始化JedisPool
jp = new JedisPool(jpc, pro.getProperty("redis.ip"), Integer.parseInt(pro.getProperty("redis1.port")));
}
//获取连接方法
public static Jedis getJedis() {
return jp.getResource();
}
}