xml 编码

xml 编码 前同天和同事在讨论xml里的encoding属性和文件格式的关系,终于彻底的弄清楚了。 以前理解的是,xml里的encoding里定义必须与文件格式相匹配。即有这样的xml Introduction,那么,文件格式必须是一个utf-8文件,即文件的前两个字节要是一个utf-8头FF FE。 (后来才弄清楚,FF FE不是utf-8的BOM。。就是说我的错误理解持续了相当长一段时间。。) 下面把讨论的几个阶段大概说一下。 刚开始讨论时,我很肯定的告诉他,encoding的值必须和文件格式 (即BOM,BOM就是 byte order mark的缩写) 相匹配,不然在解析XML时,可能会出现 (比如文档含有某个UNICODE字符,而encoding或BOM指定的格式不匹配,就会出错,当时我是这样的意思) ,然后他又告诉我,好像不是这样,我用DELPHI创建的XML文件,没有BOM,XML里面有中文内容,encoding里指定的是UTF-8,用IE可以正常打开啊。 他在发现他所创建的XML文件没有BOM时,有个有趣的地方,就是用UE打开这类含有UNICODE字符的文件时,UE会自动在文件前面加上FF FE,使得文件可以正常显示,所以原本没有BOM的文件,在UE下的十六进制下浏览,会看到多了个BOM,这个功能可以在UE的OPTIONS里去掉的,想知道的可以自己去找找。 然后我有点大头了,怎么会这样呢,然后想啊想,突然他发了一条信息过来,内容如下: W3C定义了三条XML解析器如何正确读取XML文件的编码的规则: 1,如果文挡有BOM(字节顺序标记,一般来说,如果保存为unicode格式,则包含BOM,ANSI则无),就定义了文件编码 2,如果没有BOM,就查看XML声明的编码属性 3,如果上述两个都没有,就假定XML文挡采用UTF-8编码 有了这三条规则,那这个规则就清楚多了。 首先,XML解析器根据文件的BOM来解析文件;如果没找到BOM,由用XML里的encoding属性指定的编码;如果xml里encoding没指定的话,就默认用utf-8来解析文档。然后又可以推出,BOM和ENCODING都有的话,则以BOM指定的为准。 啊!突然觉得有标准文档多好!虽然是那么的理所当然。 至此,终于把xml里的encoding和文件格式的关系弄懂了。虽然这篇记录只有那几百个字内容,但是我们当时在讨论的时候,总时间差不多花了2个小时。 http://blog.csdn.net/fzy112001/article/details/4183139 http://www.cnblogs.com/azol/articles/1137035.html

2012-06-10 · 1 min · 30 words · -

welcome-file-list

