<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>运维博客 &#187; Java</title>
	<atom:link href="http://www.ywbk.cc/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ywbk.cc</link>
	<description>开发&#38;运维</description>
	<lastBuildDate>Thu, 28 May 2026 02:59:52 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.7.41</generator>
	<item>
		<title>查看Centos\Euler上Log4j、log4j-core的版本</title>
		<link>http://www.ywbk.cc/1308.html</link>
		<comments>http://www.ywbk.cc/1308.html#comments</comments>
		<pubDate>Tue, 29 Apr 2025 08:33:22 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.ywbk.cc/?p=1308</guid>
		<description><![CDATA[Apache Log4j 是整个日志框架的名字。 log4j.jar 是Log4j 1.x的所有功能所需类和资 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Apache Log4j 是整个日志框架的名字。<br />
log4j.jar 是Log4j 1.x的所有功能所需类和资源<br />
log4j-core 是Log4j 2.x的提供日志记录的具体实现</p>
<p>1、查询系统是否安装了Log4j、log4j-core</p>
<pre class="prettyprint linenums">find / -name "log4j*.jar" 2&gt;/dev/null
find / -name "log4j-core*.jar" 2&gt;/dev/null</pre>
<p>2、如果回显未带版本号</p>
<pre class="prettyprint linenums">unzip -p /path/log4j.jar META-INF/MANIFEST.MF | grep version</pre>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/1308.html">查看Centos\Euler上Log4j、log4j-core的版本</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/1308.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决web登录华为T8000但是无法进入KVM，jre/jdk/java报错问题。</title>
		<link>http://www.ywbk.cc/1256.html</link>
		<comments>http://www.ywbk.cc/1256.html#comments</comments>
		<pubDate>Thu, 21 Mar 2024 02:03:40 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bd.com/?p=1256</guid>
		<description><![CDATA[华为T8000比较老，实践中发现使用win10系统无法连接kvm，jre会报错误，怎么调试都不行。 折腾了好久 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>华为T8000比较老，实践中发现使用win10系统无法连接kvm，jre会报错误，怎么调试都不行。</p>
<p>折腾了好久，最终使用win7系统解决，特此记录一下，以防后期用到。</p>
<p>系统版本：windows_7_enterprise_with_sp1_x64_dvd_u_677685</p>
<p>下载地址：ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/</p>
<p>jre版本：jre-7u80-windows-i586.exe</p>
<p>下载地址：https://download.oracle.com/otn/java/jdk/7u80-b15/jre-7u80-windows-i586.exe</p>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/1256.html">解决web登录华为T8000但是无法进入KVM，jre/jdk/java报错问题。</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/1256.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>常用的字符集和字符编码</title>
		<link>http://www.ywbk.cc/830.html</link>
		<comments>http://www.ywbk.cc/830.html#comments</comments>
		<pubDate>Mon, 16 Dec 2019 04:34:14 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bk.com/?p=830</guid>
		<description><![CDATA[1.字符编码 计算机中储存的信息都是用二进制数表示的，而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二 [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>1.字符编码</h2>
<p>计算机中储存的信息都是用二进制数表示的，而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则，将字符存储到计算机中，称为<span style="color: #0000ff;"><strong>编码</strong></span>。反之，将存储在计算机中的二进制数按照某种规则解析显示出来，称为<strong><span style="color: #0000ff;">解码</span></strong>。比如说，按照A规则存储，同样按照A规则解析，那么就能显示正确的文本符号。反之，按照A规则存储，再按照B规则解析，就会导致乱码现象。<br />
<strong><span style="color: #0000ff;">字符编码</span></strong>Character Encoding:就是一套自然语言的字符与二进制数之间的对应规则。</p>
<h2>2.字符集</h2>
<p><span style="color: #0000ff;"><strong>字符集</strong></span>Charset：也叫编码表。是一个系统支持的所有字符的集合，包括各国家文字、标点符号、图形符号、数字等。<br />
计算机要准确的存储和识别各种字符集符号，需要进行字符编码，一套字符集必然至少有一套字符编码。常见字符集有ASCII字符集、GBK字符集、Unicode字符集等。常见字符集和字符编码对应关系：<br />
<img alt="" src="http://img.05bk.com/CharsSet.jpg" /><br />
由上图得知，当指定了编码，它所对应的字符集自然就指定了，所以编码才是我们最终要关心的。</p>
<h2>3.ASCII字符集</h2>
<p>ASCII（American Standard Code for Information Interchange，美国信息交换标准代码）是基于拉丁字母的一套电脑编码系统，用于显示现代英语，主要包括控制字符（回车键、退格、换行键等）和可显示字符（英文大小写字符、阿拉伯数字和西文符号）。<br />
<strong><span style="color: #0000ff;">基本的ASCII字符集</span></strong>，使用7位（bits）表示一个字符，共128字符。<strong><span style="color: #0000ff;">扩展的ASCII字符集</span></strong>，使用8位（bits）表示一个字符，共256字符，方便支持欧洲常用字符。</p>
<h2>4.ISO-8859-1字符集</h2>
<p>拉丁码表，别名Latin-1，用于显示欧洲使用的语言，包括荷兰、丹麦、德语、意大利语、西班牙语等。<br />
ISO-5559-1使用单字节编码，兼容ASCII编码。</p>
<h2>5.GBxxx字符集</h2>
<p>GB就是国标的意思，是为了显示中文而设计的一套字符集。<br />
<strong><span style="color: #0000ff;">GB2312</span></strong>：简体中文码表。一个小于127的字符的意义与原来相同。但两个大于127的字符连在一起时，就表示一个汉字，这样大约可以组合了包含7000多个简体汉字，此外数学符号、罗马希腊的字母、日文的假名们都编进去了，连在ASCII里本来就有的数字、标点、字母都统统重新编了两个字节长的编码，这就是常说的&#8221;全角&#8221;字符，而原来在127号以下的那些就叫&#8221;半角&#8221;字符了。<br />
<strong><span style="color: #0000ff;">GBK</span></strong>：最常用的中文码表。是在GB2312标准基础上的扩展规范，使用了双字节编码方案，共收录了21003个汉字，完全兼容GB2312标准，同时支持繁体汉字以及日韩汉字等。<br />
<strong><span style="color: #0000ff;">GB18030</span></strong>：最新的中文码表。收录汉字70244个，采用多字节编码，每个字可以由1个、2个或4个字节组成。支持中国国内少数民族的文字，同时支持繁体汉字以及日韩汉字等。</p>
<h2>6.Unicode字符集</h2>
<p>Unicode编码系统为表达任意语言的任意字符而设计，是业界的一种标准，也称为统一码、标准万国码。它最多使用4个字节的数字来表达每个字母、符号，或者文字。有三种编码方案，UTF-8、UTF-16和UTF-32。最为常用的UTF-8编码。<br />
<span style="color: #0000ff;"><strong>UTF-8编码</strong></span>：可以用来表示Unicode标准中任何字符，它是电子邮件、网页及其他存储或传送文字的应用中，优先采用的编码。互联网工程工作小组（IETF）要求所有互联网协议都必须支持UTF-8编码。所以，我们开发Web应用，也要使用UTF-8编码。它使用一至四个字节为每个字符编码，编码规则：</p>
<ul>
<li>128个US-ASCII字符，只需一个字节编码。</li>
<li>拉丁文等字符，需要二个字节编码。</li>
<li>大部分常用字（含中文），使用三个字节编码。</li>
<li>其他极少使用的Unicode辅助字符，使用四字节编码。</li>
</ul>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/830.html">常用的字符集和字符编码</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/830.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java中的常见集合特性与数据结构关系、集合选用原则</title>
		<link>http://www.ywbk.cc/824.html</link>
		<comments>http://www.ywbk.cc/824.html#comments</comments>
		<pubDate>Sun, 15 Dec 2019 06:59:41 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bk.com/?p=824</guid>
		<description><![CDATA[1.集合特性与数据结构对照表 接口 实现类 数据结构 是否有序 元素能否重复 特点 备注 Collection [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>1.集合特性与数据结构对照表</h2>
<table width="887" border="0" cellspacing="0" cellpadding="0">
<colgroup>
<col width="94" />
<col width="56" />
<col width="111" />
<col width="138" />
<col width="68" />
<col width="97" />
<col width="255" />
<col width="68" /> </colgroup>
<tbody>
<tr>
<td colspan="2" width="150" height="18">接口</td>
<td width="111">实现类</td>
<td width="138">数据结构</td>
<td width="68">是否有序</td>
<td width="97">元素能否重复</td>
<td width="255">特点</td>
<td width="68">备注</td>
</tr>
<tr>
<td rowspan="8" width="94" height="346">Collection<br />
单列集合</td>
<td rowspan="3">List</td>
<td>ArrayList</td>
<td>数组Array</td>
<td>有序</td>
<td>可重复</td>
<td width="255">查询快,增删慢,线程不安全,效率高</td>
<td></td>
</tr>
<tr>
<td>Vector</td>
<td>数组Array</td>
<td>有序</td>
<td>可重复</td>
<td width="255">查询快,增删慢,线程安全,效率低</td>
<td>已淘汰</td>
</tr>
<tr>
<td>LinkedList</td>
<td>链表linked</td>
<td>有序</td>
<td>可重复</td>
<td width="255">查询慢,增删快,线程不安全,效率高<br />
还实现了Deque接口,可做队列使用</td>
<td></td>
</tr>
<tr>
<td width="56">Queue<br />
队列</td>
<td>ArrayDeque</td>
<td width="138">基于数组的双端队列,也可用于模拟栈</td>
<td>有序</td>
<td>可重复</td>
<td width="255">可以代替stack实现栈结构</td>
<td></td>
</tr>
<tr>
<td rowspan="4">Set</td>
<td>HashSet</td>
<td>哈希表hash</td>
<td>无序</td>
<td>不可重复</td>
<td width="255">哈希表依赖两个方法<br />
hashCode()、equals()<br />
效率高</td>
<td rowspan="4" width="68">线程不安全</td>
</tr>
<tr>
<td>LinkedHashSet</td>
<td>链表+哈希表</td>
<td>有序</td>
<td>不可重复</td>
<td width="255">链表保证有序,哈希表保证唯一<br />
效率稍低</td>
</tr>
<tr>
<td>TreeSet</td>
<td width="138">二叉树BinaryTree<br />
之红黑树</td>
<td>有序</td>
<td>不可重复</td>
<td width="255">根据比较的返回值保证唯一<br />
有两种排序方式保证有序：<br />
自然排序(实现Comparable接口)<br />
比较器排序(使用Comparator对象)<br />
效率低</td>
</tr>
<tr>
<td>EnumSet</td>
<td width="138">专为枚举类设计</td>
<td>有序</td>
<td>不可重复</td>
<td width="255">根据enum类内的定义顺序排序<br />
set集合中效率最高</td>
</tr>
<tr>
<td rowspan="4" colspan="2" width="150" height="150">Map<br />
双列集合</td>
<td>HashMap</td>
<td>哈希表hash</td>
<td>无序</td>
<td>key不可重复</td>
<td>线程不安全，效率高</td>
<td></td>
</tr>
<tr>
<td>Hashtable</td>
<td>哈希表hash</td>
<td>无序</td>
<td>key不可重复</td>
<td>线程安全，效率低</td>
<td>已淘汰</td>
</tr>
<tr>
<td>LinkedHashMap</td>
<td>链表+哈希表</td>
<td>有序</td>
<td>key不可重复</td>
<td width="255">链表保证元素有序<br />
哈希表保证元素唯一<br />
效率低</td>
<td></td>
</tr>
<tr>
<td>TreeMap</td>
<td width="138">二叉树BinaryTree<br />
之红黑树</td>
<td>有序</td>
<td>key不可重复</td>
<td width="255">根据比较的返回值保证唯一<br />
使用排序方式保证有序<br />
效率稍低</td>
<td width="68"></td>
</tr>
</tbody>
</table>
<p>对于线程不安全的集合，应该通过Collections工具类对应的synchronizedXxx方法将其包装成线程安全的集合类。</p>
<h2>2.关于集合选用原则</h2>
<p><img alt="" src="http://img.05bk.com/collection.png" /></p>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/824.html">Java中的常见集合特性与数据结构关系、集合选用原则</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/824.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为什么一个汉字查出来的Unicode是2个字节(16位)，但UTF-8转出来却是3个字节(24位)？</title>
		<link>http://www.ywbk.cc/819.html</link>
		<comments>http://www.ywbk.cc/819.html#comments</comments>
		<pubDate>Sat, 14 Dec 2019 11:40:14 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bk.com/?p=819</guid>
		<description><![CDATA[今天在使用java的String类的byte[] getBytes()方法，发现汉字转出来的数组是三个字节，都 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>今天在使用java的String类的byte[] getBytes()方法，发现汉字转出来的数组是三个字节，都知道UTF-8的中文字符占三个字节，这个没有问题，可是使用Unicode编码转换查出来的汉字只有两个字节，这底层又是如何对应存储的呢？我仔细研究了下，专门记录于此，以备后用：</p>
<p>首先计算机底层是使用二进制存储的，一个二进制叫做位或比特(bit)，8位(bit)叫一个字节(byte)，一个字符占多少字节取决于编码方式，例如查到&#8221;李&#8221;对应的Unicode十六进制编码是：\u674e。通过计算器换算成二进制：</p>
<pre class="prettyprint linenums">0110  0111  0100  1110</pre>
<p>至此，可以得出的结论是汉字使用Unicode字符集存储应该占两个字节(16位)。</p>
<p>接下来，使用java将其转换成字节数组形式：</p>
<pre class="prettyprint linenums">byte[] bytes = "李".getBytes("utf-8");
for (byte b : bytes) {
    System.out.println(b);
}
输出：
-26
-99
-114</pre>
<p>通过计算器将-26、-99、-114这个三个数字转成二进制：</p>
<pre class="prettyprint linenums">1110  0110  1001  1101  1000  1110</pre>
<p>猛一看，发现这串二进制数字和上面的Unicode对应的二进制数字没有任何相似之处啊，明明网上说法是“UTF-8是Unicode的一种实现方式”，但是这明显没有半毛钱关系啊，我靠，难道网上这些人在胡说，还是我的打开方式不对？？</p>
<p>心想，你两不是没关系吗?那我就把你们硬两放在一起，让你们发生点关系。。。</p>
<pre class="prettyprint linenums">11100110    10011101    10001110
    0110      011101      001110</pre>
<p>这么一分割，貌似还真有点关系了，上网找到如下资料：</p>
<pre class="prettyprint linenums">Unicode符号范围           |  UTF-8编码方式
(十六进制)                      | （二进制）
—————————————————————–————————————–
0000 0000-0000 007F   | 0xxxxxxx                 #UTF-8规定此范围字符占1字节，首位定死为0。
0000 0080-0000 07FF   | 110xxxxx 10xxxxxx  #UTF-8规定占2字节，高位字节前3位为110，低位前2位为10。
0000 0800-0000 FFFF   | 1110xxxx 10xxxxxx 10xxxxxx  #占3字节，高位字节前3位为1110，后面低位前2位一律为10。
0001 0000-0010 FFFF   | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx #占4字节，高位字节前3位为11110，后面前2位一律为10。</pre>
<p>这下再想想“utf-8是一种变长字节编码方式”这句话，说的是这个意思啊。</p>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/819.html">为什么一个汉字查出来的Unicode是2个字节(16位)，但UTF-8转出来却是3个字节(24位)？</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/819.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDEA报错@Override is not allowed when implementing interface method 解决方法</title>
		<link>http://www.ywbk.cc/815.html</link>
		<comments>http://www.ywbk.cc/815.html#comments</comments>
		<pubDate>Wed, 11 Dec 2019 04:20:51 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bk.com/?p=815</guid>
		<description><![CDATA[原因：idea中默认的Language level 使用的是5版本，jdk5是不支持在重写的接口方法上加@Ov [&#8230;]]]></description>
				<content:encoded><![CDATA[<blockquote><p>原因：idea中默认的Language level 使用的是5版本，jdk5是不支持在重写的接口方法上加@Override注解的。</p></blockquote>
<h2>方法一(修改项目配置)</h2>
<p>点击idea左上角File–&gt;Project Stucture–&gt;Moudules，将所有模块的Sources的Language level修改到5以上，但是这有个问题，项目自动更新后仍然会恢复到默认值。所以最好使用方法二。</p>
<h2>方法二(修改pom文件)</h2>
<p>如果项目使用了maven，可以在在pom中增加：</p>
<pre>&lt;properties&gt;
    &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
    &lt;maven.compiler.source&gt;1.8&lt;/maven.compiler.source&gt;
    &lt;maven.compiler.target&gt;1.8&lt;/maven.compiler.target&gt;
&lt;/properties&gt;</pre>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/815.html">IDEA报错@Override is not allowed when implementing interface method 解决方法</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/815.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSM框架整合后，mybatis使用log4j但是控制台不打印SQL执行语句解决办法</title>
		<link>http://www.ywbk.cc/812.html</link>
		<comments>http://www.ywbk.cc/812.html#comments</comments>
		<pubDate>Wed, 11 Dec 2019 03:14:19 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bk.com/?p=812</guid>
		<description><![CDATA[首先解决办法我是从这里看到的：https://mybatis.org/mybatis-3/zh/logging [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>首先解决办法我是从这里看到的：<a href="https://mybatis.org/mybatis-3/zh/logging.html" target="_blank">https://mybatis.org/mybatis-3/zh/logging.html</a></p>
<blockquote><p>不少应用服务器（如 Tomcat 和 WebShpere）的类路径中已经包含 Commons Logging，所以在这种配置环境下的 MyBatis 会把它作为日志工具，记住这点非常重要。这将意味着，在诸如 WebSphere 的环境中，它提供了 Commons Logging 的私有实现，你的 Log4J 配置将被忽略。MyBatis 将你的 Log4J 配置忽略掉是相当令人郁闷的（事实上，正是因为在这种配置环境下，MyBatis 才会选择使用 Commons Logging 而不是 Log4J）。如果你的应用部署在一个类路径已经包含 Commons Logging 的环境中，而你又想使用其它日志工具，你可以通过在 MyBatis 配置文件 mybatis-config.xml 里面添加一项 setting 来选择别的日志工具:</p></blockquote>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd"&gt;
&lt;configuration&gt;
    &lt;settings&gt;
        &lt;setting name="logImpl" value="LOG4J"/&gt;
    &lt;/settings&gt;
&lt;/configuration&gt;</pre>
<p>然后在spring核心配置文件中的配置：</p>
<pre>&lt;!--MyBatis的SqlSessionFactory--&gt;
&lt;bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"&gt;
    &lt;property name="dataSource" ref="dataSource"/&gt;
    &lt;!--读取mybatis的配置文件--&gt;
    &lt;property name="configLocation" value="classpath:mybaits-config.xml"/&gt;
&lt;/bean&gt;</pre>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/812.html">SSM框架整合后，mybatis使用log4j但是控制台不打印SQL执行语句解决办法</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/812.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2文件上传超过默认大小限制2M，但无法跳转至指定input页面问题的解决办法</title>
		<link>http://www.ywbk.cc/807.html</link>
		<comments>http://www.ywbk.cc/807.html#comments</comments>
		<pubDate>Wed, 20 Nov 2019 05:34:41 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bk.com/?p=807</guid>
		<description><![CDATA[1.背景 最近使用Struts2写了个文件上传，测试时候明明超过大小限制，也在struts.xml中配置了页面 [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>1.背景</h2>
<p>最近使用Struts2写了个文件上传，测试时候明明超过大小限制，也在struts.xml中配置了页面，但是就是死活无法跳转至指定input页面问题。浏览器提示连接已重置，折腾了一上午，翻阅了两本参考书，查看了培训机构的视频，一步一步照着仔仔细细的做，还是不行，甚至把人家的源码拷贝过来在我的机子上跑，还是不行，把IDEA，tomcat，jdk卸载了重新装……能折腾的都折腾了，还是不行，甚至开始怀疑人生了，哎，上网搜了下，遇到这问题的人还不少，终于找到了根本原因，恍然大悟，特此记录，以此为戒。</p>
<h2>2.根本原因</h2>
<p>就是tomcat也有默认上传限制，叫maxSwallowSize，默认大小也是2M，如果找超过2M，tomcat会判定是个失败的上传，就会将浏览器请求重置，更不会把这个request再传送到struts2，所以就会出现上述现象。</p>
<h2>3.解决办法</h2>
<p>修改tomcat的配置文件server.xml(在tomcat目录下的conf里)，找到并修改如下内容：</p>
<pre class="prettyprint linenums">&lt;Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxSwallowSize="-1" /&gt;</pre>
<p>maxSwallowSize设置值规则：如果没有指定则为默认值，小于0表示无限制，大于0表示限制为多少字节。</p>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/807.html">Struts2文件上传超过默认大小限制2M，但无法跳转至指定input页面问题的解决办法</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/807.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java获取各种绝对路径的8种方法</title>
		<link>http://www.ywbk.cc/801.html</link>
		<comments>http://www.ywbk.cc/801.html#comments</comments>
		<pubDate>Fri, 15 Nov 2019 10:51:35 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bk.com/?p=801</guid>
		<description><![CDATA[示例代码如下： public class GetPath extends HttpServlet { @Ove [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>示例代码如下：</p>
<pre class="prettyprint linenums" >
public class GetPath extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //第1种：获取服务器二进制命令路径
        String path1 = new File("").getCanonicalPath();
        System.out.println("path1:" + path1);

        //第2种：获取服务器二进制命令路径
        String path2 = System.getProperty("user.dir");
        System.out.println("path2:" + path2);

        //第3种：获取项目的根目录
        String path3 = getServletContext().getRealPath("");
        System.out.println("path3:" + path3);

        //第4种：获取项目的根目录,但Servlet2.1以后已过期
        String path4 = request.getRealPath("");
        System.out.println("path4:" + path4);

        //第5种：获取类加载的根路径
        String path5 = Thread.currentThread().getContextClassLoader().getResource("").getPath();
        System.out.println("path5:" + path5);

        //第6种：获取类加载的根路径
        String path6 = this.getClass().getClassLoader().getResource("").getPath();
        System.out.println("path6:" + path6);

        //第7种：获取类加载的根路径
        String path7 = this.getClass().getResource("/").getPath();
        System.out.println("path7:" + path7);

        //第8种：获取当前类的路径
        String path8 = this.getClass().getResource("").getPath();
        System.out.println("path8:" + path8);
    }
}</pre>
<p>运行结果：</p>
<pre class="prettyprint linenums">path1:D:\java\apache-tomcat-8.5.37\bin
path2:D:\java\apache-tomcat-8.5.37\bin
path3:D:\ROOT\
path4:D:\ROOT\
path5:/D:/ROOT/WEB-INF/classes/
path6:/D:/ROOT/WEB-INF/classes/
path7:/D:/ROOT/WEB-INF/classes/
path8:/D:/ROOT/WEB-INF/classes/com/gqzzw/</pre>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/801.html">Java获取各种绝对路径的8种方法</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/801.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JDBC的四类驱动程序(JDBC-ODBC桥、本地API、JDBC网络、本地协议)</title>
		<link>http://www.ywbk.cc/797.html</link>
		<comments>http://www.ywbk.cc/797.html#comments</comments>
		<pubDate>Tue, 12 Nov 2019 04:38:12 +0000</pubDate>
		<dc:creator><![CDATA[sxdgy]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.05bk.com/?p=797</guid>
		<description><![CDATA[1.ODBC 早期的数据库开发领域没有通用的应用程序编程接口，开发人员在使用不同数据库产品时，必须学习和使用厂 [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>1.ODBC</h2>
<p>早期的数据库开发领域没有通用的应用程序编程接口，开发人员在使用不同数据库产品时，必须学习和使用厂商专用API。针对业界对通用编程接口的需求，微软推出了ODBC(Open Database Connectivity)方案，并获得厂商和开发人员的认可。ODBC建立了一组规范，并提供了对数据库访问的标准API，后来被X/OPEN和ISO/IEC采纳，作为SQL标准的一部分。</p>
<h2>2.JDBC</h2>
<p>SUN参考了ODBC，为JAVA设计了专用的数据库连接规范JDBC(JAVA Database Connectivity)。JDBC期望的目标是让Java开发人员在编写数据库应用程序时，可以有统一的接口，无须依赖特定数据库API，达到“ 一次开发，适用所有数据库”。</p>
<h2>3.JDBC驱动程序</h2>
<p>然后数据库厂商去写代码来实现JDBC中的接口，再把这些实现类打成jar包，称之为“JDBC驱动”。驱动程序按工作方式分为下面四种类型。</p>
<h2>4.JDBC-ODBC Bridge Driver</h2>
<p>SUN发布JDBC规范时，市场上可用的JDBC驱动程序并不多，但是已经逐渐成熟的ODBC方案使得通过ODBC驱动程序几乎可以连接所有类型的数据源。所以SUN发布了JDBC-ODBC的桥接驱动，利用现成的ODBC架构，将JDBC调用转换为ODBC调用，避免了JDBC无驱动可用的尴尬。不过，由于桥接的限制，并非所有功能都能直接转换并正常调用，而且多层调用转换对速度也有不小的影响，除非没有其他解决方案，否则不应采用桥接架构。<br />
<img alt="" src="http://img.05bk.com/JDBC-ODBC%20Bridge%20Driver.jpg" /></p>
<h2>5.Native API Driver</h2>
<p>这类驱动程序会直接调用数据库提供的原生链接库或客户端，因为没有中间过程，访问速度通常表现良好。但是驱动程序与数据库和平台绑定，无法达到JDBC跨平台的基本目的。在JDBC规范中也是不被推荐的选择。<br />
<img alt="" src="http://img.05bk.com/Native API Driver.jpg" /></p>
<h2>6.JDBC-Net Driver</h2>
<p>这类驱动程序会将JDBC调用转换为独立于数据库的协议，然后再通过特定的中间组件或服务器转换为数据库通信协议，主要目的是为了获得更好的架构灵活性。例如更换数据库时可通过更换中间组件实现。由非数据库厂商开发的Type 3驱动通常还提供额外的功能，例如高级安全特性等，但通过中间服务器转换也会对速度有一定影响。JDBC领域这种类型驱动并不常见，而微软的ADO.NET是这种架构的典型。<br />
<img alt="" src="http://img.05bk.com/JDBC-Net Driver.jpg" /></p>
<h2>7.Native Protocol Driver</h2>
<p>这是最常见的驱动程序类型，我们开发中使用的驱动jar包基本都属于此类，通常由数据库厂商直接提供，例如mysql-connector-java，驱动程序把JDBC调用转换为数据库特定的网络通信协议。因为使用网络通信，驱动程序可以纯Java实现，支持跨平台部署，性能也较好。<br />
<img alt="" src="http://img.05bk.com/Native Protocol Driver.jpg" /></p>
<p>转载请注明：<a href="http://www.ywbk.cc">运维博客</a> &raquo; <a href="http://www.ywbk.cc/797.html">JDBC的四类驱动程序(JDBC-ODBC桥、本地API、JDBC网络、本地协议)</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.ywbk.cc/797.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
