<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>小苹果把</title>
    <description>入行不久，来此地向各位大哥学习......</description>
    <link>http://zhaozhi-1983.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>前辈如是说</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/163667" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/163667</a>&nbsp;
          发表时间: 2008年02月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在网上看到的，对自己应该也是个惊醒吧！！！！！！ <br /><span style="background-color: #ccffff">随着编程年龄增长，也有机会去带领团队培养团队，期间碰到过不少刚毕业的学生或者是刚干了一年的程序员。带着他们一年半载，有些人进步很大，有些人停滞不前，更有些人萌生转行想法。他们中的一些人会问我，为什么我会这样呢。是因为自己不够聪明么？或者是因为自己不够活泼引起领导的充分关照么？还是因为机会不均等从而导致失去做挑战性的任务么？我想对你们说，这些都不是最主要的，而是你们并没有注意到你手中还有一份试卷要你去完成。 <br />一些人总是任务驱动形的，分给他的任务，他会非常关注，并且能很好的完成。然后对其他一概不关心。比如，让某个人去负责维护数据库初始化脚本。这个人很聪明，先把数据库导出一个脚本，然后维护此脚本。等我Review这个脚本的时候，发现数据库自动生成的脚本里有Lock table语句，我便问他，这代表了什么意思，什么情况下要用这个？得到的答案却是&ldquo;我没有注意到这个语句&rdquo;。这样任务驱动型的小伙子只注意到他手里的一份试卷：日常工作任务，他能做的非常好，得了个满分，但就算这样，他也只能得50分，因为还有一份50分的试卷，他并没有留意到。想象一下，在他读书的时候，他绝不会在考试的时候漏做一份试卷，然而，在好多刚毕业的学生，来到公司，日复一日的工作（考试）中，总是没有注意到另外一份试卷。即使他第一份试卷做的很好，那也只是50分，永远没有及格。 <br />在我带领的团队里，已经证明，那些能做好第二份试卷的人，往往在技术上都能得到很大进步，即使做不好，但意识到手里还有另外一份试卷的人，那也是能超越别人的。 <br />那么，如何找到第二份试卷呢，这个答案，取决你，比如，以下是我带过的人的一些第二份试卷内容 <br />1)以解决问题为中心而不是以任务驱动为中心 <br />2)努力追求完美的代码和设计 <br />3)对组长提供的解决方法要善于质疑和刨根问底。 <br />4)有自己的理想和兴趣爱好等等 <br />5)帮助同伴 <br />6)积极参与公司培训和技术讨论 <br />7)对自己的做出来的东西并不满意 <br />8)发挥主观能动性，善于提出解决方法 <br />9)接受批评 <br /><br />每个人，手里除了有一个日常工作的试卷等待你去完成外，还有一份隐形的试卷等待你完成，要你找到它，完成它。别满足你有了50分，那是无用的。50分还是不及格，众所周知。 <br /></span><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/163667#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Feb 2008 16:31:17 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/163667</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/163667</guid>
      </item>
      <item>
        <title>Tomcat 多端口 多应用</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/163662" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/163662</a>&nbsp;
          发表时间: 2008年02月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天在别的论坛上看到篇帖子，觉得应该有些用处，先放这里啦。 <br /><br />当你使用Tomcat作为Web Server的时候，是不是会想过这样的一个问题：如何利用Tomcat建立两个Web Server，同时侦听来自不同端口的请求呢？要实现这一点是很简单的。以下假设Tomcat安装在D:/Tomcat5.0目录下。 <br />Tomcat在启动的时候，都会从D:/Tomcat5.0/conf/server.xml中获得server启动的一些基本信息；在server.xml中，你会看到这个节点，如下所示： <br /><br /><span style="background-color: #999999"><span style="background-color: #ccffcc">&lt;Service name=&quot;Catalina&quot;&gt; <br />&lt;Connector acceptCount=&quot;100&quot; connectionTimeout=&quot;20000&quot; disableUploadTimeout=&quot;true&quot; port=&quot;8080&quot; redirectPort=&quot;8443&quot; maxSpareThreads=&quot;75&quot; maxThreads=&quot;150&quot; minSpareThreads=&quot;25&quot;/&gt; <br />&lt;Connector port=&quot;8009&quot; protocol=&quot;AJP/1.3&quot; protocolHandlerClassName=&quot;org.apache.jk.server.JkCoyoteHandler&quot; redirectPort=&quot;8443&quot;/&gt; <br />&lt;Engine defaultHost=&quot;localhost&quot; name=&quot;Catalina&quot;&gt; <br />&lt;Host appBase=&quot;webapps&quot; name=&quot;localhost&quot;&gt; <br />&lt;Logger className=&quot;org.apache.catalina.logger.FileLogger&quot; prefix=&quot;localhost_log.&quot; suffix=&quot;.txt&quot; timestamp=&quot;true&quot;/&gt; <br />&lt;/Host&gt; <br />&lt;Logger className=&quot;org.apache.catalina.logger.FileLogger&quot; prefix=&quot;catalina_log.&quot; suffix=&quot;.txt&quot; timestamp=&quot;true&quot;/&gt; <br />&lt;Realm className=&quot;org.apache.catalina.realm.UserDatabaseRealm&quot;/&gt; <br />&lt;/Engine&gt; <br />&lt;/Service&gt; <br /></span></span><br />在节点下的第一个节点，则定义了侦听的端口，以上例子就是8080。而对于节点本身，它的属性name的值是Catalina，这是一个关键的地方，接着就是子节 点，而它的属性defaultHost的值是localhost，这也是一个关键的地方。 <br />我们可以从D:/Tomcat5.0/conf下面找到一个名为Catalina的文件夹，在这个文件夹中还包含着一个名为localhost的文件夹。在localhost文件夹下面包含着很多xml，而这些xml就是每一个Web Application的Context配置文件了。根据这些信息，很容易就可以想到建立两个Web Server的方法了。 <br />首先，在D:/Tomcat5.0/conf 创建一个名为Fantasysoft(名字可以随你自己定了)的文件夹，然后在Fantasysoft下面在创建一个localhost的文件夹，然后将相应的Web Application的Context配置文件放到新建的localhost文件夹中； <br />接着，在server.xml中对照已有的节点增加一个节点，将name属性改Fantasysoft，将port口都进行相应的修改。如下： <br /><br /><br /><br /><span style="background-color: #999999"><span style="background-color: #ccffcc">&lt;Service name=&quot;Fantasysoft&quot;&gt; <br />&lt;Connector acceptCount=&quot;100&quot; connectionTimeout=&quot;20000&quot; disableUploadTimeout=&quot;true&quot; port=&quot;8090&quot; redirectPort=&quot;8453&quot; maxSpareThreads=&quot;75&quot; maxThreads=&quot;150&quot; minSpareThreads=&quot;25&quot;/&gt; <br />&lt;Connector port=&quot;8019&quot; protocol=&quot;AJP/1.3&quot; protocolHandlerClassName=&quot;org.apache.jk.server.JkCoyoteHandler&quot; redirectPort=&quot;8453&quot;/&gt; <br />&lt;Engine defaultHost=&quot;localhost&quot; name=&quot;Catalina&quot;&gt; <br />&lt;Host appBase=&quot;webapps&quot; name=&quot;localhost&quot;&gt; <br />&lt;Logger className=&quot;org.apache.catalina.logger.FileLogger&quot; prefix=&quot;localhost_log.&quot; suffix=&quot;.txt&quot; timestamp=&quot;true&quot;/&gt; <br />&lt;/Host&gt; <br />&lt;Logger className=&quot;org.apache.catalina.logger.FileLogger&quot; prefix=&quot;catalina_log.&quot; suffix=&quot;.txt&quot; timestamp=&quot;true&quot;/&gt; <br />&lt;Realm className=&quot;org.apache.catalina.realm.UserDatabaseRealm&quot;/&gt; <br />&lt;/Engine&gt; <br />&lt;/Service&gt; <br /></span></span><br />最后，重新启动Server，你就可以通过8090端口访问到你建立的网络 <br /><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/163662#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Feb 2008 16:26:04 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/163662</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/163662</guid>
      </item>
      <item>
        <title>Log4j基础总结</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/163266" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/163266</a>&nbsp;
          发表时间: 2008年02月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Log4j由三个重要的组件构成：日志信息的优先级，日志信息的输出目的地，日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG，分别用来指定这条日志信息的重要程度；日志信息的输出目的地指定了日志将打印到控制台还是文件中；而输出格式则控制了日志信息的显示内容。<br />　　<strong>一、定义配置文件</strong><br />　　其实您也可以完全不使用配置文件，而是在代码中配置Log4j环境。但是，使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式，一种是XML格式的文件，一种是Java特性文件（键=值）。下面我们介绍使用Java特性文件做为配置文件的方法：<br /><br />　　1.配置根Logger，其语法为：<br />　　log4j.rootLogger = [ level ] , appenderName, appenderName, …<br />　　其中，level 是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别，优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别，则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指B日志信息输出到哪个地方。您可以同时指定多个输出目的地。<br /><br />　　2.配置日志信息输出目的地Appender，其语法为：<br />　　log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />　　log4j.appender.appenderName.option1 = value1<br />　　…<br />　　log4j.appender.appenderName.option = valueN<br /><br />　　其中，Log4j提供的appender有以下几种：<br />　　org.apache.log4j.ConsoleAppender（控制台），<br />　　org.apache.log4j.FileAppender（文件），<br />　　org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件），<br />　　org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件），<br />　　org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）<br /><br />　　3.配置日志信息的格式（布局），其语法为：<br />　　log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />　　log4j.appender.appenderName.layout.option1 = value1<br />　　…<br />　　log4j.appender.appenderName.layout.option = valueN<br /><br />　　其中，Log4j提供的layout有以e几种：<br />　　org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />　　org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />　　org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />　　org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）<br /><br />　　Log4J采用类似C语言中的printf函数的打印格式格式化日志信息，打印参数如下： %m 输出代码中指定的消息<br />　　%p 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL<br />　　%r 输出自应用启动到输出该log信息耗费的毫秒数<br />　　%c 输出所属的类目，通常就是所在类的全名<br />　　%t 输出产生该日志事件的线程名<br />　　%n 输出一个回车换行符，Windows平台为“rn”，Unix平台为“n”<br />　　%d 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921<br />　　%l 输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10)<br /><br /><strong>　　二、在代码中使用Log4j</strong><br /><br />　　1.得到记录器<br />　　使用Log4j，第一步就是获取日志记录器，这个记录器将负责控制日志信息。其语法为：<br />　　public static Logger getLogger( String name)<br />　　通过指定的名字获得记录器，如果必要的话，则为这个名字创建一个新的记录器。Name一般取本类的名字，比如：<br />　　static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )<br /><br />　　2.读取配置文件<br />　　当获得了日志记录器之后，第二步将配置Log4j环境，其语法为：<br />　　BasicConfigurator.configure ()： 自动快速地使用缺省Log4j环境。<br />　　PropertyConfigurator.configure ( String configFilename) ：读取使用Java的特性文件编写的配置文件。<br />　　DOMConfigurator.configure ( String filename ) ：读取XML形式的配置文件。<br /><br />　　3.插入记录信息（格式化日志信息）<br />　　当上两个必要步骤执行完毕，您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方，其语法如下：<br />　　Logger.debug ( Object message ) ;<br />　　Logger.info ( Object message ) ;<br />　　Logger.warn ( Object message ) ;<br />　　Logger.error ( Object message ) ;
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/163266#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Feb 2008 10:34:20 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/163266</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/163266</guid>
      </item>
      <item>
        <title>Tomcat下乱码的解决</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/161043" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/161043</a>&nbsp;
          发表时间: 2008年02月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　　(一)JSP页面上是中文，但是看的时候是乱码：<br />　　解决的办法就是在JSP页面的编码的地方<br />&lt; %@ page language="java" contentType="text/html;charset=GBK" %>，<br />　　因为Jsp转成Java文件时的编码问题，默认的话有的服务器是ISO-8859-1，如果一个JSP中直接输入了中文，Jsp把它当作ISO8859-1来处理是肯定有问题的，这一点，我们可以通过查看Jasper所生成的Java中间文件来确认。<br />　　(二)当用Request对象获取客户提交的汉字代码的时候，会出现乱码：<br />　　解决的办法是：要配置一个filter,也就是一个Servelet的过滤器，代码如下：<br />import java.io.IOException;<br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletException;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br />import javax.servlet.UnavailableException;<br /><br />/**<br />* Example filter that sets the character encoding to be used in parsing the<br />* incoming request<br />*/<br />public class SetCharacterEncodingFilter implements Filter {<br /><br />/**<br />* Take this filter out of service.<br />*/<br />public void destroy() {<br />}<br />/**<br />* Select and set (if specified) the character encoding to be used to<br />* interpret request parameters for this request.<br />*/<br />public void doFilter(ServletRequest request, ServletResponse response,<br />FilterChain chain)throws IOException, ServletException {<br /><br />request.setCharacterEncoding("GBK");<br /><br />// 传递控制到下一个过滤器<br />chain.doFilter(request, response);<br />}<br /><br />public void init(FilterConfig filterConfig) throws ServletException {<br />}<br />}<br /><br /><br />　　配置web.xml<br /><br /><br />&lt; filter><br />&lt; filter-name>Set Character Encoding&lt; /filter-name><br />&lt; filter-class>SetCharacterEncodingFilter&lt; /filter-class><br />&lt; /filter><br />&lt; filter-mapping><br />&lt; filter-name>Set Character Encoding&lt; /filter-name><br />&lt; url-pattern>/*&lt; /url-pattern><br />&lt; /filter-mapping><br /><br /><br />　　如果你还是出现这种情况的话你就往下看看是不是第四种情况，你的Form提交的数据是不是用get提交的，一般来说用post提交的话是没有问题的，如果是的话，你就看看第四种解决办法。<br />　　还有就是对含有汉字字符的信息进行处理，处理的代码是：<br /><br />package dbJavaBean;<br />public class CodingConvert<br />{<br />public CodingConvert()<br />{<br />//<br />}<br />public String toGb(String uniStr){<br />String gbStr = "";<br />if(uniStr == null){<br />uniStr = "";<br />}<br />try{<br />byte[] tempByte = uniStr.getBytes("ISO8859_1");<br />gbStr = new String(tempByte,"GB2312");<br />}<br />catch(Exception ex){<br />}<br />return gbStr;<br />}<br /><br />public String toUni(String gbStr){<br />String uniStr = "";<br />if(gbStr == null){<br />gbStr = "";<br />}<br />try{<br />byte[] tempByte = gbStr.getBytes("GB2312");<br />uniStr = new String(tempByte,"ISO8859_1");<br />}catch(Exception ex){<br />}<br />return uniStr;<br />}<br />}<br /><br /><br />　　你也可以在直接的转换，首先你将获取的字符串用ISO-8859-1进行编码，然后将这个编码存放到一个字节数组中，然后将这个数组转化成字符串对象就可以了，例如：<br />String str=request.getParameter(“girl”);<br />Byte B[]=str.getBytes(“ISO-8859-1”);<br />Str=new String(B);<br /><br />　　通过上述转换的话，提交的任何信息都能正确的显示。<br />三)在Formget请求在服务端用request. getParameter(“name”)时返回的是乱码。<br />　　按tomcat的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用。问题是出在处理参数传递的方法上：如果在servlet中用doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了：<br />request.setCharacterEncoding("GBK");<br />response.setContentType("text/html;charset=GBK");<br />也是不起作用的，返回的中文还是乱码！！！<br /><br /><br />　　如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。<br />　　同样，在用两个JSP页面处理表单输入之所以能显示中文是因为用的是post方法传递的，改成get方法依旧不行。<br />　　由此可见在servlet中用doGet()方法或是在JSP中用get方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息，很有可能引起常用字符集的冲突或是不匹配。<br />　　解决的办法是：<br />　　1) 打开tomcat的server.xml文件，找到区块，加入如下一行： <br />URIEncoding=”GBK” <br />　　完整的应如下： <br />&lt; Connector port="8080" maxThreads="150"<br />minSpareThreads="25" maxSpareThreads="75"<br />enableLookups="false" redirectPort="8443"<br />acceptCount="100" debug="0" connectionTimeout="20000"<br />disableUploadTimeout="true" URIEncoding="GBK"/> <br /><br /><br />　　2)重启tomcat,一切OK。<br />　　需要加入的原因大家可以去研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html下的这个文件就可以知道原因了。需要注意的是：这个地方如果你要是用UTF-8的时候在传递的过程中在Tomcat中也是要出现乱码的情况，如果不行的话就换别的字符集。<br />　　(四)JSP页面上有中文，按钮上面也有中文，但是通过服务器查看页面的时候出现乱码：<br />　　解决的办法是：<br />首先在JSP文件中不应该直接包含本地化的消息文本，而是应该通过&lt; bean:message>标签从Resource Bundle中获得文本。应该把你的中文文本放到Application.properties文件中，这个文件放在WEB-INF/classes/*下，例如我在页面里有姓名，年龄两个label,我首先就是要建一个Application.properties，里面的内容应该是name="姓名" age="年龄"，然后我把这个文件放到WEB-INF/classes/properties/下，接下来根据Application.properties文件，对他进行编码转化，创建一个中文资源文件，假定名字是Application_cn.properties。<br />　　在JDK中提供了native2ascii命令，他能够实现字符编码的转换。在DOS环境中找到你放置Application.properties的这个文件的目录，在DOS环境中执行一下命令，将生成按GBK编码的中文资源文件Application_cn.properties：native2ascii ?encoding gbk Application.properties Application_cn.properties执行以上命令以后将生成如下内容的Application_cn.properties文件：name=\u59d3\u540d age=\u5e74\u9f84,在Struts-config.xml中配置：<br />&lt; message-resources parameter="properties.Application_cn"/><br /><br />　　到这一步，基本上完成了一大半，接着你就要在JSP页面上写<br />&lt; %@ page language="java" contentType="text/html;charset=GBK" %><br />　　到名字的那个label上写<br />&lt; bean:message key=”name”><br />　　这样，在页面上出现的时候就会出现中文的姓名，年龄这个也是一样，按钮上汉字的处理也是同样的。<br />　　(五)写入到数据库是乱码：<br />　　解决的方法：要配置一个filter,也就是一个Servelet的过滤器，代码如同第二种时候一样。<br />　　如果你是通过JDBC直接链接数据库的时候，配置的代码如下：<br /><br />jdbc:mysql://localhost:3306/workshopdb?useUnicode=true&characterEncoding=GBK<br /><br /><br />　　这样保证到数据库中的代码是不是乱码。<br />　　如果你是通过数据源链接的话你不能按照这样的写法了，首先你就要写在配置文件中，在tomcat 5.0.19中配置数据源的地方是在C:\Tomcat 5.0\conf\Catalina\localhost这个下面，我建立的工程是workshop，放置的目录是webapp下面,workshop.xml的配置文件如下：<br />&lt; !-- insert this Context element into server.xml --><br /><br />&lt; Context path="/workshop" docBase="workshop" debug="0"<br />reloadable="true" ><br /><br />&lt; Resource name="jdbc/WorkshopDB"<br />auth="Container"<br />type="javax.sql.DataSource" /><br /><br />&lt; ResourceParams name="jdbc/WorkshopDB"><br />&lt; parameter><br />&lt; name>factory&lt; /name><br />&lt; value>org.apache.commons.dbcp.BasicDataSourceFactory&lt; /value><br />&lt; /parameter><br />&lt; parameter><br />&lt; name>maxActive&lt; /name><br />&lt; value>100&lt; /value><br />&lt; /parameter><br />&lt; parameter><br />&lt; name>maxIdle&lt; /name><br />&lt; value>30&lt; /value><br />&lt; /parameter><br /><br /><br />&lt; parameter><br />&lt; name>maxWait&lt; /name><br />&lt; value>10000&lt; /value><br />&lt; /parameter><br /><br />&lt; parameter><br />&lt; name>username&lt; /name><br />&lt; value>root&lt; /value><br />&lt; /parameter><br />&lt; parameter><br />&lt; name>password&lt; /name><br />&lt; value>&lt; /value><br />&lt; /parameter><br /><br />&lt; !-- Class name for mm.mysql JDBC driver --><br />&lt; parameter><br />&lt; name>driverClassName&lt; /name><br />&lt; value>com.mysql.jdbc.Driver&lt; /value><br />&lt; /parameter><br />&lt; parameter><br />&lt; name>url&lt; /name><br />&lt; value>&lt; ![CDATA[jdbc:mysql://localhost:3306/workshopdb?<br />useUnicode=true&characterEncoding=GBK]]&gt;&lt; /value><br />&lt; /parameter><br />&lt; /ResourceParams><br /><br />&lt; /Context><br /><br /><br />　　粗体地方要特别的注意，和JDBC直接链接的时候是有区别的，如果你配置正确，当你输入中文的时候到数据库中就是中文了，有一点要注意的是，你在显示数据的页面也是要用&lt; %@ page language="java" contentType="text/html;charset=GBK" %>这行代码的。<br /><br />　　需要注意的是有的前台的人员在写代码的时候，是用Dreamver写的，写了一个Form的时候把他改成了一个jsp，这样有一个地方要注意了，那就是在Dreamver中Action的提交方式是request的，你需要把他改过来，因为在jsp的提交的过程中仅仅就是POST和GET两种方式，但是这两种方式提交的代码在编码方面还是有很大不同的。<br />　　以上就是我在开发系统中解决中文的问题，不知道能不能解决大家的问题，时间匆忙，没有及时完善，文笔也不是很好，有些地方估计是词不达意。大家可以给我意见，希望能共同进步。
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/161043#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Feb 2008 17:27:49 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/161043</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/161043</guid>
      </item>
      <item>
        <title>Tomcat配置相关</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/161042" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/161042</a>&nbsp;
          发表时间: 2008年02月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1． 配置系统管理（Admin Web Application） <br /><br />　　大多数商业化的J2EE服务器都提供一个功能强大的管理界面，且大都采用易于理解的Web应用界面。Tomcat按照自己的方式，同样提供一个成熟的管理工具，并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin Web Application最初在4.1版本时出现，当时的功能包括管理context、data source、user和group等。当然也可以管理像初始化参数，user、group、role的多种数据库管理等。在后续的版本中，这些功能将得到很大的扩展，但现有的功能已经非常实用了。 <br /><br />　　Admin Web Application被定义在自动部署文件：CATALINA_BASE/webapps/admin.XML 。 <br />　　（译者注：CATALINA_BASE即tomcat安装目录下的server目录） <br /><br />　　你必须编辑这个文件，以确定Context中的docBase参数是绝对路径。也就是说，CATALINA_BASE/webapps/admin.xml 的路径是绝对路径。作为另外一种选择，你也可以删除这个自动部署文件，而在server.xml文件中建立一个Admin Web Application的context，效果是一样的。你不能管理Admin Web Application这个应用，换而言之，除了删除CATALINA_BASE/webapps/admin.xml ，你可能什么都做不了。 <br /><br />　　如果你使用UserDatabaseRealm（默认），你将需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文件中。你编辑这个文件，添加一个名叫“admin”的role 到该文件中，如下： <br /><br />＜role name="admin"/＞  <br /><br />　　你同样需要有一个用户，并且这个用户的角色是“admin”。象存在的用户那样，添加一个用户（改变密码使其更加安全）： <br /><br />＜user name="admin" password="deep_dark_secret" roles="admin"/＞  <br /><br />　　当你完成这些步骤后，请重新启动Tomcat，访问http://localhost:8080/admin，你将看到一个登录界面。Admin Web Application采用基于容器管理的安全机制，并采用了Jakarta Struts框架。一旦你作为“admin”角色的用户登录管理界面，你将能够使用这个管理界面配置Tomcat。 <br /><br />　　2．配置应用管理（Manager Web Application） <br /><br />　　Manager Web Application让你通过一个比Admin Web Application更为简单的用户界面，执行一些简单的Web应用任务。 <br /><br />　　Manager Web Application被被定义在一个自动部署文件中： <br /><br />CATALINA_BASE/webapps/manager.xml 。  <br /><br />　　你必须编辑这个文件，以确保context的docBase参数是绝对路径，也就是说CATALINA_HOME/server/webapps/manager的绝对路径。 <br />　　（译者注：CATALINA_HOME即tomcat安装目录） <br /><br />　　如果你使用的是UserDatabaseRealm，那么你需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文件中。接下来，编辑这个文件，添加一个名为“manager”的角色到该文件中： <br /><br />＜role name=”manager”＞  <br /><br />　　你同样需要有一个角色为“manager”的用户。像已经存在的用户那样，添加一个新用户（改变密码使其更加安全）： <br /><br />＜user name="manager" password="deep_dark_secret" roles="manager"/＞  <br /><br />　　然后重新启动Tomcat，访问http://localhost/manager/list，将看到一个很朴素的文本型管理界面，或者访问http://localhost/manager/html/list，将看到一个HMTL的管理界面。不管是哪种方式都说明你的Manager Web Application现在已经启动了。 <br /><br />　　Manager application让你可以在没有系统管理特权的基础上，安装新的Web应用，以用于测试。如果我们有一个新的web应用位于/home/user/hello下在，并且想把它安装到 /hello下，为了测试这个应用，我们可以这么做，在第一个文件框中输入“/hello”（作为访问时的path），在第二个文本框中输入“file:/home/user/hello”（作为Config URL）。 <br /><br />　　Manager application还允许你停止、重新启动、移除以及重新部署一个web应用。停止一个应用使其无法被访问，当有用户尝试访问这个被停止的应用时，将看到一个503的错误??“503 - This application is not currently available”。 <br /><br />　　移除一个web应用，只是指从Tomcat的运行拷贝中删除了该应用，如果你重新启动Tomcat，被删除的应用将再次出现（也就是说，移除并不是指从硬盘上删除）。 <br /><br />　　3．部署一个Web应用 <br /><br />　　有两个办法可以在系统中部署web服务。 <br /><br />　　1＞ 拷贝你的WAR文件或者你的web应用文件夹（包括该web的所有内容）到$CATALINA_BASE/webapps目录下。 <br /><br />　　2＞ 为你的web服务建立一个只包括context内容的XML片断文件，并把该文件放到$CATALINA_BASE/webapps目录下。这个web应用本身可以存储在硬盘上的任何地方。 <br /><br />　　如果你有一个WAR文件，你若想部署它，则只需要把该文件简单的拷贝到CATALINA_BASE/webapps目录下即可，文件必须以“.war”作为扩展名。一旦Tomcat监听到这个文件，它将（缺省的）解开该文件包作为一个子目录，并以WAR文件的文件名作为子目录的名字。接下来，Tomcat将在内存中建立一个context，就好象你在server.xml文件里建立一样。当然，其他必需的内容，将从server.xml中的DefaultContext获得。 <br /><br />　　部署web应用的另一种方式是写一个Context XML片断文件，然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断并非一个完整的XML文件，而只是一个context元素，以及对该应用的相应描述。这种片断文件就像是从server.xml中切取出来的context元素一样，所以这种片断被命名为“context片断”。 <br /><br />　　举个例子，如果我们想部署一个名叫MyWebApp.war的应用，该应用使用realm作为访问控制方式，我们可以使用下面这个片断： <br /><br />＜!-- <br />Context fragment for deploying MyWebApp.war <br />--＞ <br />＜Context path="/demo" docBase="webapps/MyWebApp.war" <br />debug="0" privileged="true"＞ <br />＜Realm className="org.apache.catalina.realm.UserDatabaseRealm" <br />resourceName="UserDatabase"/＞ <br />＜/Context＞  <br /><br />　　把该片断命名为“MyWebApp.xml”，然后拷贝到CATALINA_BASE/webapps目录下。 <br /><br />　　这种context片断提供了一种便利的方法来部署web应用，你不需要编辑server.xml，除非你想改变缺省的部署特性，安装一个新的web应用时不需要重启动Tomcat。 <br /><br />　　4．配置虚拟主机（Virtual Hosts） <br /><br />　　关于server.xml中“Host”这个元素，只有在你设置虚拟主机的才需要修改。虚拟主机是一种在一个web服务器上服务多个域名的机制，对每个域名而言，都好象独享了整个主机。实际上，大多数的小型商务网站都是采用虚拟主机实现的，这主要是因为虚拟主机能直接连接到Internet并提供相应的带宽，以保障合理的访问响应速度，另外虚拟主机还能提供一个稳定的固定IP。 <br /><br />　　基于名字的虚拟主机可以被建立在任何web服务器上，建立的方法就是通过在域名服务器（DNS）上建立IP地址的别名，并且告诉web服务器把去往不同域名的请求分发到相应的网页目录。因为这篇文章主要是讲Tomcat，我们不准备介绍在各种操作系统上设置DNS的方法，如果你在这方面需要帮助，请参考《DNS and Bind》一书，作者是Paul Albitz and Cricket Liu (O''Reilly)。为了示范方便，我将使用一个静态的主机文件，因为这是测试别名最简单的方法。 <br /><br />　　在Tomcat中使用虚拟主机，你需要设置DNS或主机数据。为了测试，为本地IP设置一个IP别名就足够了，接下来，你需要在server.xml中添加几行内容，如下： <br /><br />＜Server port="8005" shutdown="SHUTDOWN" debug="0"＞ <br />＜Service name="Tomcat-Standalone"＞ <br />＜Connector className="org.apache.coyote.tomcat4.CoyoteConnector" <br />port="8080" minProcessors="5" maxProcessors="75" <br />enableLookups="true" redirectPort="8443"/＞ <br />＜Connector className="org.apache.coyote.tomcat4.CoyoteConnector" <br />port="8443" minProcessors="5" maxProcessors="75" <br />acceptCount="10" debug="0" scheme="https" secure="true"/＞ <br />＜Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" <br />clientAuth="false" protocol="TLS" /＞ <br />＜/Connector＞ <br />＜Engine name="Standalone" defaultHost="localhost" debug="0"＞ <br />＜!-- This Host is the default Host --＞ <br />＜Host name="localhost" debug="0" apPBase="webapps" <br />unpackWARs="true" autoDeploy="true"＞ <br />＜Context path="" docBase="ROOT" debug="0"/＞ <br />＜Context path="/orders" docBase="/home/ian/orders" debug="0" <br />reloadable="true" crossContext="true"＞ <br />＜/Context＞ <br />＜/Host＞ <br /><br />＜!-- This Host is the first "Virtual Host": http://www.example.com/ --＞ <br />＜Host name="www.example.com" appBase="/home/example/webapp"＞ <br />＜Context path="" docBase="."/＞ <br />＜/Host＞ <br /><br />＜/Engine＞ <br />＜/Service＞ <br />＜/Server＞  <br /><br />　　Tomcat的server.xml文件，在初始状态下，只包括一个虚拟主机，但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的server.xml版本，其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素，所包含的context元素中必须有一个是默认的context，这个默认的context的显示路径应该为空（例如，path=””）。 <br /><br />　　5．配置基础验证（Basic Authentication） <br /><br />　　容器管理验证方法控制着当用户访问受保护的Web应用资源时，如何进行用户的身份鉴别。当一个web应用使用了Basic Authentication（BASIC参数在web.XML文件中auto-method元素中设置），而有用户访问受保护的web应用时，Tomcat将通过HTTP Basic Authentication方式，弹出一个对话框，要求用户输入用户名和密码。在这种验证方法中，所有密码将被以64位的编码方式在网络上传输。 <br /><br />　　注意：使用Basic Authentication通过被认为是不安全的，因为它没有强健的加密方法，除非在客户端和服务器端都使用HTTPS或者其他密码加密码方式（比如，在一个虚拟私人网络中）。若没有额外的加密方法，网络管理员将能够截获（或滥用）用户的密码。但是，如果你是刚开始使用Tomcat，或者你想在你的web应用中测试一下基于容器的安全管理，Basic Authentication还是非常易于设置和使用的。只需要添加＜security-constraint＞和＜login-config＞两个元素到你的web应用的web.xml文件中，并且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加适当的＜role＞和＜user＞即可，然后重新启动Tomcat。 <br /><br />　　下面例子中的web.xml摘自一个俱乐部会员网站系统，该系统中只有member目录被保护起来，并使用Basic Authentication进行身份验证。请注意，这种方式将有效的代替Apache web服务器中的.htAccess文件。 <br /><br />＜!-- <br />Define the Members-only area, by defining <br />a "Security Constraint" on this Application, and <br />mapping it to the subdirectory (URL) that we want <br />to restrict. <br />--＞ <br />＜security-constraint＞ <br />＜web-resource-collection＞ <br />＜web-resource-name＞ <br />Entire Application <br />＜/web-resource-name＞ <br />＜url-pattern＞/members/*＜/url-pattern＞ <br />＜/web-resource-collection＞ <br />＜auth-constraint＞ <br />＜role-name＞member＜/role-name＞ <br />＜/auth-constraint＞ <br />＜/security-constraint＞ <br />＜!-- Define the Login Configuration for this Application --＞ <br />＜login-config＞ <br />＜auth-method＞BASIC＜/auth-method＞ <br />＜realm-name＞My Club Members-only Area＜/realm-name＞ <br />＜/login-config＞  <br /><br />　　6．配置单点登录（Single Sign-On） <br /><br />　　一旦你设置了realm和验证的方法，你就需要进行实际的用户登录处理。一般说来，对用户而言登录系统是一件很麻烦的事情，你必须尽量减少用户登录验证的次数。作为缺省的情况，当用户第一次请求受保护的资源时，每一个web应用都会要求用户登录。如果你运行了多个web应用，并且每个应用都需要进行单独的用户验证，那这看起来就有点像你在与你的用户搏斗。用户们不知道怎样才能把多个分离的应用整合成一个单独的系统，所有他们也就不知道他们需要访问多少个不同的应用，只是很迷惑，为什么总要不停的登录。 <br /><br />　　Tomcat 4的“single sign-on”特性允许用户在访问同一虚拟主机下所有web应用时，只需登录一次。为了使用这个功能，你只需要在Host上添加一个SingleSignOn Valve元素即可，如下所示： <br /><br />＜Valve className="org.apache.catalina.authenticator.SingleSignOn" <br />debug="0"/＞ <br /><br />　　在Tomcat初始安装后，server.xml的注释里面包括SingleSignOn Valve配置的例子，你只需要去掉注释，即可使用。那么，任何用户只要登录过一个应用，则对于同一虚拟主机下的所有应用同样有效。 <br /><br />　　使用single sign-on valve有一些重要的限制： <br /><br />　　1＞ value必须被配置和嵌套在相同的Host元素里，并且所有需要进行单点验证的web应用（必须通过context元素定义）都位于该Host下。 <br /><br />　　2＞ 包括共享用户信息的realm必须被设置在同一级Host中或者嵌套之外。 <br /><br />　　3＞ 不能被context中的realm覆盖。 <br /><br />　　4＞ 使用单点登录的web应用最好使用一个Tomcat的内置的验证方式（被定义在web.xml中的＜auth-method＞中），这比自定义的验证方式强，Tomcat内置的的验证方式包括basic、digest、form和client-cert。 <br /><br />　　5＞ 如果你使用单点登录，还希望集成一个第三方的web应用到你的网站中来，并且这个新的web应用使用它自己的验证方式，而不使用容器管理安全，那你基本上就没招了。你的用户每次登录原来所有应用时需要登录一次，并且在请求新的第三方应用时还得再登录一次。当然，如果你拥有这个第三方web应用的源码，而你又是一个程序员，你可以修改它，但那恐怕也不容易做。 <br /><br />　　6＞ 单点登录需要使用cookies。 <br /><br />　　7．配置用户定制目录（Customized User Directores） <br /><br />　　一些站点允许个别用户在服务器上发布网页。例如，一所大学的学院可能想给每一位学生一个公共区域，或者是一个ISP希望给一些Web空间给他的客户，但这又不是虚拟主机。在这种情况下，一个典型的方法就是在用户名前面加一个特殊字符（~），作为每位用户的网站，比如： <br /><br />http://www.cs.myuniversity.edu/~username <br />http://members.mybiGISp.com/~username  <br /><br />　　Tomcat提供两种方法在主机上映射这些个人网站，主要使用一对特殊的Listener元素。Listener的className属性应该是org.apache.catalina.startup.UserConfig，userClass属性应该是几个映射类之一。如果你的系统是Unix，它将有一个标准的/etc/passwd文件，该文件中的帐号能够被运行中的Tomcat很容易的读取，该文件指定了用户的主目录，使用PasswdUserDatabase 映射类。 <br /><br />＜Listener className="org.apache.catalina.startup.UserConfig" <br />directoryName="public_html" <br />userClass="org.apache.catalina.startup.PasswdUserDatabase"/＞  <br /><br />　　web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一样的目录下面。当然你也可以改变public_html 到其他任何子目录下。 <br /><br />　　实际上，这个用户目录根本不一定需要位于用户主目录下里面。如果你没有一个密码文件，但你又想把一个用户名映射到公共的像/home一样目录的子目录里面，则可以使用HomesUserDatabase类。 <br /><br />＜Listener className="org.apache.catalina.startup.UserConfig" <br />directoryName="public_html" homeBase="/home" <br />userClass="org.apache.catalina.startup.HomesUserDatabase"/＞  <br /><br />　　这样一来，web文件就可以位于像/home/ian/public_html 或者 /home/jasonb/public_html一样的目录下。这种形式对Windows而言更加有利，你可以使用一个像c:\home这样的目录。 <br /><br />　　这些Listener元素，如果出现，则必须在Host元素里面，而不能在context元素里面，因为它们都用应用于Host本身。 <br /><br />　　8．在Tomcat中使用CGI脚本 <br /><br />　　Tomcat主要是作为Servlet/JSP容器，但它也有许多传统web服务器的性能。支持通用网关接口（Common Gateway Interface，即CGI）就是其中之一，CGI提供一组方法在响应浏览器请求时运行一些扩展程序。CGI之所以被称为通用，是因为它能在大多数程序或脚本中被调用，包括：Perl，Python，awk，Unix shell scripting等，甚至包括Java。当然，你大概不会把一个Java应用程序当作CGI来运行，毕竟这样太过原始。一般而言，开发Servlet总要比CGI具有更好的效率，因为当用户点击一个链接或一个按钮时，你不需要从操作系统层开始进行处理。 <br /><br />　　Tomcat包括一个可选的CGI Servlet，允许你运行遗留下来的CGI脚本。 <br /><br />　　为了使Tomcat能够运行CGI，你必须做如下几件事： <br /><br />　　1. 把servlets-cgi.renametojar （在CATALINA_HOME/server/lib/目录下）改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下。 <br /><br />　　2. 在Tomcat的CATALINA_BASE/conf/web.XML 文件中，把关于＜servlet-name＞ CGI的那段的注释去掉（默认情况下，该段位于第241行）。 <br /><br />　　3. 同样，在Tomcat的CATALINA_BASE/conf/web.xml文件中，把关于对CGI进行映射的那段的注释去掉（默认情况下，该段位于第299行）。注意，这段内容指定了HTML链接到CGI脚本的访问方式。 <br /><br />　　4. 你可以把CGI脚本放置在WEB-INF/cgi 目录下（注意，WEB-INF是一个安全的地方，你可以把一些不想被用户看见或基于安全考虑不想暴露的文件放在此处），或者你也可以把CGI脚本放置在context下的其他目录下，并为CGI Servlet调整cgiPathPrefix初始化参数。这就指定的CGI Servlet的实际位置，且不能与上一步指定的URL重名。 <br /><br />　　5. 重新启动Tomcat，你的CGI就可以运行了。 <br /><br />　　在Tomcat中，CGI程序缺省放置在WEB-INF/cgi目录下，正如前面所提示的那样，WEB-INF目录受保护的，通过客户端的浏览器无法窥探到其中内容，所以对于放置含有密码或其他敏感信息的CGI脚本而言，这是一个非常好的地方。为了兼容其他服务器，尽管你也可以把CGI脚本保存在传统的/cgi-bin目录，但要知道，在这些目录中的文件有可能被网上好奇的冲浪者看到。另外，在Unix中，请确定运行Tomcat的用户有执行CGI脚本的权限。 <br /><br />　　9．改变Tomcat中的JSP编译器（JSP Compiler） <br /><br />　　在Tomcat 4.1（或更高版本，大概），JSP的编译由包含在Tomcat里面的Ant程序控制器直接执行。这听起来有一点点奇怪，但这正是Ant有意为之的一部分，有一个API文档指导开发者在没有启动一个新的JVM的情况下，使用Ant。这是使用Ant进行Java开发的一大优势。另外，这也意味着你现在能够在Ant中使用任何javac支持的编译方式，这里有一个关于Apache Ant使用手册的javac page列表。使用起来是容易的，因为你只需要在＜init-param＞ 元素中定义一个名字叫“compiler”，并且在value中有一个支持编译的编译器名字，示例如下： <br /><br />＜Servlet＞ <br />＜servlet-name＞jsp＜/servlet-name＞ <br />＜servlet-class＞ <br />org.apache.jASPer.servlet.JspServlet <br />＜/servlet-class＞ <br />＜init-param＞ <br />＜param-name＞logVerbosityLevel＜/param-name＞ <br />＜param-value＞WARNING＜/param-value＞ <br />＜/init-param＞ <br />＜init-param＞ <br />＜param-name＞compiler＜/param-name＞ <br />＜param-value＞jikes＜/param-value＞ <br />＜/init-param＞ <br />＜load-on-startup＞3＜/load-on-startup＞ <br />＜/servlet＞  <br /><br />　　当然，给出的编译器必须已经安装在你的系统中，并且CLASSPATH可能需要设置，那处决于你选择的是何种编译器。 <br /><br />　　10．限制特定主机访问（Restricting Access to Specific Hosts） <br /><br />　　有时，你可能想限制对Tomcat Web应用的访问，比如，你希望只有你指定的主机或IP地址可以访问你的应用。这样一来，就只有那些指定的的客户端可以访问服务的内容了。为了实现这种效果，Tomcat提供了两个参数供你配置：RemoteHostValve 和RemoteAddrValve。 <br /><br />　　通过配置这两个参数，可以让你过滤来自请求的主机或IP地址，并允许或拒绝哪些主机/IP。与之类似的，在Apache的httpd文件里有对每个目录的允许/拒绝指定。 <br /><br />　　例如你可以把Admin Web application设置成只允许本地访问，设置如下： <br /><br />＜Context path="/path/to/secret_files" ...＞ <br />＜Valve className="org.apache.catalina.valves.RemoteAddrValve" <br />allow="127.0.0.1" deny=""/＞ <br />＜/Context＞  <br /><br />　　如果没有给出允许主机的指定，那么与拒绝主机匹配的主机就会被拒绝，除此之外的都是允许的。与之类似，如果没有给出拒绝主机的指定，那么与允许主机匹配的主机就会被允许，除此之外的都是拒绝的。
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/161042#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Feb 2008 17:20:51 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/161042</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/161042</guid>
      </item>
      <item>
        <title>Tomcat类加载机制</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/161038" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/161038</a>&nbsp;
          发表时间: 2008年02月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于<strong>只用于某一个web应用的类或资源</strong>，放在这个web应用下的/WEB-INF/classes目录下，如果是JAR，就放在这个web应用下的WEB-INF/lib目录下。<br />&nbsp;&nbsp;&nbsp;&nbsp; 对于让<strong>所有的web应用共享的类或资源</strong>，放在$CATALINA_BASE/shared/classes目录下，如果是JAR，就放在$CATALINA_BASE/shared/lib目录下。<br />&nbsp;&nbsp;&nbsp;&nbsp; Tomcat中的类加载策略和JDK中的委托模型略有不同。当Tomcat启动的时候，会创建一组类加载器，形成下面的层次关系：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Bootstrap<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Common<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Catalina&nbsp; Shared<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webapp1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;webapp2 ......<br /><br />各个类加载器的作用描述如下:<br /><strong>Bootstrap:</strong>负责加载由虚拟机提供的基本的运行时类和系统扩展目录（$JAVA_HOME/jre/lib/ext)下的JAR包;<br /><strong>System:</strong>通常这个加载器用来加载CLASSPATH环境变量中指定的类，但在Tomcat5的标准启动脚本($CATALINA_HOME/bin/catalina.sh或%CATALINA_HOME%/bin/catalina.bat)中改变了它的行为，它只加载下面的类：<br />$CATALINA_HOME/bin/bootstrap.jar - Contains the main() method that is used to initialize the Tomcat 5 server, and the class loader implementation classes it depends on. <br />$JAVA_HOME/lib/tools.jar - Contains the &quot;javac&quot; compiler used to convert JSP pages into servlet classes. <br />$CATALINA_HOME/bin/commons-logging-api.jar - Jakarta commons logging API. <br />$CATALINA_HOME/bin/commons-daemon.jar - Jakarta commons daemon API. <br />jmx.jar - The JMX 1.2 implementation.<br /><br /><strong>Common：</strong>它负责加载对于Tomcat本身和所有的web应用都需要看到的类，通常，应用的类不应该由他加载。$CATALINA_HOME/common/classes,$CATALINA_HOME/commons/endorsed和$CATALINA_HOME/common/lib下的都由这个加载器加载。缺省的，包括： &nbsp;<br />ant.jar - Apache Ant. <br />commons-collection.jar - Jakarta commons collection. <br />commons-dbcp.jar - Jakarta commons DBCP, providing a JDBC connection pool to web applications. <br />commons-el.jar - Jakarta commons el, implementing the expression language used by Jasper. <br />commons-pool.jar - Jakarta commons pool. <br />jasper-compiler.jar - The JSP 2.0 compiler. <br />jasper-runtime.jar - The JSP 2.0 runtime. <br />jsp-api.jar - The JSP 2.0 API. <br />naming-common.jar - The JNDI implementation used by Tomcat 5 to represent in-memory naming contexts. <br />naming-factory.jar - The JNDI implementation used by Tomcat 5 to resolve references to enterprise resources (EJB, connection pools). <br />naming-resources.jar - The specialized JNDI naming context implementation used to represent the static resources of a web application. <br />servlet-api.jar - The Servlet and JSP API classes. <br />xerces.jar - The XML parser that is visible by default to Tomcat internal classes and to web applications.<br /><br /><br /><strong>Catalina:</strong>用来加载实现Tomcat自己需要的类。由他加载的类对web应用都是不可见的。$CATALINA_HOME/server/classes,$CATALINA_HOME/server/lib,都由这个加载器加载。缺省的，包括：?<br />catalina.jar - Implementation of the Catalina servlet container portion of Tomcat 5. <br />jakarta-regexp-X.Y.jar - The binary distribution of the Jakarta Regexp regular expression processing library, used in the implementation of request filters. <br />servlets-xxxxx.jar - The classes associated with each internal servlet that provides part of Tomcat's functionality. These are separated so that they can be completely removed if the corresponding service is not required, or they can be subject to specialized security manager permissions. <br />tomcat-coyote.jar - Coyote connector for Tomcat 5. <br />tomcat-http11.jar - Standalone Java HTTP/1.1 connector. <br />tomcat-jk2.jar - Classes for the Java portion of the JK 2 web server connector, which allows Tomcat to run behind web servers such as Apache and iPlanet iAS and iWS. <br />tomcat-util.jar - Utility classes required by some Tomcat connectors.<br /><strong>Shared：</strong>被所有的web应用共享的类和资源由这个加载器加载。$CATALINA_BASE/shared/classed,$CATALINA_BASE/shared/lib，都由这个加载器加载。<br /><strong>WebappX</strong>:对每个Tomcat里的web应用都创建一个加载器，web应用下的WEB-INF/classes,WEB-INF/lib,都由这个加载器加载，由它所加载的类对其他的web应用是不可见的。<br />web应用的加载器(WebappX)和JDK的委托模型略有不同，这是根据Servlet2.3规范做出的。当WebappX被请求加载一个类时，它首先尝试自己加载，而不是委托给它的父加载器。但是，对于下面的类，仍然要委托给父加载器：<br />Classes which are part of the JRE base classes cannot be overriden. For some classes (such as the XML parser components in JDK 1.4+), the JDK 1.4 endorsed feature can be used (see the common classloader definition above). In addition, for the following class patterns, the classloader will always delegate first (and load the class itself if no parent classloader loads it): <br />javax.* <br />org.xml.sax.* <br />org.w3c.dom.* <br />org.apache.xerces.* <br />org.apache.xalan.*<br />&nbsp;Last, any JAR containing servlet API classes will be ignored by the classloader.<br />Tomcat中其他的加载器都是遵循委托模型的。<br />最后，以web应用的角度，要加载类或者资源时，会以下面的顺序查找：<br />Bootstrap classes of your JVM <br />System class loader classses (described above) <br />/WEB-INF/classes of your web application <br />/WEB-INF/lib/*.jar of your web application <br />$CATALINA_HOME/common/classes <br />$CATALINA_HOME/common/endorsed/*.jar <br />$CATALINA_HOME/common/lib/*.jar <br />$CATALINA_BASE/shared/classes <br />$CATALINA_BASE/shared/lib/*.jar 
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/161038#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Feb 2008 17:06:05 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/161038</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/161038</guid>
      </item>
      <item>
        <title>tomcat简介</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/161037" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/161037</a>&nbsp;
          发表时间: 2008年02月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div><br />一、Tomcat背景<br />　　自从JSP发布之后，推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后，开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器，当然同时也支持Servlet, 这样Tomcat就诞生了。Tomcat是jakarta项目中的一个重要的子项目，其被JavaWorld杂志的编辑选为2001年度最具创新的java产品，同时它又是sun公司官方推荐的servlet和jsp容器，因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。其次，Tomcat是完全免费的软件，任何人都可以从互联网上自由地下载。Tomcat与Apache的组合相当完美。<br /><br />二、Tomcat目录<br />tomcat<br />|---bin Tomcat：存放启动和关闭tomcat脚本；<br />|---conf Tomcat：存放不同的配置文件（server.xml和web.xml）；<br />|---doc：存放Tomcat文档；<br />|---lib/japser/common：存放Tomcat运行需要的库文件（JARS）；<br />|---logs：存放Tomcat执行时的LOG文件；<br />|---src：存放Tomcat的源代码；<br />|---webapps：Tomcat的主要Web发布目录（包括应用程序示例）；<br />|---work：存放jsp编译后产生的class文件；<br /><br />三、Tomcat类加载<br />Bootstrap($JAVA_HOME/jre/lib/ext/*.jar)<br />System($CLASSPATH/*.class和指定的jar)<br />Common($CATALINA_HOME/common 下的classes,lib,endores三个子目录)<br />Catalina ($CATALINA_HOME/server/下的classes和lib目录仅对Tomcat可见)<br />&amp;Shared($CATALINA_HOME/shared/下的classes和lib目录以及$CATALINA_HOME/lib目录)仅对Web应用程序可见,对Tomcat不可见WebApp($WEBAPP/Web-INF/*仅对该WEB应用可见classes/*.class lib/*.jar)<br /><br />加载类和资源的顺序为：<br />1、/Web-INF/classes<br />2、/Web-INF/lib/*.jar<br />3、Bootstrap<br />4、System<br />5、$CATALINA_HOME/common/classes<br />6、$CATALINA_HOME/common/endores/*.jar<br />7、$CATALINA_HOME/common/lib/*.jar<br />8、$CATALINA_HOME/shared/classes<br />9、$CATALINA_HOME/shared/lib/*.jar<br /><br />四、server.xml配置简介：<br />下面讲述这个文件中的基本配置信息，更具体的配置信息请参考tomcat的文档：<br />server:<br />1、port 指定一个端口，这个端口负责监听关闭tomcat的请求<br />2、shutdown 指定向端口发送的命令字符串<br />service:<br />1、name 指定service的名字<br />Connector (表示客户端和service之间的连接)：<br />1、port 指定服务器端要创建的端口号，并在这个断口监听来自客户端的请求<br />2、minProcessors 服务器启动时创建的处理请求的线程数<br />3、maxProcessors 最大可以创建的处理请求的线程数<br />4、enableLookups 如果为true，则可以通过调用request.getRemoteHost()进行DNS查<br />询来得到远程客户端的实际主机名，若为false则不进行DNS查询，而是返回其ip<br />地址<br />5、redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的<br />端口号<br />6、acceptCount 指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理<br />队列中的请求数，超过这个数的请求将不予处理<br />7、connectionTimeout 指定超时的时间数(以毫秒为单位)<br />Engine (表示指定service中的请求处理机，接收和处理来自Connector的请求)：<br />1、defaultHost 指定缺省的处理请求的主机名，它至少与其中的一个host元素的name<br />属性值是一样的<br />Context (表示一个web应用程序)：<br />1、docBase 应用程序的路径或者是WAR文件存放的路径<br />2、path 表示此web应用程序的url的前缀，这样请求的url为<br /><a href="http://localhost:8080/path/****"><span style="color: #0000ff">http://localhost:8080/path/****</span></a><br />3、reloadable 这个属性非常重要，如果为true，则tomcat会自动检测应用程序的<br />/WEB-INF/lib 和/WEB-INF/classes目录的变化，自动装载新的应用程序，我们可<br />以在不重起tomcat的情况下改变应用程序<br />host (表示一个虚拟主机)：<br />1、name 指定主机名<br />2、appBase 应用程序基本目录，即存放应用程序的目录<br />3、unpackWARs 如果为true，则tomcat会自动将WAR文件解压，否则不解压，直接<br />从WAR文件中运行应用程序<br />Logger (表示日志，调试和错误信息)：<br />1、className 指定logger使用的类名，此类必须实现org.apache.catalina.Logger 接口<br />2、prefix 指定log文件的前缀<br />3、suffix 指定log文件的后缀<br />4、timestamp 如果为true，则log文件名中要加入时间，如下<br />例:localhost_log.2001-10-04.txt<br />Realm (表示存放用户名，密码及role的数据库)：<br />1、className 指定Realm使用的类名，此类必须实现org.apache.catalina.Realm接口<br />Valve (功能与Logger差不多，其prefix和suffix属性解释和Logger 中的一样)：<br />1、className 指定Valve使用的类名，如用org.apache.catalina.valves.AccessLogValve<br />类可以记录应用程序的访问信息<br />directory（指定log文件存放的位置）：<br />1、pattern 有两个值，common方式记录远程主机名或ip地址，用户名，日期，第一行<br />请求的字符串，HTTP响应代码，发送的字节数。combined方式比common方式记<br />录的值更多<br /><br /></div>
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/161037#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Feb 2008 17:02:40 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/161037</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/161037</guid>
      </item>
      <item>
        <title>今年天气真糟糕</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/159831" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/159831</a>&nbsp;
          发表时间: 2008年01月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今年天气真是糟糕,第一年工作回家过春节就碰上这样的天气,呵呵,撞大运了.公司里有一个湖北武汉的同事家里直接打电话不让回去了,问题很严重.......从新闻上看广州火车站的那个场面,还真是另人担心,不知道交通什么时候能恢复,也希望上海车站不会出现这样的情况.</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/159831#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Jan 2008 09:56:06 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/159831</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/159831</guid>
      </item>
      <item>
        <title>关于MySql字符集的问题</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/159365" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/159365</a>&nbsp;
          发表时间: 2008年01月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近在登陆公司服务器上的数据库时,在命令行里执行查询语句时候得到的结果只要是中文,就全部是乱码,很让人头疼呀,，查了些资料总结一下.作为自己以后的参考.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MySQL的字符集支持(Character Set Support)有两个方面：字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器(server)，数据库(database)，数据表(table)和连接(connection)。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.MySQL默认字符集:MySQL对于字符集的指定可以细化到一个数据库，一张表，一列.传统的程序在创建数据库和数据表时并没有使用那么复杂的配置，它们用的是默认的配置.&nbsp;&nbsp;&nbsp; (1)编译MySQL 时，指定了一个默认的字符集，这个字符集是 latin1；(2)安装MySQL 时，可以在配置文件 (my.ini) 中指定一个默认的的字符集，如果没指定，这个值继承自编译时指定的；(3)启动mysqld 时，可以在命令行参数中指定一个默认的的字符集，如果没指定，这个值继承自配置文件中的配置,此时 <strong>character_set_server</strong> 被设定为这个默认的字符集；(4)当创建一个新的数据库时，除非明确指定，这个数据库的字符集被缺省设定为<strong>character_set_server</strong>；(5)当选定了一个数据库时，<strong>character_set_database</strong> 被设定为这个数据库默认的字符集；(6)在这个数据库里创建一张表时，表默认的字符集被设定为 <strong>character_set_database</strong>，也就是这个数据库默认的字符集；(7)当在表内设置一栏时，除非明确指定，否则此栏缺省的字符集就是表默认的字符集；如果什么地方都不修改，那么所有的数据库的所有表的所有栏位的都用 latin1 存储，不过我们如果安装 MySQL，一般都会选择多语言支持，也就是说，安装程序会自动在配置文件中把&nbsp; <strong>default_character_set</strong> 设置为 UTF-8，这保证了缺省情况下，所有的数据库的所有表的所有栏位的都用 UTF-8 存储。</p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.查看默认字符集(默认情况下，mysql的字符集是latin1(ISO_8859_1)通常，查看系统的字符集和排序方式的设定可以通过下面的两条命令：<br />&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; SHOW VARIABLES LIKE 'character%';<br />+--------------------------+---------------------------------+<br />| Variable_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+--------------------------+---------------------------------+<br />| character_set_client&nbsp;&nbsp;&nbsp;&nbsp; | latin1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_connection | latin1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_database&nbsp;&nbsp; | latin1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_filesystem | binary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; |<br />| character_set_results&nbsp;&nbsp;&nbsp; | latin1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_server &nbsp;&nbsp;&nbsp; | latin1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_system&nbsp; &nbsp;&nbsp; | utf8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_sets_dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | D:&quot;mysql-5.0.37&quot;share&quot;charsets&quot; |<br />+--------------------------+---------------------------------+<br /><br />&nbsp; mysql&gt; SHOW VARIABLES LIKE 'collation_%';<br />+----------------------+-----------------+<br />| Variable_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+----------------------+-----------------+<br />| collation_connection | utf8_general_ci |<br />| collation_database&nbsp;&nbsp; | utf8_general_ci |<br />| collation_server&nbsp;&nbsp;&nbsp;&nbsp; | utf8_general_ci |<br />+----------------------+-----------------+<br /><br />3.修改默认字符集<br />&nbsp; (1) 最简单的修改方法，就是修改mysql的my.ini文件中的字符集键值，<br />如 &nbsp;&nbsp; default-character-set = utf8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; character_set_server =&nbsp; utf8<br />&nbsp;&nbsp; 修改完后，重启mysql的服务，service mysql restart<br />&nbsp;&nbsp; 使用 mysql&gt; SHOW VARIABLES LIKE 'character%';查看，发现数据库编码均已改成utf8<br />+--------------------------+---------------------------------+<br />| Variable_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />+--------------------------+---------------------------------+<br />| character_set_client&nbsp;&nbsp;&nbsp;&nbsp; | utf8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_connection | utf8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_database&nbsp;&nbsp; | utf8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_filesystem | binary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_results&nbsp;&nbsp;&nbsp; | utf8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_server&nbsp;&nbsp;&nbsp;&nbsp; | utf8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_set_system&nbsp;&nbsp;&nbsp;&nbsp; | utf8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />| character_sets_dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | D:&quot;mysql-5.0.37&quot;share&quot;charsets&quot; |<br />+--------------------------+---------------------------------+<br /><br />&nbsp;&nbsp; (2) 还有一种修改字符集的方法，就是使用mysql的命令<br />&nbsp;&nbsp; &nbsp; mysql&gt; SET character_set_client = utf8 ;<br />&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; SET character_set_connection = utf8 ;<br />&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; SET character_set_database = utf8 ;<br />&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; SET character_set_results = utf8 ;<br />&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; SET character_set_server = utf8 ;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; SET collation_connection = utf8 ;<br />&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; SET collation_database = utf8 ;<br />&nbsp;&nbsp;&nbsp;&nbsp; mysql&gt; SET collation_server = utf8 ;<br /><br />一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询，你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句： <p>SET NAMES 'utf8';</p>它相当于下面的三句指令：<br />SET character_set_client = utf8;<br />SET character_set_results = utf8;<br />SET character_set_connection = utf8;<br /><br /><span>不知道什么原因,我在自己机器上把上述三个字符集都设置成utf8后,查询中文结果还是乱码,只有把character_set_results设置成GBK之后才能从命令行正常显示中文.<br /></span>
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/159365#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jan 2008 16:24:15 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/159365</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/159365</guid>
      </item>
      <item>
        <title>MySql关键字 </title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/159044" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/159044</a>&nbsp;
          发表时间: 2008年01月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>昨天一个同事的程序的除了问题,怎么都调不通,一开始以为是hibernate的问题,后来发现问题是他在一个数据表里用了index作为字段名,但是index是mysql的关键字,呵呵,有点粗心啦. 查了一下,关键字(有的是保留字 )还真是不少.在MySQL中，下表中的字显式被保留。其中大多数字进制被标准SQL用作列名和/或表名(例如，GROUP)。少数被保留了，因为MySQL需要它们，保留字被引起来后可以用作识别符。出</p><table border="1"><tbody><tr><td><span style="font-size: small">ADD</span></td><td><span style="font-size: small">ALL</span></td><td><span style="font-size: small">ALTER</span></td></tr><tr><td><span style="font-size: small">ANALYZE</span></td><td><span style="font-size: small">AND</span></td><td><span style="font-size: small">AS</span></td></tr><tr><td><span style="font-size: small">ASC</span></td><td><span style="font-size: small">ASENSITIVE</span></td><td><span style="font-size: small">BEFORE</span></td></tr><tr><td><span style="font-size: small">BETWEEN</span></td><td><span style="font-size: small">BIGINT</span></td><td><span style="font-size: small">BINARY</span></td></tr><tr><td><span style="font-size: small">BLOB</span></td><td><span style="font-size: small">BOTH</span></td><td><span style="font-size: small">BY</span></td></tr><tr><td><span style="font-size: small">CALL</span></td><td><span style="font-size: small">CASCADE</span></td><td><span style="font-size: small">CASE</span></td></tr><tr><td><span style="font-size: small">CHANGE</span></td><td><span style="font-size: small">CHAR</span></td><td><span style="font-size: small">CHARACTER</span></td></tr><tr><td><span style="font-size: small">CHECK</span></td><td><span style="font-size: small">COLLATE</span></td><td><span style="font-size: small">COLUMN</span></td></tr><tr><td><span style="font-size: small">CONDITION</span></td><td><span style="font-size: small">CONNECTION</span></td><td><span style="font-size: small">CONSTRAINT</span></td></tr><tr><td><span style="font-size: small">CONTINUE</span></td><td><span style="font-size: small">CONVERT</span></td><td><span style="font-size: small">CREATE</span></td></tr><tr><td><span style="font-size: small">CROSS</span></td><td><span style="font-size: small">CURRENT_DATE</span></td><td><span style="font-size: small">CURRENT_TIME</span></td></tr><tr><td><span style="font-size: small">CURRENT_TIMESTAMP</span></td><td><span style="font-size: small">CURRENT_USER</span></td><td><span style="font-size: small">CURSOR</span></td></tr><tr><td><span style="font-size: small">DATABASE</span></td><td><span style="font-size: small">DATABASES</span></td><td><span style="font-size: small">DAY_HOUR</span></td></tr><tr><td><span style="font-size: small">DAY_MICROSECOND</span></td><td><span style="font-size: small">DAY_MINUTE</span></td><td><span style="font-size: small">DAY_SECOND</span></td></tr><tr><td><span style="font-size: small">DEC</span></td><td><span style="font-size: small">DECIMAL</span></td><td><span style="font-size: small">DECLARE</span></td></tr><tr><td><span style="font-size: small">DEFAULT</span></td><td><span style="font-size: small">DELAYED</span></td><td><span style="font-size: small">DELETE</span></td></tr><tr><td><span style="font-size: small">DESC</span></td><td><span style="font-size: small">DESCRIBE</span></td><td><span style="font-size: small">DETERMINISTIC</span></td></tr><tr><td><span style="font-size: small">DISTINCT</span></td><td><span style="font-size: small">DISTINCTROW</span></td><td><span style="font-size: small">DIV</span></td></tr><tr><td><span style="font-size: small">DOUBLE</span></td><td><span style="font-size: small">DROP</span></td><td><span style="font-size: small">DUAL</span></td></tr><tr><td><span style="font-size: small">EACH</span></td><td><span style="font-size: small">ELSE</span></td><td><span style="font-size: small">ELSEIF</span></td></tr><tr><td><span style="font-size: small">ENCLOSED</span></td><td><span style="font-size: small">ESCAPED</span></td><td><span style="font-size: small">EXISTS</span></td></tr><tr><td><span style="font-size: small">EXIT</span></td><td><span style="font-size: small">EXPLAIN</span></td><td><span style="font-size: small">FALSE</span></td></tr><tr><td><span style="font-size: small">FETCH</span></td><td><span style="font-size: small">FLOAT</span></td><td><span style="font-size: small">FLOAT4</span></td></tr><tr><td><span style="font-size: small">FLOAT8</span></td><td><span style="font-size: small">FOR</span></td><td><span style="font-size: small">FORCE</span></td></tr><tr><td><span style="font-size: small">FOREIGN</span></td><td><span style="font-size: small">FROM</span></td><td><span style="font-size: small">FULLTEXT</span></td></tr><tr><td><span style="font-size: small">GOTO</span></td><td><span style="font-size: small">GRANT</span></td><td><span style="font-size: small">GROUP</span></td></tr><tr><td><span style="font-size: small">HAVING</span></td><td><span style="font-size: small">HIGH_PRIORITY</span></td><td><span style="font-size: small">HOUR_MICROSECOND</span></td></tr><tr><td><span style="font-size: small">HOUR_MINUTE</span></td><td><span style="font-size: small">HOUR_SECOND</span></td><td><span style="font-size: small">IF</span></td></tr><tr><td><span style="font-size: small">IGNORE</span></td><td><span style="font-size: small">IN</span></td><td><span style="font-size: small">INDEX</span></td></tr><tr><td><span style="font-size: small">INFILE</span></td><td><span style="font-size: small">INNER</span></td><td><span style="font-size: small">INOUT</span></td></tr><tr><td><span style="font-size: small">INSENSITIVE</span></td><td><span style="font-size: small">INSERT</span></td><td><span style="font-size: small">INT</span></td></tr><tr><td><span style="font-size: small">INT1</span></td><td><span style="font-size: small">INT2</span></td><td><span style="font-size: small">INT3</span></td></tr><tr><td><span style="font-size: small">INT4</span></td><td><span style="font-size: small">INT8</span></td><td><span style="font-size: small">INTEGER</span></td></tr><tr><td><span style="font-size: small">INTERVAL</span></td><td><span style="font-size: small">INTO</span></td><td><span style="font-size: small">IS</span></td></tr><tr><td><span style="font-size: small">ITERATE</span></td><td><span style="font-size: small">JOIN</span></td><td><span style="font-size: small">KEY</span></td></tr><tr><td><span style="font-size: small">KEYS</span></td><td><span style="font-size: small">KILL</span></td><td><span style="font-size: small">LABEL</span></td></tr><tr><td><span style="font-size: small">LEADING</span></td><td><span style="font-size: small">LEAVE</span></td><td><span style="font-size: small">LEFT</span></td></tr><tr><td><span style="font-size: small">LIKE</span></td><td><span style="font-size: small">LIMIT</span></td><td><span style="font-size: small">LINEAR</span></td></tr><tr><td><span style="font-size: small">LINES</span></td><td><span style="font-size: small">LOAD</span></td><td><span style="font-size: small">LOCALTIME</span></td></tr><tr><td><span style="font-size: small">LOCALTIMESTAMP</span></td><td><span style="font-size: small">LOCK</span></td><td><span style="font-size: small">LONG</span></td></tr><tr><td><span style="font-size: small">LONGBLOB</span></td><td><span style="font-size: small">LONGTEXT</span></td><td><span style="font-size: small">LOOP</span></td></tr><tr><td><span style="font-size: small">LOW_PRIORITY</span></td><td><span style="font-size: small">MATCH</span></td><td><span style="font-size: small">MEDIUMBLOB</span></td></tr><tr><td><span style="font-size: small">MEDIUMINT</span></td><td><span style="font-size: small">MEDIUMTEXT</span></td><td><span style="font-size: small">MIDDLEINT</span></td></tr><tr><td><span style="font-size: small">MINUTE_MICROSECOND</span></td><td><span style="font-size: small">MINUTE_SECOND</span></td><td><span style="font-size: small">MOD</span></td></tr><tr><td><span style="font-size: small">MODIFIES</span></td><td><span style="font-size: small">NATURAL</span></td><td><span style="font-size: small">NOT</span></td></tr><tr><td><span style="font-size: small">NO_WRITE_TO_BINLOG</span></td><td><span style="font-size: small">NULL</span></td><td><span style="font-size: small">NUMERIC</span></td></tr><tr><td><span style="font-size: small">ON</span></td><td><span style="font-size: small">OPTIMIZE</span></td><td><span style="font-size: small">OPTION</span></td></tr><tr><td><span style="font-size: small">OPTIONALLY</span></td><td><span style="font-size: small">OR</span></td><td><span style="font-size: small">ORDER</span></td></tr><tr><td><span style="font-size: small">OUT</span></td><td><span style="font-size: small">OUTER</span></td><td><span style="font-size: small">OUTFILE</span></td></tr><tr><td><span style="font-size: small">PRECISION</span></td><td><span style="font-size: small">PRIMARY</span></td><td><span style="font-size: small">PROCEDURE</span></td></tr><tr><td><span style="font-size: small">PURGE</span></td><td><span style="font-size: small">RAID0</span></td><td><span style="font-size: small">RANGE</span></td></tr><tr><td><span style="font-size: small">READ</span></td><td><span style="font-size: small">READS</span></td><td><span style="font-size: small">REAL</span></td></tr><tr><td><span style="font-size: small">REFERENCES</span></td><td><span style="font-size: small">REGEXP</span></td><td><span style="font-size: small">RELEASE</span></td></tr><tr><td><span style="font-size: small">RENAME</span></td><td><span style="font-size: small">REPEAT</span></td><td><span style="font-size: small">REPLACE</span></td></tr><tr><td><span style="font-size: small">REQUIRE</span></td><td><span style="font-size: small">RESTRICT</span></td><td><span style="font-size: small">RETURN</span></td></tr><tr><td><span style="font-size: small">REVOKE</span></td><td><span style="font-size: small">RIGHT</span></td><td><span style="font-size: small">RLIKE</span></td></tr><tr><td><span style="font-size: small">SCHEMA</span></td><td><span style="font-size: small">SCHEMAS</span></td><td><span style="font-size: small">SECOND_MICROSECOND</span></td></tr><tr><td><span style="font-size: small">SELECT</span></td><td><span style="font-size: small">SENSITIVE</span></td><td><span style="font-size: small">SEPARATOR</span></td></tr><tr><td><span style="font-size: small">SET</span></td><td><span style="font-size: small">SHOW</span></td><td><span style="font-size: small">SMALLINT</span></td></tr><tr><td><span style="font-size: small">SPATIAL</span></td><td><span style="font-size: small">SPECIFIC</span></td><td><span style="font-size: small">SQL</span></td></tr><tr><td><span style="font-size: small">SQLEXCEPTION</span></td><td><span style="font-size: small">SQLSTATE</span></td><td><span style="font-size: small">SQLWARNING</span></td></tr><tr><td><span style="font-size: small">SQL_BIG_RESULT</span></td><td><span style="font-size: small">SQL_CALC_FOUND_ROWS</span></td><td><span style="font-size: small">SQL_SMALL_RESULT</span></td></tr><tr><td><span style="font-size: small">SSL</span></td><td><span style="font-size: small">STARTING</span></td><td><span style="font-size: small">STRAIGHT_JOIN</span></td></tr><tr><td><span style="font-size: small">TABLE</span></td><td><span style="font-size: small">TERMINATED</span></td><td><span style="font-size: small">THEN</span></td></tr><tr><td><span style="font-size: small">TINYBLOB</span></td><td><span style="font-size: small">TINYINT</span></td><td><span style="font-size: small">TINYTEXT</span></td></tr><tr><td><span style="font-size: small">TO</span></td><td><span style="font-size: small">TRAILING</span></td><td><span style="font-size: small">TRIGGER</span></td></tr><tr><td><span style="font-size: small">TRUE</span></td><td><span style="font-size: small">UNDO</span></td><td><span style="font-size: small">UNION</span></td></tr><tr><td><span style="font-size: small">UNIQUE</span></td><td><span style="font-size: small">UNLOCK</span></td><td><span style="font-size: small">UNSIGNED</span></td></tr><tr><td><span style="font-size: small">UPDATE</span></td><td><span style="font-size: small">USAGE</span></td><td><span style="font-size: small">USE</span></td></tr><tr><td><span style="font-size: small">USING</span></td><td><span style="font-size: small">UTC_DATE</span></td><td><span style="font-size: small">UTC_TIME</span></td></tr><tr><td><span style="font-size: small">UTC_TIMESTAMP</span></td><td><span style="font-size: small">VALUES</span></td><td><span style="font-size: small">VARBINARY</span></td></tr><tr><td><span style="font-size: small">VARCHAR</span></td><td><span style="font-size: small">VARCHARACTER</span></td><td><span style="font-size: small">VARYING</span></td></tr><tr><td><span style="font-size: small">WHEN</span></td><td><span style="font-size: small">WHERE</span></td><td><span style="font-size: small">WHILE</span></td></tr><tr><td><span style="font-size: small">WITH</span></td><td><span style="font-size: small">WRITE</span></td><td><span style="font-size: small">X509</span></td></tr><tr><td><span style="font-size: small">XOR</span></td><td><span style="font-size: small">YEAR_MONTH</span></td><td><span style="font-size: small">ZEROFILL</span></td></tr></tbody></table><br />MySQL允许部分关键字用做未引起来的识别符，因为许多人以前曾使用过它们。下面列出了一些例子： <br />ACTION <br />BIT <br />DATE <br />ENUM <br />NO <br />TEXT <br />TIME <br />TIMESTAMP <br /><br /><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/159044#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Jan 2008 13:20:56 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/159044</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/159044</guid>
      </item>
      <item>
        <title>WAP技术之WURFL学习笔记</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/145995" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/145995</a>&nbsp;
          发表时间: 2007年12月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: blue"><br />最近在做一个Wap网站，自己了解的不多，只好到处找资料。但是这方面的资料确实不是很多，自己稍微总结一下放在这里。<br />                        一、背景知识：<br />1、多服务：普适计算应用程序的多服务。是一个新兴概念，使internet应用程序能够为不同类型的请求客户机提供定制响应。（发展趋势）<br />2、不同的无线设备和浏览器都支持以下三种流行的标记语言：WML，XHTML，COMPACTHTML（CHTML）。<br />3、识别出试图访问应用程序的客户机是非常重要的。（也就是他的制造商和型号），然后检查一些设备描述数据库以便了解请求客户机的功能。<br />4、万维网联盟（W3C）Mobile Web Initiative 了解了设备描述在普适应用程序的重要姓之后发布了标题为“DeviceDescriotionLandscape”的工作草案。而本草案中所提到的设备描述计划之一就是名为WURFL的开放源码项目。<br />                               二、WURFL简介<br />1、WURFL是SourceForge.net上的一个开放源码项目。它定义设备描述的XML格式，并且包含有关名为wurfl.xml的XML文件中无线设备的一些重要信息。<br />2、wurfl.xml文件包含的设备描述信息：<br />	1）无线设备的制造商和型号<br />	2）每种类型的无线设备的user-agent字符串：通常情况下，客户机会将user-agent字符串随请求一起发送到web服务器，特定制造商和型号的所有设备都使用相同的user-agent字符串，因此可以使用这个请求字符串确定请求客户机。当web服务器接受到请求时它会从请求中听提取user-agent字符串，并检查wurfl.xml文件中读取其设备描述的过程<br />	3）无线设备的某些功能：wurfl.xml文件定义了这些功能对于不同的设备的值。设备功能连同其相对于某种设备的值便形成了特定设备的实际设备描述。wurfl定义的最重要的设备功能包括：显示字符，安全性相关特性以及无线设备支持的标记类型，样式，字体，图片格式。<br /><br />                             三、如何使用wurfl<br />1、JavaAPI：WURFL包含综合的，功能全面的JavaAPI，可以使用它来处理wurfl.xml.<br />这个API只需要知道来自请求客户机的user-agent字符串。它可以在内部解析“wurfl.xml”以了解发送user-agent字符串的的设备的功能。<br />2、Wall:WURFL随附的jsp标记库。用于构建多服务的JSP页面，Wall标签内部使用WURFL JavaAPI了解客户机设备的功能。<br />3、导航：服务器端WEB应用程序几乎总是具有支持导航的多个页面。这意味着WEB应用程序需要收集用户数据，并维护服务器端对象，这些对象打包用户数据，并在客户机导航应用程序时将该数据从一个页面发送到下一个页面。<br />4、JSF是一个标准的java框架，它定义了一种机制，能够在客户屏幕上呈现用户界面组件（如数据提交表单）的机制，收集用户数据并在服务器端管理这些数据。为了在Java应用程序中充分利用WURFL功能，需要将多服务支持整合到JSF中。这需要将WURFL和JSF一起放到实际的，多页面以及多服务的WEB应用程序中</span>
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/145995#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 04 Dec 2007 20:37:08 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/145995</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/145995</guid>
      </item>
      <item>
        <title>第一次去机房</title>
        <author>小苹果把</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaozhi-1983.javaeye.com">小苹果把</a>&nbsp;
          链接：<a href="http://zhaozhi-1983.javaeye.com/blog/145991" style="color:red;">http://zhaozhi-1983.javaeye.com/blog/145991</a>&nbsp;
          发表时间: 2007年12月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天和经理去南京西路给公司的项目配置服务器，长这么大第一次进这样大型的的机房，看着机房里一排排的机器，机器工作的轰轰的声音，还有各种服务器上绿色，红色闪烁着的指示灯。身处其中，，想一下，我们每天在用的各种各样的信息，我们在访问的各种各样的网络就是在这样的机房里，在这么多的服务器中传输着，真是有种很奇妙的感受。<br /><br />    不过在里面待的时间长了就没有什么好的感觉了，虽然里面的散热很好，但还是感觉很热，机器的响声也够让人受的！
          <br/>
          <span style="color:red;">
            <a href="http://zhaozhi-1983.javaeye.com/blog/145991#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 04 Dec 2007 20:26:44 +0800</pubDate>
        <link>http://zhaozhi-1983.javaeye.com/blog/145991</link>
        <guid>http://zhaozhi-1983.javaeye.com/blog/145991</guid>
      </item>
  </channel>
</rss>