welcome-file-list 当用户在浏览器中输入的URL不包含某个servlet名或JSP页面时,welcome-file-list元素可指定显示的默认文件。 <!ELEMENT welcome-file-list (welcome-file+)> <!ELEMENT welcome-file (#PCDATA)> 举个例子说明,假设用户在浏览器的地址框中输入http://www.mycompany.com/appName/等地址。如果在Web应用的部署描述符中指定welcome-file-list元素,用户就会看到一个权限错误消息,或者是应用目录下的文件和目录列表。如果定义了welcome-file-list元素,用户就能看到由该元素指定的具体文件。 welcome-file子元素用于指定默认文件的名称。welcome-file-list元素可以包含一个或多个welcome-file子元素。如果在第一个welcome-file元素中没有找到指定的文件,Web容器就会尝试显示第二个,以此类推。 下面是一个包含welcome-file-list元素的部署描述符。该元素包含两个welcome-file元素: 第一个指定应用目录中的main.html文件,第二个定义jsp目录下的welcom.jsp文件,jsp目录也在应用目录下。 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <welcome-file-list> <welcome-file>main.html</welcome-file> <welcome-file>jsp/welcome.jsp</welcome-file> </welcome-file-list> </web-app> 如果用户键入的URL不包含servlet名称、JSP页面或其他资源,则不会在应用目录中找到main.html文件,这时就会显示jsp目录下的welcome.jsp文件。

2012-06-10 · 1 min · 32 words · -

web.xml – mime-mapping

web.xml – mime-mapping 关联文件与MIME类型 服务器一般都具有一种让Web站点管理员将文件扩展名与媒体相关联的方法。例如,将会自动给予名为mom.jpg的文件一个image/jpeg的MIME 类型。但是,假如你的Web应用具有几个不寻常的文件,你希望保证它们在发送到客户机时分配为某种MIME类型。mime-mapping元素 (具有 extension和mime-type子元素) 可提供这种保证。例如,下面的代码指示服务器将application/x-fubar的MIME类型分配给所有以.foo结尾的文件。 foo application/x-fubar 或许,你的Web应用希望重载 (override) 标准的映射。例如,下面的代码将告诉服务器在发送到客户机时指定.ps文件作为纯文本 (text/plain) 而不是作为PostScript (application/postscript) 。 ps application/postscript TOMCAT在默认情况下下载.rar的文件是把文件当作text打开,以至于IE打开RAR文件为乱码,如果遇到这种情况时不必认为是浏览器的问题,大多数浏览器应该不会死皮赖脸地把二进制文件当作文本打开,一般都是服务器给什么浏览器就开什么.解决方法: ...

2012-06-10 · 1 min · 77 words · -

XML

XML XML即可扩展标记语言 (eXtensible Markup Language) ,是被设计用来描述、存储、传送及交换数据。XML是当前处理结构化文档信息的有力工具,标记是指计算机所能理解的信息符号 XML是什么?XML即可扩展标记语言 (eXtensible Markup Language) ,是被设计用来描述、存储、传送及交换数据。XML是当前处理结构化文档信息的有力工具,标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。简单说,XML就是一种数据的描述语言,你可以把它理解为微型数据库,对了!它就是数据库。 作为新手的你,可能还无法理解它,没有关系,理论都是死的,不妨从应用中了解它!如果你是一个开发人员或准备成为一个开发人员,必然会有恍然大悟的一刻。 下面了解一下XML版本 1998年2月10日,XML 1.0作为一项 W3C推荐被发布。 2000年10月6日,XML 1.0(SE)作为一项 W3C 推荐被发布。第二版仅仅是在合并第一版的勘误表的基础上进行的修正 (漏洞修复) 。 2001年12月13日,XML 1.1作为一份工作草案被发布,并作为一项候选推荐发布于2002年10月15日。XML 1.1 允许在名称中使用几乎所有的 Unicode 字符。 可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。 XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如: 数据索引、排序、查找、相关一致性等,XML仅仅是存储数据。事实上XML与其他数据表现形式最大的不同是: 他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。 XML与HTML的设计区别是: XML是用来存储数据的,其焦点是数据的内容。而HTML 被设计用来显示数据,其焦点是数据的外观。 XML和HTML语法区别: HTML的标记不是所有的都需要成对出现,XML则要求所有的标记必须成对出现;HTML标记不区分大小写,XML则相反。 结合 XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows,Mac OS,Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。 友好 为了使得SGML显得用户友好,XML重新定义了SGML的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得SGML在设计网站时显得复杂化。XML保留了SGML的结构化功能,这样就使得网站设计者可以定义自己的文档类型,XML同时也推出一种新型文档类型,使得开发者也可以不必定义文档类型。 简明语法 SGML常用来定义针对HTML的文档类型定义 (DTD) ,同时它也常用于编写XML的DTD。SGML的问题就在于,它允许出现一些奇怪的语法,这让创建HTML的解析器成为一个大难题: 1 某些起始标签不允许出现结束标签,例如HTML中<img>标签。包含了结束标签就会出现错误。 2 某些起始标签可以选择性出现结束标签或者隐含了结束标签。 3 某些起始标签要求必须出现结束标签,例如HTML中<script>标签。 4 标签可以以任何顺序嵌套。即使结束标签不按照起始标签的逆序出现也是允许的,例如,This is a sample string是正确的。 5 某些特性要求必须包含值,例如<img src="picture.jpg">中的src特性。 6 某些特性不要求一定有值,例如中的nowrap特性。 7 定义特性的两边有没有加上双引号都是可以的,所以<img src="picture.jpg">和<img src=picture.jpg>都是允许的。 这些问题使建立一个SGML语言的解析器变成了一项艰巨的任务。判断何时应用以上规则的困难导致了SGML语言的定义一直停滞不前。以这些问题作为出发点,XML逐渐步入我们的视野。 XML去掉了之前令许多开发人员头疼的SGML的随意语法。在XML中,采用了如下的语法: 1 任何的起始标签都必须有一个结束标签。 2 可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线 (/) ,例如<tag/ >。XML解析器会将其翻译成<tag></tag>。 3 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如this is a samplestring。这好比是将起始和结束标签看作是数学中的左右括号: 在没有关闭所有的内部括号之前,是不能关闭外面的括号的。 4 所有的特性都必须有值。 5 所有的特性都必须在值的周围加上双引号。 这些规则使得开发一个XML解析器要简便得多,而且也除去了解析SGML中花在判断何时何地应用那些奇怪语法规则上的工作。仅仅在XML出现后的前六年就衍生出多种不同的语言,包括MathML、SVG、RDF、RSS、SOAP、XSLT、XSL-FO,而同时也将HTML改进为XHTML。 XHTML Validator http://validator.w3.org/

2012-06-10 · 1 min · 102 words · -

web.xml

web.xml web.xml template servlet 2.5 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> web.xml 3.0: http://www.wiloon.com/?p=3484 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="false"> <display-name>Servlet 3.x Demo</display-name> <description>A demo for servlet 3.x</description> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>com.wiloon.test.servlet.HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/servlet/HelloWorld</url-pattern> </servlet-mapping> </web-app> web.xml是传统的部署描述文件。 servlet 3.x 中web.xml 变为可选配置. ...

2012-06-10 · 6 min · 1200 words · -

/dev/zero 和 /dev/null

/dev/zero 和 /dev/null /dev/null 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据 (但报告写入操作成功) ,读取它则会立即得到一个EOF[1]。 在程序员行话,尤其是Unix行话中,/dev/null被称为bit bucket[2]或者黑洞。使用空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。这些操作通常由重定向完成。 /dev/null是一个特殊_文件_,而不是目录,因此不能使用Unix命令mv 将文件移动到其中。使用rm命令才是Unix中删除文件的正确方法。 本概念大致相当于CP/M,DOS和Microsoft Windows中的NUL:或单纯的NUL设备,Windows NT及其后续系统中的DeviceNull或NUL,Amiga中的NIL:,以及OpenVMS中的NL:。在基于.NET的Windows PowerShell中,相同的概念为$null。 /dev/zero /dev/zero,是一个输入设备,你可你用它来初始化文件。 /dev/zero–该设备无穷尽地提供0(是ASCII 0 就是NULL),可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入NULL。 使用/dev/zero 像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流 (二进制的零流,而不是ASCII型的) . 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件. 关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环回设备 (loopback device) 或"安全地" 删除一个文件 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! /dev/null–它是空设备,也称为位桶 (bit bucket) 。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。 使用/dev/null 把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用. 禁止标准输出. cat $filename >/dev/null -文件内容丢失,而不会输出到标准输出. 禁止标准错误 rm $badname 2>/dev/null -这样错误信息[标准错误]就被丢到太平洋去了. 禁止标准输出和标准错误的输出. 1 cat $filename 2>/dev/null >/dev/null -如果"$filename"不存在,将不会有任何错误信息提示. 如果"$filename"存在, 文件的内容不会打印到标准输出. -因此Therefore, 上面的代码根本不会输出任何信息. -当只想测试命令的退出码而不想有任何输出时非常有用。 Deleting contents of a file, but preserving the file itself, with all attendant permissions : cat /dev/null > /var/log/messages -> /var/log/messages 有同样的效果, 但不会产生新的进程. cat /dev/null > /var/log/wtmp - 自动清空日志文件的内容 (适合处理由Web站点发送的讨厌的"cookies")

2012-06-08 · 1 min · 102 words · -

Resin

Resin Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。

2012-06-07 · 1 min · 3 words · -

监控系统 Pull, Push

监控系统 Pull, Push https://developer.aliyun.com/article/786418

2012-06-07 · 1 min · 4 words · -

TFS

TFS TFS 2010 是微软的软件开发生命周期管理(ALM)套件的核心服务器端,将MTLM与它进行紧密绑定更进一步凸显了微软软件生命周期管理软件的战略,并突出了Visual Studio 2010 Ultimate更多的敏捷特性。它不再只是面向开发人员或者是测试人员角色,而是要提供一个平台来有效协调和支持开发过程中各个角色,并使他们能够彼此紧密联系进行协作。

2012-06-07 · 1 min · 7 words · -

JAVA 调试, JPDA, Java Debug

JAVA 调试, JPDA, Java Debug 远程调试 远程调试分为主动连接调试,和被动连接调试。这里以Eclipse为例。 主动连接调试:服务端配置监控端口,本地IDE连接远程监听端口进行调试,一般调试问题用这种方式。 被动连接调试:本地IDE监听某端口,等待远程连接本地端口。一般用于远程服务启动不了,启动时连接到本地调试分析。 主动连接调试 首先需要远程服务配置启动脚本: JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" 如果是启动jar包,指令: java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -jar test.jar JAVA 自身支持调试功能,并提供了一个简单的调试工具 - JDB, 类似于功能强大的 GDB,JDB 也是一个字符界面的调试环境,并支持设置断点,支持线程线级的调试。 JAVA的调试方法如下: 首先设置JVM,并设置参数,使之工作在 DEBUG 模式下,加入参数: -Xdebug -Xrunjdwp,transport=dt_socket,server=y,address=5432,suspend=n,onthrow=java.io.IOException,launch=/sbin/echo -Xdebug: 通知 JVM 工作在 DEBUG 模式下 -Xrunjdwp 是通知 JVM 使用 (java debug wire protocol) 来运行调试环境。该参数提供了一系列的调试选项: transport 指定调试数据的传送方式,dt_socket 是指用 SOCKET 模式,另有 dt_shmem 指用共享内存方式,其中,dt_shmem 只适用于 Windows 平台。 server 参数是指是否支持在 server 模式的 JVM 中. onthrow 当产生该类型的 Exception 时,JVM 就会中断下来,进行调式。(可选参数) launch 当JVM被中断下来时,执行的可执行程序。(可选参数) suspend: y/n 指明,是否在调试客户端建立起来后,再执行JVM。 onuncaught (=y或n) 指明出现 uncaught exception 后, 是否中断JVM的执行. address 端口 启动调试工具。 最简单的调试工具就是上面提到的JDB,以上述调试用JVM为例,可以用下面的命运行启动JDB: ...

2012-06-07 · 8 min · 1583 words · -

ICEAuthority

ICEAuthority http://serverfault.com/questions/119580/what-is-iceauthority-file-in-opensuse-11-2 Here is a good paper on what ICE is, and what it does. Basically ICE is a inter process communication protocol, with authentication, protocol negotiation and potentially multiplexing built in. It allows two X clients to talk directly to each other, for example, a video player program could potentially talk to a jukebox program to update each other. As Richard Holloway says, the .ICEAuthority file is for authentication. It contains a number of random cookies. If two programs have the same cookie, then they’re allowed to talk to each other. In practice this either means that they’re reading the same .ICEAuthority file, or the cookies have been added. ...

2012-06-06 · 1 min · 141 words · -

Install msysgit

Install msysgit Choose the Run Git from the Windows Command Prompt option Choose the Use (Tortoise)Plink option Choose the Checkout as-is, commit as-is option

2012-06-04 · 1 min · 24 words · -

MIME

MIME 媒体类型, 用途互联网邮件扩展 (MIME,Multipurpose Internet Mail Extensions) 是一个互联网标准, 它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。HTTP协议中也使用了MIME的框架。MIME是通过标准化电子邮件报文的头部的附加域 (fields) 而实现的;这些头部的附加域,描述新的报文类型的内容和组织形式。 内容类型 (Content-Type) ,这个头部领域用于指定消息的类型。一般以下面的形式出现。 type有下面的形式。 Text: 用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的; Multipart: 用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据; Application: 用于传输应用程序数据或者二进制数据; Message: 用于包装一个E-mail消息; Image: 用于传输静态图片数据; Audio: 用于传输音频或者音声数据; Video: 用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。 subtype 用于指定 type 的详细形式。 text/plain (纯文本) text/html (HTML文档) application/xhtml+xml (XHTML文档) image/gif (GIF图像) image/jpeg (JPEG图像) 【PHP中为: image/pjpeg】 image/png (PNG图像) 【PHP中为: image/x-png】 video/mpeg (MPEG动画) application/octet-stream (任意的二进制数据) application/pdf (PDF文档) application/msword (Microsoft Word文件) message/rfc822 (RFC 822形式) multipart/alternative (HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示) application/x-www-form-urlencoded (使用HTTP的POST方法提交的表单) multipart/form-data (同上,但主要用于表单提交时伴随文件上传的场合) parameter可以用来指定附加的信息,更多情况下是用于指定text/plain和text/htm等的文字编码方式的charset参数。MIME根据type制定了默认的subtype,当客户端不能确定消息的subtype的情况下,消息被看作默认的subtype进行处理。Text默认是text/plain,Application默认是application/octet-stream而Multipart默认情况下被看作multipart/mixed。 内容传输编码 内容传输编码 (Content-Transfer-Encoding) ,这个区域使指定ASCII以外的字符编码方式成为可能。形式如下: ...

2012-06-03 · 2 min · 247 words · -

codeswarm

codeswarm codeswarm 是个很有意思的工具,它把一个软件开发项目中开发者往代码管理工具(git/hg/svn等)提交代码的历史记录用视频的方式表现出来。

2012-06-03 · 1 min · 3 words · -

知识共享, Creative Commons, CC

知识共享, Creative Commons, CC Creative Commons,简称CC,中国大陆正式名称为知识共享,台湾正式名称为创用CC。 是一个非营利组织,也是一种创作的授权方式。此组织的主要宗旨是增加创意作品的流通可及性,作为其他人据以创作及共享的基础,并寻找适当的法律以确保上述理念。 AA:署名 BY AB:署名-非商业性使用 BY-NC BA:署名-禁止演绎/非衍生 BY-ND BB:署名-非商业性使用-禁止演绎 BY-NC-ND CA:署名-相同方式共享 BY-SA CB:署名-非商业性使用-相同方式共享 BY-NC-SA https://zhuanlan.zhihu.com/p/20641764 禁止演绎/非衍生(ND) 如果你对本创作进行了重混、转换、依据本创作进行再创作等行为,你不得再次公开散布经过修改的创作。 意即,你只能全文转载或部分摘抄本创作中的内容,而不允许作出任何改动。 https://creativecommons.org https://creativecommons.org/licenses/by-nc/4.0/legalcode.zh-Hans

2012-06-03 · 1 min · 25 words · -

从 HTTP GET 和 POST 的区别说起

从 HTTP GET 和 POST 的区别说起 HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST. 面试时得到的回答大多是: POST 是安全的,因为被提交的数据看不到,或者被加密的,其它的还有 GET 的时候中文出现乱码 (在地址栏里) ,数据最大长度限制等等。 说 POST 比 GET 安全肯定是错的,POST 跟 GET 都是明文传输,用httpfox等插件,或者像WireShark 等类似工具就能观察到。 POST 和 GET 的差别其实是很大的。语义上,GET 是获取指定URL上的资源,是读操作,重要的一点是不论对某个资源 GET 多少次,它的状态是不会改变的, 在这个意义上,我们说 GET 是安全的 (不是被密码学或者数据保护意义上的安全) 。因为 GET 是安全的,所以 GET 返回的内容可以被浏览器, Cache 服务器缓存起来 (其中还有很多细节,但不影响这里的讨论) 。 而 POST 的语意是对指定资源"追加/添加"数据,所以是不安全的,每次提交的 POST,参与的代码都会认为这个操作会修改操作对象资源的状态, 于是,浏览器在你按下 F5 的时候会跳出确认框,缓存服务器不会缓存 POST 请求返回内容。 很遗憾到目前为止没有应聘者能够提到这一点。我猜测这背后的原因大概有两个,一是也许大多数人往往 (我也一样) 满足于只要完成任务就好,不管用哪个, 表单提交了,数据处理了,内容显示或者重新定向到另外一个页面,就算完成了一个任务,从任务表里划掉,结束。 而且对大部分项目(OA, CRM, MIS)的大部分情况下,用哪个似乎都可以。 同时,在被商业机构在媒体和书籍上宣传兜售的 WS-* 概念和使用集成开发环境提供的"方便"的代码生成工具后,“了解"到所有 Web 服务调用都是通过 POST, 更潜意识里确定了 POST 和 GET 是一样的,而且 GET 能做的,POST 都能做,POST 简直就是 GET++ 嘛。 自然,能用 POST 就用 POST,不必在乎两者的差别了。 ...

2012-06-03 · 4 min · 740 words · -

ISO 8859-1

ISO 8859-1 ISO/IEC 8859-1,又称Latin-1或"西欧语言",是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入192个字母及符号,藉以供使用变音符号的拉丁字母语言使用。 此字符集支援部分于欧洲使用的语言,包括阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、法罗语、弗里西语、加利西亚语、德语、格陵兰语、冰岛语、爱尔兰盖尔语、意大利语、拉丁语、卢森堡语、挪威语、葡萄牙语、里托罗曼斯语、苏格兰盖尔语、西班牙语及瑞典语。 英语虽然没有重音字母,但仍会标明为ISO 8859-1编码。除此之外,欧洲以外的部分语言,如南非荷兰语、斯瓦希里语、印尼语及马来语、菲律宾他加洛语等也可使用ISO 8859-1编码。 法语及芬兰语本来也使用ISO 8859-1来表示。但因它没有法语使用的 œ、Œ、 Ÿ 三个字母及芬兰语使用的 Š、š、Ž、ž ,故于1998年被ISO/IEC 8859-15所取代。 (ISO 8859-15同时加入了欧元符号) ISO/IEC 8859-2 Latin-2或"中欧语言",是国际标准化组织内ISO/IEC 8859的其中一个8位字符集 ISO/IEC 8859-3 南欧语言字符集 ISO/IEC 8859-4 北欧语言字符集 ISO/IEC 8859-5 是国际标准化组织内ISO/IEC 8859的其中一个8位字符集。此字集收录西里尔字母,供俄语、白俄罗斯语、保加利亚语、马其顿语、塞尔维亚语、乌克兰语使用。(哈萨克语及蒙古语尽管不是斯拉夫文字,但也使用西里尔字母书写) ISO/IEC 8859-6 供现代阿拉伯语使用 ISO/IEC 8859-7 供现代希腊语使用 ISO/IEC 8859-8 供希伯来语使用 ISO/IEC 8859-9是国际标准化组织内ISO/IEC 8859的其中一个8位字符集。它主要用以表示土耳其语及库尔德语文字。 这个字符集由ISO/IEC 8859-1演化而来,它把原属冰岛语的 &ETH;、&eth;、&Yacute;、&yacute;、&THORN;、&thorn; 字母移走,换上 Ğ、ğ、İ、ı、Ş、ş 六个土耳其语字母。 ISO/IEC 8859-10 北欧语言 ISO/IEC 8859-11 泰语 ISO/IEC 8859-12 取消 ISO/IEC 8859-13 波罗的语 ISO/IEC 8859-14 爱尔兰,马恩岛,苏格兰盖尔语,威尔士语,康沃尔,和布列塔尼 ISO/IEC 8859-15 西欧语 ISO/IEC 8859-16 阿尔巴尼亚,克罗地亚,匈牙利,波兰,罗马尼亚,塞尔维亚,斯洛文尼亚,但也有法国,德国,意大利和爱尔兰的盖尔 (新正字法) 。

2012-06-03 · 1 min · 74 words · -

Java web 乱码

Java web 乱码 http://www.jb51.net/web/12714.html (一) get提交 1.首先说下客户端 (浏览器) 的form表单用get方法是如何将数据编码后提交给服务器端的吧。 对于get方法来说,都是把数据串联在请求的url后面作为参数,如: http://localhost:8080/servlet?msg=abc (很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如: http://localhost:8080 /servlet?msg=杭州,服务器端容易得到乱码) ,url拼接完成后,浏览器会对url进行URL encode,然后发送给服务器,URL encode的过程就是把部分url做为字符,按照某种编码方式 (如: utf-8,gbk等) 编码成二进制的字节码,然后每个字节用一个包含3个字符的字符串 “%xy” 表示,其中xy为该字节的两位十六进制表示形式。我这里说的可能不清楚,具体介绍可以看下java.net.URLEncoder。了解了 URL encode的过程,我们能看到2个很重要的问题,第一: 需要URL encode的字符一般都是非ASCII的字符 (笼统的讲) ,再通俗的讲就是除了英文字母以外的文字 (如: 中文,日文等) 都要进行URL encode,所以对于我们来说,都是英文字母的url不会出现服务器得到乱码问题,出现乱码都是url里面带了中文或特殊字符造成的;第二: URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK,通过设置浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置,也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用 javascript做URL encode,然后再拼接url提交数据,也就是替浏览器做了URL encode,好处就是网站可以统一get方法提交数据的编码方式。 完成了URL encode,那么现在的url就成了ASCII范围内的字符了,然后以iso-8859-1的编码方式转换成二进制随着请求头一起发送出去。这里想多说几句的是,对于get方法来说,没有请求实体,含有数据的url都在请求头里面,之所以用URL encode,我个人觉的原因是: 对于请求头来说最终都是要用iso-8859-1编码方式编码成二进制的101010…..的纯数据在互联网上传送,如果直接将含有中文等特殊字符做iso-8859-1编码会丢失信息,所以先做URL encode是有必要的。 2。服务器端 (tomcat) 是如何将数据获取到进行解码的。 第一步是先把数据用iso-8859-1进行解码,对于get方法来说,tomcat获取数据的是ASCII范围内的请求头字符,其中的请求url里面带有参数数据,如果参数中有中文等特殊字符,那么目前还是URL encode后的%XY状态,先停下,我们先说下开发人员一般获取数据的过程。通常大家都是request.getParameter(“name”)获取参数数据,我们在request对象获得的数据都是经过解码过的,而解码过程中程序里是无法指定,这里要说下,有很多新手说用 request.setCharacterEncoding(“字符集”)可以指定解码方式,其实是不可以的,看servlet的官方API说明有对此方法的解释: Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().可以看出对于get方法他是无能为力的。那么到底用什么编码方式解码数据的呢,这是tomcat的事情了,默认缺省用的是 iso-8859-1,这样我们就能找到为什么get请求带中文参数为什么在服务器端得到乱码了,原因是在客户端一般都是用UTF-8或GBK对数据 URL encode,这里用iso-8859-1方式URL decoder显然不行,在程序里我们可以直接 ...

2012-06-03 · 1 min · 117 words · -

Java 抽象类/接口

Java 抽象类/接口 http://dev.yesky.com/436/7581936.shtml 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对 于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。 理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类 (本文 中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意区分) 定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢? 在 面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是 所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如: 如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、 三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。 在面向对象领域,抽象类主要用来进行类型隐藏。 我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。熟悉OCP的读者一定知 道,为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle),抽象类是其中的关键所在。 从语法定义层面看abstract class 和 interface 在语法层面,Java语言对于abstract class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。 使用abstract class的方式定义Demo抽象类的方式如下: ```java abstract class Demo{ abstract void method1(); abstract void method2(); //… } ``` 使用interface的方式定义Demo抽象类的方式如下: ```java interface Demo{ void method1(); void method2(); //… } 在abstract class方式中,Demo可以有自己的数据成员,也可以有非 abstract 的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员 (也就是必须是static final 的, 定义成员变量时可以不指定, 默认是public static final,不过在interface中一般不定义数据成员) ,所有的成员方法都是abstract的, 定义方法时是默认的, 可以不显示指定. 从某种意义上说,interface是一种特殊形式的 abstract class。 从编程的角度来看,abstract class和interface都可以用来实现 "design by contract" 的思想。但是在具体的使用上面还是有一些区别的。 首先,abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系(因为Java不直接支持多继承 - 转注)。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。 其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会增加一些复杂性,有时会造成很大的麻烦。 在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成维护上的麻烦。因为如果后来想修改类的接口 (一般通过 abstract class 或者interface来表示) 以适应新的情况 (比如,添加新的方法或者给已有的方法添加新的参数) 时,就会非常的麻烦,可能要花费很多的时间 (对于派生类很多的情况,尤为如此) 。但是如果界面是通过abstract class来实现的,那 么可能就只需要修改定义在abstract class中的默认行为就可以了。 同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了 "one rule,one place" 原则,造成代码重复,同样不利于以后的维护。因此,在abstract class和interface间进行选择时要非常的小心。 从设计理念层面看 abstract class 和 interface 上面主要从语法定义和编程的角度论述了abstract class和interface的区 别,这些层面的区别是比较低层次的、非本质的。本小节将从另一个层面: abstract class和interface所反映出的设计理念,来分析一下二者的区别。作者认为,从这个层面进行分析才能理解二者概念的本质所在。 前面已经提到过,abstract class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a"关系,即父类和派生类在概念本质上应该是相同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的, 仅仅是实现了interface定义的契约而已。为了使论述便于理解,下面将通过一个简单的实例进行说明。 考虑这样一个例子,假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型,定义方式分别如下所示: 使用abstract class方式定义Door: ```java abstract class Door{ abstract void open(); abstract void close(); } 使用interface方式定义Door: ```java interface Door{ void open(); void close(); } ...

2012-06-03 · 2 min · 319 words · -

tomcat server.xml

tomcat server.xml http://www.importnew.com/26156.html Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛。server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件;通过对xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。因此,学习server.xml文件的配置,对于了解和使用Tomcat至关重要。 本文将通过实例,介绍server.xml中各个组件的配置,并详细说明Tomcat各个核心组件的作用以及各个组件之间的相互关系。 说明: 由于server.xml文件中元素与Tomcat中组件的对应关系,后文中为了描述方便,“元素"和"组件"的使用不严格区分。 一、一个server.xml配置实例 server.xml位于$TOMCAT_HOME/conf目录下;下面是一个server.xml实例。后文中将结合该实例讲解server.xml中,各个元素的含义和作用;在阅读后续章节过程中,可以对照该xml文档便于理解。 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> </Engine> 二、server.xml文档的元素分类和整体结构 ...

2012-06-02 · 2 min · 336 words · -