<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>herenhuang</title>
    <description>孤孤单单一个人</description>
    <link>http://herenhuang.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>jsp 乱码问题的解决</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/202343" style="color:red;">http://herenhuang.javaeye.com/blog/202343</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近遇到一个乱码问题，在jsp中通过get的方式提交，但是通过request.getParameter方法得到乱码.我使用的的jetty服务器，所以一直想通过filter，jsp encoding的方式解决。尝试了n种方法都没有成功，最后没有办法，使用tomcat来测试，并修改了tomcat的server.xml<br />如下：<br /> &lt;Connector port="8080" maxHttpHeaderSize="8192"<br />               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />               enableLookups="false" redirectPort="8443" acceptCount="100"<br />               connectionTimeout="20000" disableUploadTimeout="true"<br />               URIEncoding="GBK" /><br /><br />增加URIEncoding="GBK"，问题搞定，看来jetty也可以这样去配置了。
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/202343#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, 12 Jun 2008 08:36:26 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/202343</link>
        <guid>http://herenhuang.javaeye.com/blog/202343</guid>
      </item>
      <item>
        <title>java的反编译</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/201560" style="color:red;">http://herenhuang.javaeye.com/blog/201560</a>&nbsp;
          发表时间: 2008年06月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一般意义上来说，去反编译别人的代码是不对的，不过为了研究应该是触犯法律的吧。现在大家使用的比较多的还是jad。<br />jad -o -r -sjava -d src bin/**/*.class<br /><br />src: 是反組後的目錄<br />bin:指 package 開頭<br />将bin里面所有的.class反编译到src下面<br /><br />当然反编译的代码由于jvm优化了，所以得到的并不是完全的java代码，还有部分伪代码在里面。大家如果有这边方面的资料是不是可以共享一下尼？
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/201560#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>Mon, 09 Jun 2008 20:47:31 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/201560</link>
        <guid>http://herenhuang.javaeye.com/blog/201560</guid>
      </item>
      <item>
        <title>webobjects的问题</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/201404" style="color:red;">http://herenhuang.javaeye.com/blog/201404</a>&nbsp;
          发表时间: 2008年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          很久没有更新blog了。虽然也常常来看看。<br />最近在研究一个project，发现在其的web app下面有个文件路径<br />WEB-INF\Library\FrameWorks<br /><br /> CnPower.framework<br /> JavaEOAccess.framework<br /> JavaEOControl.framework<br /> JavaFoundation.framework<br /> JavaJDBCAdaptor.framework<br /> JavaWebObjects.framework<br /> JavaWebServicesClient.framework<br /> JavaWebServicesSupport.framework<br /> JavaWOExtensions.framework<br /> JavaWOJSPServlet.framework<br /> JavaXML.framework<br /><br />这样的一些文件夹，google了一下，貌似是说apple的webobjecets，有熟悉的吗？麻烦介绍一下，是怎末开发和部署的。
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/201404#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>Sun, 08 Jun 2008 20:01:41 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/201404</link>
        <guid>http://herenhuang.javaeye.com/blog/201404</guid>
      </item>
      <item>
        <title>oracle2mysql</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/191495" style="color:red;">http://herenhuang.javaeye.com/blog/191495</a>&nbsp;
          发表时间: 2008年05月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近在研究一个project，这个project是使用oracle做数据库开发的，在自己的本子上面跑一个oraclexe，资源耗费的太多了，导致影响工作效率。所以决定merge一下数据库，从oracle2mysql。<br />（1）使用mysql的merge tools，merge数据库表，<br />（2）修改hbm.xml 的sequence，使用native。<br />（3）增加配置文件，配置数据库类型。<br />（4）修改代码，从配置文件中读出是那种数据库，替换其函数。<br /><br /><br />在merge过程中出现一个错误<br />result set: ; Column '' not found. <br />WARN : 2007-11-23 13:22:09,404: JDBCExceptionReporter[line:71}: SQL Error: 0, SQLState: S0022 <br />ERROR: 2007-11-23 13:22:09,404: JDBCExceptionReporter[line:72}: Column '' not found. <br />Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query <br />at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67) <br /><br />这个错误研究了几个小时，尝试了多种方式，最后才发现，其实只需要替换一下驱动jar就ok了。
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/191495#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, 09 May 2008 17:00:16 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/191495</link>
        <guid>http://herenhuang.javaeye.com/blog/191495</guid>
      </item>
      <item>
        <title>mysql migration tools</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/190364" style="color:red;">http://herenhuang.javaeye.com/blog/190364</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我们一般开发都是使用轻量级的开发工具来做开发，测试，这个带好的好处非常明显<br />（1）快速的开发部署，在一些项目中我们也可以看到一些项目想在本地测试，发现一些开发人员开着一个weblogic，再开一个oracle，eclipse，就这个三个tools，想象一下这个开发速度会是怎样的。<br /><br />（2）多环境测试<br /><br />最好的开发模式应该是maven+maven（jetty）+junit来做测试。今天研究了一下mysql migration tools，发现这个tools非常的好用。<br />http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-noinstall-5.0-r12-win32.zip/from/pick?done=f03bcf714852ad
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/190364#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>Tue, 06 May 2008 20:05:14 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/190364</link>
        <guid>http://herenhuang.javaeye.com/blog/190364</guid>
      </item>
      <item>
        <title>mysql 乱码研究</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/190337" style="color:red;">http://herenhuang.javaeye.com/blog/190337</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天研究了一下mysql的乱码问题，总结如下：<br /><br />（1）设置mysql的my.ini的编码为gbk<br />（2）设置database的default character set gbk;<br />create database xxxx default character set gbk;<br />(3)在create表的时候设置character set gbk。<br /><br />这样就应该没有问题了，如果还有问题，设置jdbc.url<br />jdbc.url=jdbc:mysql://localhost:3306/xxxx?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=gbk
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/190337#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, 06 May 2008 18:15:32 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/190337</link>
        <guid>http://herenhuang.javaeye.com/blog/190337</guid>
      </item>
      <item>
        <title>Struts1 和Struts12的区别</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/189916" style="color:red;">http://herenhuang.javaeye.com/blog/189916</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          类: <br />• Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 <br />• Struts 2 Action类可以实现一个Action接口，也可实现其他接口，使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去 实现 常用的接口。Action接口不是必须的，任何有execute标识的POJO对象都可以用作Struts2的Action对象。 <br />线程模式: <br />• Struts1 Action是单例模式并且必须是线程安全的，因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事，并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 <br />• Struts2 Action对象为每一个请求产生一个实例，因此没有线程安全问题。（实际上，servlet容器给每个请求产生许多可丢弃的对象，并且不会导致性能和垃圾回收问题） <br /><br />Servlet 依赖: <br />• Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。 <br />• Struts 2 Action不依赖于容器，允许Action脱离容器单独被测试。如果需要，Struts2 Action仍然可以访问初始的request和response。但是，其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 <br /><br />可测性: <br />• 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API（这使得测试要依赖于容器）。一个第三方扩展－－Struts TestCase－－提供了一套Struts1的模拟对象（来进行测试）。 <br />• Struts 2 Action可以通过初始化、设置属性、调用方法来测试，“依赖注入”支持也使测试更容易。 <br /><br />捕获输入: <br />• Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm，开发者经 常创建多余的类捕获输入。动态Bean（DynaBeans）可以作为创建传统ActionForm的选择，但是，开发者可能是在重新描述(创建)已经存 在的JavaBean（仍然会导致有冗余的javabean）。 <br />• Struts 2直接使用Action属性作为输入属性，消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型，包括业务对象，能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。 <br /><br />表达式语言： <br />• Struts1 整合了JSTL，因此使用JSTL EL。这种EL有基本对象图遍历，但是对集合和索引属性的支持很弱。 <br />• Struts2可以使用JSTL，但是也支持一个更强大和灵活的表达式语言－－"Object Graph Notation Language" (OGNL). <br /><br />绑定值到页面（view）: <br />• Struts 1使用标准JSP机制把对象绑定到页面中来访问。 <br />• Struts 2 使用 "ValueStack"技术，使taglib能够访问值而不需要把你的页面（view）和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面（view）。 <br />　 <br />类型转换： <br />• Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器，对每一个实例来说是不可配置的。 <br />• Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。 <br /><br />校验： <br />• Struts 1支持在ActionForm的validate方法中手动校验，或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容，但不能校验子对象。 <br />• Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验，来支持chain校验子属性 <br /><br />Action执行的控制： <br />• Struts1支持每一个模块有单独的Request Processors（生命周期），但是模块中的所有Action必须共享相同的生命周期。 <br />• Struts2支持通过拦截器堆栈（Interceptor Stacks）为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/189916#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>Mon, 05 May 2008 21:36:55 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/189916</link>
        <guid>http://herenhuang.javaeye.com/blog/189916</guid>
      </item>
      <item>
        <title>cvsnt 的使用</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/188918" style="color:red;">http://herenhuang.javaeye.com/blog/188918</a>&nbsp;
          发表时间: 2008年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          cvsnt是windows版的cvs 服务器。<br />安装详细情况可以参考：<br />http://web.telia.com/~u86216177/InstallCVSNT25.html<br /><br />在安装完成之后，需要创建用户<br />运行--cmd<br />set cvsroot=:sspi:&lt;computername>:/TEST<br />cvs passwd -a &lt;account name><br /><br />需要注意的是，用户需要windows文件操作权限。
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/188918#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, 02 May 2008 21:22:47 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/188918</link>
        <guid>http://herenhuang.javaeye.com/blog/188918</guid>
      </item>
      <item>
        <title>cvsnt 的使用</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/188917" style="color:red;">http://herenhuang.javaeye.com/blog/188917</a>&nbsp;
          发表时间: 2008年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          cvsnt是windows版的cvs 服务器。<br />安装详细情况可以参考：<br />http://web.telia.com/~u86216177/InstallCVSNT25.html<br /><br />在安装完成之后，需要创建用户<br />运行--cmd<br />set cvsroot=:sspi:&lt;computername>:/TEST<br />cvs passwd -a &lt;account name><br /><br />需要注意的是，用户需要windows文件操作权限。
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/188917#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, 02 May 2008 21:22:46 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/188917</link>
        <guid>http://herenhuang.javaeye.com/blog/188917</guid>
      </item>
      <item>
        <title>slf4j的使用</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/188765" style="color:red;">http://herenhuang.javaeye.com/blog/188765</a>&nbsp;
          发表时间: 2008年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近看在infoq上面看到slf4j的介绍，就到slf4j的网站上看了看，发现还是不错的。<br />大部分开发人员最喜欢用的还是log4j，这个其中可能是因为jdk在1.5才用logs的pack。还有部分人使用commons-logger。<br />     log4j不用说，比起jdk和common-logger还是有优势的。commons-logger我认为都不是鸡肋，完全没有使用的必要，要不你就使用log4j要不就直接使用jdk。<br />    下面对slf4j和log4j做一下总结：<br />（1）大部分人在程序里面会去写logger.error(exception),其实这个时候log4j回去把这个exception tostring。真正的写法应该是logger(message.exception);而slf4j就不会使得程序员犯这个错误。<br /><br />(2)log4j间接的在鼓励程序员使用string相加的写法，而slf4j就不会有这个问题<br />你可以使用logger.error("{} is+serviceid",serviceid);<br /><br />（3）使用slf4j可以方便的使用其提供的各种集体的实现的jar。（类似commons-logger）<br /><br />（4）从commons--logger和log4j merge非常方便，slf4j也提供了一个swing的tools来帮助大家完成这个merge。
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/188765#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, 02 May 2008 10:11:18 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/188765</link>
        <guid>http://herenhuang.javaeye.com/blog/188765</guid>
      </item>
      <item>
        <title>jetspeed在weblogic部署</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/180198" style="color:red;">http://herenhuang.javaeye.com/blog/180198</a>&nbsp;
          发表时间: 2008年04月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在weblogic部署应该修改：
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/180198#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, 07 Apr 2008 17:34:20 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/180198</link>
        <guid>http://herenhuang.javaeye.com/blog/180198</guid>
      </item>
      <item>
        <title>opencms的locale</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/180415" style="color:red;">http://herenhuang.javaeye.com/blog/180415</a>&nbsp;
          发表时间: 2008年03月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近研究了一下opencms的locale，总结如下：<br />
(1)opencms 在启动的时候会设置locale为en。<br />
(2)可以在folder上面设置locale，如果本级locale没有设置使用父级的，如果还是为空使用en。<br />
</p>

          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/180415#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, 17 Mar 2008 22:25:00 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/180415</link>
        <guid>http://herenhuang.javaeye.com/blog/180415</guid>
      </item>
      <item>
        <title>2008年上半年计划（2---7月）</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/180416" style="color:red;">http://herenhuang.javaeye.com/blog/180416</a>&nbsp;
          发表时间: 2008年03月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; </p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">本年度的学习主要围绕当前的工作主题和自己比较有兴趣的内容制定此计划。</span></p>
<p style="text-indent: 21pt"><strong>2008-2</strong><strong><span style="font-family: 宋体">月</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）</span>opencms</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">进一步熟悉</span>jsp170<span style="font-family: 宋体">规范，比较</span>opencms7<span style="font-family: 宋体">比当前我们使用的</span>opencms6.2.3<span style="font-family: 宋体">的改进。熟悉</span>opencms user manager<span style="font-family: 宋体">，权限，模块开发，</span>site development<span style="font-family: 宋体">。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>2<span style="font-family: 宋体">）整理，编写</span>opencms<span style="font-family: 宋体">的开发文档</span></p>
<p style="text-indent: 21pt"><strong>2008-3</strong><strong><span style="font-family: 宋体">月</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）</span>sso<span style="font-family: 宋体">，分析当前</span>sso<span style="font-family: 宋体">的现状。了解使用</span>sso<span style="font-family: 宋体">带来的好处。配置和使用</span>cas<span style="font-family: 宋体">做练习。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>2<span style="font-family: 宋体">）</span>weblogic ssl<span style="font-family: 宋体">配置。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>3<span style="font-family: 宋体">）</span>openssl<span style="font-family: 宋体">的使用。</span></p>
<p style="text-indent: 21pt"><strong>2008-4</strong><strong><span style="font-family: 宋体">月</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）</span>jetspeed <span style="font-family: 宋体">学习</span>jsr268<span style="font-family: 宋体">规范，了解和</span>jsr168<span style="font-family: 宋体">的区别和改动。进一步分析</span>jetspeed<span style="font-family: 宋体">的</span>sso<span style="font-family: 宋体">实现。</span>porelet<span style="font-family: 宋体">定制实现。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>2<span style="font-family: 宋体">）研究</span>mvnforum<span style="font-family: 宋体">的配置和使用。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>3<span style="font-family: 宋体">）企业门户研究，研究企业门户应该满足那些功能，怎么更好的实现。</span></p>
<p style="text-indent: 21pt"><strong>2008-5</strong><strong><span style="font-family: 宋体">月</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）</span>webservice<span style="font-family: 宋体">，分析和学习</span>apache<span style="font-family: 宋体">的</span>webservice<span style="font-family: 宋体">实现。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>2<span style="font-family: 宋体">）</span>etom<span style="font-family: 宋体">模型的</span>sid<span style="font-family: 宋体">规范。</span></p>
<p style="text-indent: 21pt"><strong>2008-6</strong><strong><span style="font-family: 宋体">月</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）</span>osgi<span style="font-family: 宋体">，学习</span>osgi<span style="font-family: 宋体">的规范，在设计中应该怎么使用</span>osgi<span style="font-family: 宋体">思想。</span></p>
<p style="text-indent: 21pt"><strong>2008-7</strong><strong><span style="font-family: 宋体">月</span></strong></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">（</span>1<span style="font-family: 宋体">）</span>jpa<span style="font-family: 宋体">的使用和实现。</span></p>
<p><br />
&nbsp;</p>

          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/180416#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>Sat, 08 Mar 2008 22:30:00 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/180416</link>
        <guid>http://herenhuang.javaeye.com/blog/180416</guid>
      </item>
      <item>
        <title>我的apache-httpd.conf</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/180417" style="color:red;">http://herenhuang.javaeye.com/blog/180417</a>&nbsp;
          发表时间: 2007年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;#<br />
# Based upon the NCSA server configuration files originally by Rob McCool.<br />
#<br />
# This is the main Apache server configuration file.&nbsp; It contains the<br />
# configuration directives that give the server its instructions.<br />
# See &lt;URL:http://httpd.apache.org/docs/2.0/&gt; for detailed information about<br />
# the directives.<br />
#<br />
# Do NOT simply read the instructions in here without understanding<br />
# what they do.&nbsp; They're here only as hints or reminders.&nbsp; If you are unsure<br />
# consult the online docs. You have been warned.&nbsp; <br />
#<br />
# The configuration directives are grouped into three basic sections:<br />
#&nbsp; 1. Directives that control the operation of the Apache server process as a<br />
#&nbsp;&nbsp;&nbsp;&nbsp; whole (the 'global environment').<br />
#&nbsp; 2. Directives that define the parameters of the 'main' or 'default' server,<br />
#&nbsp;&nbsp;&nbsp;&nbsp; which responds to requests that aren't handled by a virtual host.<br />
#&nbsp;&nbsp;&nbsp;&nbsp; These directives also provide default values for the settings<br />
#&nbsp;&nbsp;&nbsp;&nbsp; of all virtual hosts.<br />
#&nbsp; 3. Settings for virtual hosts, which allow Web requests to be sent to<br />
#&nbsp;&nbsp;&nbsp;&nbsp; different IP addresses or hostnames and have them handled by the<br />
#&nbsp;&nbsp;&nbsp;&nbsp; same Apache server process.<br />
#<br />
# Configuration and logfile names: If the filenames you specify for many<br />
# of the server's control files begin with "/" (or "drive:/" for Win32), the<br />
# server will use that explicit path.&nbsp; If the filenames do *not* begin<br />
# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"<br />
# with ServerRoot set to "/usr/local/apache" will be interpreted by the<br />
# server as "/usr/local/apache/logs/foo.log".<br />
#</p>
<p>### Section 1: Global Environment<br />
#<br />
# The directives in this section affect the overall operation of Apache,<br />
# such as the number of concurrent requests it can handle or where it<br />
# can find its configuration files.<br />
#</p>
<p>#<br />
# ServerRoot: The top of the directory tree under which the server's<br />
# configuration, error, and log files are kept.<br />
#<br />
# NOTE!&nbsp; If you intend to place this on an NFS (or otherwise network)<br />
# mounted filesystem then please read the LockFile documentation (available<br />
# at &lt;URL:http://httpd.apache.org/docs/2.0/mod/mpm_common.html#lockfile&gt;);<br />
# you will save yourself a lot of trouble.<br />
#<br />
# Do NOT add a slash at the end of the directory path.<br />
#<br />
ServerRoot "/usr/local/apache"</p>
<p>#<br />
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.<br />
#<br />
&lt;IfModule !mpm_winnt.c&gt;<br />
&lt;IfModule !mpm_netware.c&gt;<br />
#LockFile logs/accept.lock<br />
&lt;/IfModule&gt;<br />
&lt;/IfModule&gt;</p>
<p>#<br />
# ScoreBoardFile: File used to store internal server process information.<br />
# If unspecified (the default), the scoreboard will be stored in an<br />
# anonymous shared memory segment, and will be unavailable to third-party<br />
# applications.<br />
# If specified, ensure that no two invocations of Apache share the same<br />
# scoreboard file. The scoreboard file MUST BE STORED ON A LOCAL DISK.<br />
#<br />
&lt;IfModule !mpm_netware.c&gt;<br />
&lt;IfModule !perchild.c&gt;<br />
#ScoreBoardFile logs/apache_runtime_status<br />
&lt;/IfModule&gt;<br />
&lt;/IfModule&gt;</p>
<p><br />
#<br />
# PidFile: The file in which the server should record its process<br />
# identification number when it starts.<br />
#<br />
&lt;IfModule !mpm_netware.c&gt;<br />
PidFile logs/httpd.pid<br />
&lt;/IfModule&gt;</p>
<p><br />
#<br />
# Timeout: The number of seconds before receives and sends time out.<br />
#<br />
Timeout 300</p>
<p>#<br />
# KeepAlive: Whether or not to allow persistent connections (more than<br />
# one request per connection). Set to "Off" to deactivate.<br />
#<br />
KeepAlive On</p>
<p>#<br />
# MaxKeepAliveRequests: The maximum number of requests to allow<br />
# during a persistent connection. Set to 0 to allow an unlimited amount.<br />
# We recommend you leave this number high, for maximum performance.<br />
#<br />
MaxKeepAliveRequests 1000</p>
<p>#<br />
# KeepAliveTimeout: Number of seconds to wait for the next request from the<br />
# same client on the same connection.<br />
#<br />
KeepAliveTimeout 15</p>
<p>##<br />
## Server-Pool Size Regulation (MPM specific)<br />
## </p>
<p># prefork MPM<br />
# StartServers: number of server processes to start<br />
# MinSpareServers: minimum number of server processes which are kept spare<br />
# MaxSpareServers: maximum number of server processes which are kept spare<br />
# MaxClients: maximum number of server processes allowed to start<br />
# MaxRequestsPerChild: maximum number of requests a server process serves<br />
&lt;IfModule prefork.c&gt;<br />
#StartServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br />
#MinSpareServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br />
#MaxSpareServers&nbsp;&nbsp;&nbsp;&nbsp; 10<br />
#MaxClients&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 150<br />
#MaxRequestsPerChild&nbsp; 0<br />
ServerLimit 1000 <br />
StartServers 10 <br />
MinSpareServers 10 <br />
MaxSpareServers 15 <br />
MaxClients 1000 <br />
MaxRequestsPerChild 10000<br />
&lt;/IfModule&gt;</p>
<p>ExpiresActive on<br />
ExpiresByType image/gif A2592000 <br />
ExpiresByType text/js A2592000 <br />
ExpiresByType text/css A2592000 <br />
ExpiresByType application/x-js A2592000 <br />
ExpiresByType image/jpeg A2592000 <br />
ExpiresByType application/javascript A2592000 <br />
ExpiresByType application/x-javascript A2592000 <br />
ExpiresByType image/png A2592000 <br />
ExpiresByType application/x-shockwave-flash A2592000 </p>
<p># worker MPM<br />
# StartServers: initial number of server processes to start<br />
# MaxClients: maximum number of simultaneous client connections<br />
# MinSpareThreads: minimum number of worker threads which are kept spare<br />
# MaxSpareThreads: maximum number of worker threads which are kept spare<br />
# ThreadsPerChild: constant number of worker threads in each server process<br />
# MaxRequestsPerChild: maximum number of requests a server process serves<br />
&lt;IfModule worker.c&gt;<br />
StartServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br />
MaxClients&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 150<br />
MinSpareThreads&nbsp;&nbsp;&nbsp;&nbsp; 25<br />
MaxSpareThreads&nbsp;&nbsp;&nbsp;&nbsp; 75 <br />
ThreadsPerChild&nbsp;&nbsp;&nbsp;&nbsp; 25<br />
MaxRequestsPerChild&nbsp; 0<br />
&lt;/IfModule&gt;</p>
<p># perchild MPM<br />
# NumServers: constant number of server processes<br />
# StartThreads: initial number of worker threads in each server process<br />
# MinSpareThreads: minimum number of worker threads which are kept spare<br />
# MaxSpareThreads: maximum number of worker threads which are kept spare<br />
# MaxThreadsPerChild: maximum number of worker threads in each server process<br />
# MaxRequestsPerChild: maximum number of connections per server process<br />
&lt;IfModule perchild.c&gt;<br />
NumServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br />
StartThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br />
MinSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br />
MaxSpareThreads&nbsp;&nbsp;&nbsp;&nbsp; 10<br />
MaxThreadsPerChild&nbsp; 20<br />
MaxRequestsPerChild&nbsp; 0<br />
&lt;/IfModule&gt;</p>
<p># WinNT MPM<br />
# ThreadsPerChild: constant number of worker threads in the server process<br />
# MaxRequestsPerChild: maximum&nbsp; number of requests a server process serves<br />
&lt;IfModule mpm_winnt.c&gt;<br />
ThreadsPerChild 250<br />
MaxRequestsPerChild&nbsp; 0<br />
&lt;/IfModule&gt;</p>
<p># BeOS MPM<br />
# StartThreads: how many threads do we initially spawn?<br />
# MaxClients:&nbsp;&nbsp; max number of threads we can have (1 thread == 1 client)<br />
# MaxRequestsPerThread: maximum number of requests each thread will process<br />
&lt;IfModule beos.c&gt;<br />
StartThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<br />
MaxClients&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50<br />
MaxRequestsPerThread&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000<br />
&lt;/IfModule&gt;&nbsp;&nbsp;&nbsp; </p>
<p># NetWare MPM<br />
# ThreadStackSize: Stack size allocated for each worker thread<br />
# StartThreads: Number of worker threads launched at server startup<br />
# MinSpareThreads: Minimum number of idle threads, to handle request spikes<br />
# MaxSpareThreads: Maximum number of idle threads<br />
# MaxThreads: Maximum number of worker threads alive at the same time<br />
# MaxRequestsPerChild: Maximum&nbsp; number of requests a thread serves. It is <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recommended that the default value of 0 be set for this<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directive on NetWare.&nbsp; This will allow the thread to <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue to service requests indefinitely.&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 />
&lt;IfModule mpm_netware.c&gt;<br />
ThreadStackSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65536<br />
StartThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 250<br />
MinSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25<br />
MaxSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 250<br />
MaxThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1000<br />
MaxRequestsPerChild&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br />
MaxMemFree&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100<br />
&lt;/IfModule&gt;</p>
<p># OS/2 MPM<br />
# StartServers: Number of server processes to maintain<br />
# MinSpareThreads: Minimum number of idle threads per process, <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to handle request spikes<br />
# MaxSpareThreads: Maximum number of idle threads per process<br />
# MaxRequestsPerChild: Maximum number of connections per server process<br />
&lt;IfModule mpmt_os2.c&gt;<br />
StartServers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br />
MinSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5<br />
MaxSpareThreads&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<br />
MaxRequestsPerChild&nbsp;&nbsp;&nbsp; 0<br />
&lt;/IfModule&gt;</p>
<p>#<br />
# Listen: Allows you to bind Apache to specific IP addresses and/or<br />
# ports, instead of the default. See also the &lt;VirtualHost&gt;<br />
# directive.<br />
#<br />
# Change this to Listen on specific IP addresses as shown below to <br />
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)<br />
#<br />
#Listen 12.34.56.78:80</p>
<p>Listen 80</p>
<p>#<br />
# Dynamic Shared Object (DSO) Support<br />
#<br />
# To be able to use the functionality of a module which was built as a DSO you<br />
# have to place corresponding `LoadModule' lines at this location so the<br />
# directives contained in it are actually available _before_ they are used.<br />
# Statically compiled modules (those listed by `httpd -l') do not need<br />
# to be loaded here.<br />
#<br />
# Example:<br />
# LoadModule foo_module modules/mod_foo.so<br />
#<br />
LoadModule access_module modules/mod_access.so<br />
LoadModule auth_module modules/mod_auth.so<br />
LoadModule auth_anon_module modules/mod_auth_anon.so<br />
LoadModule auth_dbm_module modules/mod_auth_dbm.so<br />
LoadModule auth_digest_module modules/mod_auth_digest.so<br />
LoadModule ext_filter_module modules/mod_ext_filter.so<br />
LoadModule include_module modules/mod_include.so<br />
LoadModule log_config_module modules/mod_log_config.so<br />
LoadModule log_forensic_module modules/mod_log_forensic.so<br />
LoadModule env_module modules/mod_env.so<br />
LoadModule mime_magic_module modules/mod_mime_magic.so<br />
LoadModule cern_meta_module modules/mod_cern_meta.so<br />
LoadModule expires_module modules/mod_expires.so<br />
LoadModule headers_module modules/mod_headers.so<br />
LoadModule usertrack_module modules/mod_usertrack.so<br />
LoadModule unique_id_module modules/mod_unique_id.so<br />
LoadModule setenvif_module modules/mod_setenvif.so<br />
LoadModule version_module modules/mod_version.so<br />
LoadModule mime_module modules/mod_mime.so<br />
LoadModule dav_module modules/mod_dav.so<br />
LoadModule status_module modules/mod_status.so<br />
LoadModule autoindex_module modules/mod_autoindex.so<br />
LoadModule asis_module modules/mod_asis.so<br />
LoadModule info_module modules/mod_info.so<br />
LoadModule cgi_module modules/mod_cgi.so<br />
LoadModule dav_fs_module modules/mod_dav_fs.so<br />
LoadModule vhost_alias_module modules/mod_vhost_alias.so<br />
LoadModule negotiation_module modules/mod_negotiation.so<br />
LoadModule dir_module modules/mod_dir.so<br />
LoadModule imap_module modules/mod_imap.so<br />
LoadModule actions_module modules/mod_actions.so<br />
LoadModule speling_module modules/mod_speling.so<br />
LoadModule userdir_module modules/mod_userdir.so<br />
LoadModule alias_module modules/mod_alias.so<br />
LoadModule rewrite_module modules/mod_rewrite.so<br />
LoadModule deflate_module modules/mod_deflate.so</p>
<p><br />
#<br />
# ExtendedStatus controls whether Apache will generate "full" status<br />
# information (ExtendedStatus On) or just basic information (ExtendedStatus<br />
# Off) when the "server-status" handler is called. The default is Off.<br />
#<br />
ExtendedStatus On</p>
<p>### Section 2: 'Main' server configuration<br />
#<br />
# The directives in this section set up the values used by the 'main'<br />
# server, which responds to any requests that aren't handled by a<br />
# &lt;VirtualHost&gt; definition.&nbsp; These values also provide defaults for<br />
# any &lt;VirtualHost&gt; containers you may define later in the file.<br />
#<br />
# All of these directives may appear inside &lt;VirtualHost&gt; containers,<br />
# in which case these default settings will be overridden for the<br />
# virtual host being defined.<br />
#</p>
<p>&lt;IfModule !mpm_winnt.c&gt;<br />
&lt;IfModule !mpm_netware.c&gt;<br />
#<br />
# If you wish httpd to run as a different user or group, you must run<br />
# httpd as root initially and it will switch.&nbsp; <br />
#<br />
# User/Group: The name (or #number) of the user/group to run httpd as.<br />
#&nbsp; . On SCO (ODT 3) use "User nouser" and "Group nogroup".<br />
#&nbsp; . On HPUX you may not be able to use shared memory as nobody, and the<br />
#&nbsp;&nbsp;&nbsp; suggested workaround is to create a user www and use that user.<br />
#&nbsp; NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)<br />
#&nbsp; when the value of (unsigned)Group is above 60000; <br />
#&nbsp; don't use Group #-1 on these systems!<br />
#<br />
User nobody<br />
Group #-1<br />
&lt;/IfModule&gt;<br />
&lt;/IfModule&gt;</p>
<p>#<br />
# ServerAdmin: Your address, where problems with the server should be<br />
# e-mailed.&nbsp; This address appears on some server-generated pages, such<br />
# as error documents.&nbsp; e.g. admin@your-domain.com<br />
#<br />
ServerAdmin you@example.com</p>
<p>#<br />
# ServerName gives the name and port that the server uses to identify itself.<br />
# This can often be determined automatically, but we recommend you specify<br />
# it explicitly to prevent problems during startup.<br />
#<br />
# If this is not set to valid DNS name for your host, server-generated<br />
# redirections will not work.&nbsp; See also the UseCanonicalName directive.<br />
#<br />
# If your host doesn't have a registered DNS name, enter its IP address here.<br />
# You will have to access it by its address anyway, and this will make <br />
# redirections work in a sensible way.<br />
#<br />
#ServerName www.example.com:80</p>
<p>#<br />
# UseCanonicalName: Determines how Apache constructs self-referencing <br />
# URLs and the SERVER_NAME and SERVER_PORT variables.<br />
# When set "Off", Apache will use the Hostname and Port supplied<br />
# by the client.&nbsp; When set "On", Apache will use the value of the<br />
# ServerName directive.<br />
#<br />
UseCanonicalName Off</p>
<p>#<br />
# DocumentRoot: The directory out of which you will serve your<br />
# documents. By default, all requests are taken from this directory, but<br />
# symbolic links and aliases may be used to point to other locations.<br />
#<br />
DocumentRoot "/mync/"</p>
<p>#<br />
# Each directory to which Apache has access can be configured with respect<br />
# to which services and features are allowed and/or disabled in that<br />
# directory (and its subdirectories). <br />
#<br />
# First, we configure the "default" to be a very restrictive set of <br />
# features.&nbsp; <br />
#<br />
&lt;Directory /&gt;<br />
&nbsp;&nbsp;&nbsp; Options FollowSymLinks<br />
&nbsp;&nbsp;&nbsp; AllowOverride None<br />
&nbsp;&nbsp;&nbsp; #RedirectMatch 301 ^/$ /mync/<br />
&nbsp;&nbsp;&nbsp; RedirectMatch 301 ^/$ /mync/portal/default-page.psml<br />
&lt;/Directory&gt;</p>
<p>#<br />
# Note that from this point forward you must specifically allow<br />
# particular features to be enabled - so if something's not working as<br />
# you might expect, make sure that you have specifically enabled it<br />
# below.<br />
#</p>
<p>#<br />
# This should be changed to whatever you set DocumentRoot to.<br />
#<br />
&lt;Directory "/mync"&gt;</p>
<p>#<br />
# Possible values for the Options directive are "None", "All",<br />
# or any combination of:<br />
#&nbsp;&nbsp; Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews<br />
#<br />
# Note that "MultiViews" must be named *explicitly* --- "Options All"<br />
# doesn't give it to you.<br />
#<br />
# The Options directive is both complicated and important.&nbsp; Please see<br />
# http://httpd.apache.org/docs/2.0/mod/core.html#options<br />
# for more information.<br />
#<br />
#&nbsp;&nbsp;&nbsp; Options Indexes FollowSymLinks<br />
&nbsp;&nbsp; Options None<br />
#<br />
# AllowOverride controls what directives may be placed in .htaccess files.<br />
# It can be "All", "None", or any combination of the keywords:<br />
#&nbsp;&nbsp; Options FileInfo AuthConfig Limit Indexes<br />
#<br />
&nbsp;&nbsp;&nbsp; AllowOverride None</p>
<p>#<br />
# Controls who can get stuff from this server.<br />
#<br />
#&nbsp;&nbsp;&nbsp; Order allow,deny<br />
#&nbsp;&nbsp;&nbsp; Allow from all</p>
<p>&lt;/Directory&gt;</p>
<p>&nbsp;</p>
<p>#<br />
# UserDir: The name of the directory that is appended onto a user's home<br />
# directory if a ~user request is received.<br />
#<br />
UserDir public_html</p>
<p>#<br />
# Control access to UserDir directories.&nbsp; The following is an example<br />
# for a site where these directories are restricted to read-only.<br />
#<br />
#&lt;Directory /home/*/public_html&gt;<br />
#&nbsp;&nbsp;&nbsp; AllowOverride FileInfo AuthConfig Limit Indexes<br />
#&nbsp;&nbsp;&nbsp; Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec<br />
#&nbsp;&nbsp;&nbsp; &lt;Limit GET POST OPTIONS PROPFIND&gt;<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow from all<br />
#&nbsp;&nbsp;&nbsp; &lt;/Limit&gt;<br />
#&nbsp;&nbsp;&nbsp; &lt;LimitExcept GET POST OPTIONS PROPFIND&gt;<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order deny,allow<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Deny from all<br />
#&nbsp;&nbsp;&nbsp; &lt;/LimitExcept&gt;<br />
#&lt;/Directory&gt;</p>
<p>#<br />
# DirectoryIndex: sets the file that Apache will serve if a directory<br />
# is requested.<br />
#<br />
# The index.html.var file (a type-map) is used to deliver content-<br />
# negotiated documents.&nbsp; The MultiViews Option can be used for the <br />
# same purpose, but it is much slower.<br />
#<br />
DirectoryIndex index.html index.html.var</p>
<p>#<br />
# AccessFileName: The name of the file to look for in each directory<br />
# for additional configuration directives.&nbsp; See also the AllowOverride <br />
# directive.<br />
#<br />
AccessFileName .htaccess</p>
<p>#<br />
# The following lines prevent .htaccess and .htpasswd files from being <br />
# viewed by Web clients. <br />
#<br />
&lt;FilesMatch "^\.ht"&gt;<br />
&nbsp;&nbsp;&nbsp; Order allow,deny<br />
&nbsp;&nbsp;&nbsp; Deny from all<br />
&lt;/FilesMatch&gt;</p>
<p>#<br />
# TypesConfig describes where the mime.types file (or equivalent) is<br />
# to be found.<br />
#<br />
TypesConfig conf/mime.types</p>
<p>#<br />
# DefaultType is the default MIME type the server will use for a document<br />
# if it cannot otherwise determine one, such as from filename extensions.<br />
# If your server contains mostly text or HTML documents, "text/plain" is<br />
# a good value.&nbsp; If most of your content is binary, such as applications<br />
# or images, you may want to use "application/octet-stream" instead to<br />
# keep browsers from trying to display binary files as though they are<br />
# text.<br />
#<br />
DefaultType text/plain</p>
<p>#<br />
# The mod_mime_magic module allows the server to use various hints from the<br />
# contents of the file itself to determine its type.&nbsp; The MIMEMagicFile<br />
# directive tells the module where the hint definitions are located.<br />
#<br />
&lt;IfModule mod_mime_magic.c&gt;<br />
&nbsp;&nbsp;&nbsp; MIMEMagicFile conf/magic<br />
&lt;/IfModule&gt;</p>
<p>#<br />
# HostnameLookups: Log the names of clients or just their IP addresses<br />
# e.g., www.apache.org (on) or 204.62.129.132 (off).<br />
# The default is off because it'd be overall better for the net if people<br />
# had to knowingly turn this feature on, since enabling it means that<br />
# each client request will result in AT LEAST one lookup request to the<br />
# nameserver.<br />
#<br />
HostnameLookups Off</p>
<p>#<br />
# EnableMMAP: Control whether memory-mapping is used to deliver<br />
# files (assuming that the underlying OS supports it).<br />
# The default is on; turn this off if you serve from NFS-mounted <br />
# filesystems.&nbsp; On some systems, turning it off (regardless of<br />
# filesystem) can improve performance; for details, please see<br />
# http://httpd.apache.org/docs/2.0/mod/core.html#enablemmap<br />
#<br />
#EnableMMAP off</p>
<p>#<br />
# EnableSendfile: Control whether the sendfile kernel support is <br />
# used&nbsp; to deliver files (assuming that the OS supports it).<br />
# The default is on; turn this off if you serve from NFS-mounted <br />
# filesystems.&nbsp; Please see<br />
# http://httpd.apache.org/docs/2.0/mod/core.html#enablesendfile<br />
#<br />
#EnableSendfile off</p>
<p>#<br />
# ErrorLog: The location of the error log file.<br />
# If you do not specify an ErrorLog directive within a &lt;VirtualHost&gt;<br />
# container, error messages relating to that virtual host will be<br />
# logged here.&nbsp; If you *do* define an error logfile for a &lt;VirtualHost&gt;<br />
# container, that host's errors will be logged there and not here.<br />
#<br />
#ErrorLog logs/error_log<br />
ErrorLog "|/usr/local/sbin/cronolog /usr/local/apache/logs/error_log_%w"</p>
<p>#<br />
# LogLevel: Control the number of messages logged to the error_log.<br />
# Possible values include: debug, info, notice, warn, error, crit,<br />
# alert, emerg.<br />
#<br />
LogLevel error</p>
<p>#<br />
# The following directives define some format nicknames for use with<br />
# a CustomLog directive (see below).<br />
#<br />
LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined<br />
LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common<br />
LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate1<br />
LogFormat "%{Referer}i -&gt; %U" referer<br />
LogFormat "%{User-agent}i" agent</p>
<p># You need to enable mod_logio.c to use %I and %O</p>
<p>#<br />
# The location and format of the access logfile (Common Logfile Format).<br />
# If you do not define any access logfiles within a &lt;VirtualHost&gt;<br />
# container, they will be logged here.&nbsp; Contrariwise, if you *do*<br />
# define per-&lt;VirtualHost&gt; access logfiles, transactions will be<br />
# logged therein and *not* in this file.<br />
#<br />
#CustomLog logs/access_log common</p>
<p>#<br />
# If you would like to have agent and referer logfiles, uncomment the<br />
# following directives.<br />
#<br />
#CustomLog logs/referer_log referer<br />
#CustomLog logs/agent_log agent</p>
<p>#<br />
# If you prefer a single logfile with access, agent, and referer information<br />
# (Combined Logfile Format) you can use the following directive.<br />
#<br />
#CustomLog logs/access_log common<br />
CustomLog "|/usr/local/sbin/cronolog /usr/local/apache/logs/access_log_%w" common</p>
<p>#<br />
# ServerTokens<br />
# This directive configures what you return as the Server HTTP response<br />
# Header. The default is 'Full' which sends information about the OS-Type<br />
# and compiled in modules.<br />
# Set to one of:&nbsp; Full | OS | Minor | Minimal | Major | Prod<br />
# where Full conveys the most information, and Prod the least.<br />
#<br />
ServerTokens Prod</p>
<p>#<br />
# Optionally add a line containing the server version and virtual host<br />
# name to server-generated pages (internal error documents, FTP directory <br />
# listings, mod_status and mod_info output etc., but not CGI generated <br />
# documents or custom error documents).<br />
# Set to "EMail" to also include a mailto: link to the ServerAdmin.<br />
# Set to one of:&nbsp; On | Off | EMail<br />
#<br />
ServerSignature Off</p>
<p>#<br />
# Aliases: Add here as many aliases as you need (with no limit). The format is <br />
# Alias fakename realname<br />
#<br />
# Note that if you include a trailing / on fakename then the server will<br />
# require it to be present in the URL.&nbsp; So "/icons" isn't aliased in this<br />
# example, only "/icons/".&nbsp; If the fakename is slash-terminated, then the <br />
# realname must also be slash terminated, and if the fakename omits the <br />
# trailing slash, the realname must also omit it.<br />
#<br />
# We include the /icons/ alias for FancyIndexed directory listings.&nbsp; If you<br />
# do not use FancyIndexing, you may comment this out.<br />
#<br />
#Alias /icons/ "/usr/local/apache/icons/"</p>
<p>#&lt;Directory "/usr/local/apache/icons"&gt;<br />
#&nbsp;&nbsp;&nbsp; Options Indexes MultiViews<br />
#&nbsp;&nbsp;&nbsp; AllowOverride None<br />
#&nbsp;&nbsp;&nbsp; Order allow,deny<br />
#&nbsp;&nbsp;&nbsp; Allow from all<br />
#&nbsp;&nbsp;&nbsp; <br />
#&lt;/Directory&gt;</p>
<p>#<br />
# This should be changed to the ServerRoot/manual/.&nbsp; The alias provides<br />
# the manual, even if you choose to move your DocumentRoot.&nbsp; You may comment<br />
# this out if you do not care for the documentation.<br />
#<br />
#AliasMatch ^/manual(?:/(?:de|en|es|fr|ja|ko|ru))?(/.*)?$ "/usr/local/apache/manual$1"</p>
<p>#&lt;Directory "/usr/local/apache/manual"&gt;<br />
#&nbsp;&nbsp;&nbsp; Options Indexes<br />
#&nbsp;&nbsp;&nbsp; AllowOverride None<br />
#&nbsp;&nbsp;&nbsp; Order allow,deny<br />
#&nbsp;&nbsp;&nbsp; Allow from all<br />
#<br />
#&nbsp;&nbsp;&nbsp; &lt;Files *.html&gt;<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetHandler type-map<br />
#<br />
#&nbsp;&nbsp;&nbsp; &lt;/Files&gt;<br />
#<br />
#&nbsp;&nbsp;&nbsp; SetEnvIf Request_URI ^/manual/(de|en|es|fr|ja|ko|ru)/ prefer-language=$1<br />
#&nbsp;&nbsp;&nbsp; RedirectMatch 301 ^/manual(?:/(de|en|es|fr|ja|ko|ru)){2,}(/.*)?$ /manual/$1$2<br />
#&lt;/Directory&gt;</p>
<p>#<br />
# ScriptAlias: This controls which directories contain server scripts.<br />
# ScriptAliases are essentially the same as Aliases, except that<br />
# documents in the realname directory are treated as applications and<br />
# run by the server when requested rather than as documents sent to the client.<br />
# The same rules about trailing "/" apply to ScriptAlias directives as to<br />
# Alias.<br />
#<br />
#ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"</p>
<p>&lt;IfModule mod_cgid.c&gt;<br />
#<br />
# Additional to mod_cgid.c settings, mod_cgid has Scriptsock &lt;path&gt;<br />
# for setting UNIX socket for communicating with cgid.<br />
#<br />
#Scriptsock&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logs/cgisock<br />
&lt;/IfModule&gt;</p>
<p>#<br />
# "/usr/local/apache/cgi-bin" should be changed to whatever your ScriptAliased<br />
# CGI directory exists, if you have that configured.<br />
#<br />
#&lt;Directory "/usr/local/apache/cgi-bin"&gt;<br />
#&nbsp;&nbsp;&nbsp; AllowOverride None<br />
#&nbsp;&nbsp;&nbsp; Options None<br />
#&nbsp;&nbsp;&nbsp; Order allow,deny<br />
#&nbsp;&nbsp;&nbsp; Allow from all<br />
#&lt;/Directory&gt;</p>
<p>#<br />
# Redirect allows you to tell clients about documents which used to exist in<br />
# your server's namespace, but do not anymore. This allows you to tell the<br />
# clients where to look for the relocated document.<br />
# Example:<br />
# Redirect permanent /foo http://www.example.com/bar</p>
<p>#<br />
# Directives controlling the display of server-generated directory listings.<br />
#</p>
<p>#<br />
# IndexOptions: Controls the appearance of server-generated directory<br />
# listings.<br />
#<br />
IndexOptions FancyIndexing VersionSort</p>
<p>#<br />
# AddIcon* directives tell the server which icon to show for different<br />
# files or filename extensions.&nbsp; These are only displayed for<br />
# FancyIndexed directories.<br />
#<br />
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip</p>
<p>AddIconByType (TXT,/icons/text.gif) text/*<br />
AddIconByType (IMG,/icons/image2.gif) image/*<br />
AddIconByType (SND,/icons/sound2.gif) audio/*<br />
AddIconByType (VID,/icons/movie.gif) video/*</p>
<p>AddIcon /icons/binary.gif .bin .exe<br />
AddIcon /icons/binhex.gif .hqx<br />
AddIcon /icons/tar.gif .tar<br />
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv<br />
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip<br />
AddIcon /icons/a.gif .ps .ai .eps<br />
AddIcon /icons/layout.gif .html .shtml .htm .pdf<br />
AddIcon /icons/text.gif .txt<br />
AddIcon /icons/c.gif .c<br />
AddIcon /icons/p.gif .pl .py<br />
AddIcon /icons/f.gif .for<br />
AddIcon /icons/dvi.gif .dvi<br />
AddIcon /icons/uuencoded.gif .uu<br />
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl<br />
AddIcon /icons/tex.gif .tex<br />
AddIcon /icons/bomb.gif core</p>
<p>AddIcon /icons/back.gif ..<br />
AddIcon /icons/hand.right.gif README<br />
AddIcon /icons/folder.gif ^^DIRECTORY^^<br />
AddIcon /icons/blank.gif ^^BLANKICON^^</p>
<p>#<br />
# DefaultIcon is which icon to show for files which do not have an icon<br />
# explicitly set.<br />
#<br />
DefaultIcon /icons/unknown.gif</p>
<p>#<br />
# AddDescription allows you to place a short description after a file in<br />
# server-generated indexes.&nbsp; These are only displayed for FancyIndexed<br />
# directories.<br />
# Format: AddDescription "description" filename<br />
#<br />
#AddDescription "GZIP compressed document" .gz<br />
#AddDescription "tar archive" .tar<br />
#AddDescription "GZIP compressed tar archive" .tgz</p>
<p>#<br />
# ReadmeName is the name of the README file the server will look for by<br />
# default, and append to directory listings.<br />
#<br />
# HeaderName is the name of a file which should be prepended to<br />
# directory indexes. <br />
ReadmeName README.html<br />
HeaderName HEADER.html</p>
<p>#<br />
# IndexIgnore is a set of filenames which directory indexing should ignore<br />
# and not include in the listing.&nbsp; Shell-style wildcarding is permitted.<br />
#<br />
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t</p>
<p>#<br />
# DefaultLanguage and AddLanguage allows you to specify the language of <br />
# a document. You can then use content negotiation to give a browser a <br />
# file in a language the user can understand.<br />
#<br />
# Specify a default language. This means that all data<br />
# going out without a specific language tag (see below) will <br />
# be marked with this one. You probably do NOT want to set<br />
# this unless you are sure it is correct for all cases.<br />
#<br />
# * It is generally better to not mark a page as <br />
# * being a certain language than marking it with the wrong<br />
# * language!<br />
#<br />
# DefaultLanguage nl<br />
#<br />
# Note 1: The suffix does not have to be the same as the language<br />
# keyword --- those with documents in Polish (whose net-standard<br />
# language code is pl) may wish to use "AddLanguage pl .po" to<br />
# avoid the ambiguity with the common suffix for perl scripts.<br />
#<br />
# Note 2: The example entries below illustrate that in some cases <br />
# the two character 'Language' abbreviation is not identical to <br />
# the two character 'Country' code for its country,<br />
# E.g. 'Danmark/dk' versus 'Danish/da'.<br />
#<br />
# Note 3: In the case of 'ltz' we violate the RFC by using a three char<br />
# specifier. There is 'work in progress' to fix this and get<br />
# the reference data for rfc1766 cleaned up.<br />
#<br />
# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl)<br />
# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de)<br />
# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja)<br />
# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn)<br />
# Norwegian (no) - Polish (pl) - Portugese (pt)<br />
# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv)<br />
# Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW)<br />
#<br />
AddLanguage ca .ca<br />
AddLanguage cs .cz .cs<br />
AddLanguage da .dk<br />
AddLanguage de .de<br />
AddLanguage el .el<br />
AddLanguage en .en<br />
AddLanguage eo .eo<br />
AddLanguage es .es<br />
AddLanguage et .et<br />
AddLanguage fr .fr<br />
AddLanguage he .he<br />
AddLanguage hr .hr<br />
AddLanguage it .it<br />
AddLanguage ja .ja<br />
AddLanguage ko .ko<br />
AddLanguage ltz .ltz<br />
AddLanguage nl .nl<br />
AddLanguage nn .nn<br />
AddLanguage no .no<br />
AddLanguage pl .po<br />
AddLanguage pt .pt<br />
AddLanguage pt-BR .pt-br<br />
AddLanguage ru .ru<br />
AddLanguage sv .sv<br />
AddLanguage zh-CN .zh-cn<br />
AddLanguage zh-TW .zh-tw</p>
<p><br />
#<br />
# LanguagePriority allows you to give precedence to some languages<br />
# in case of a tie during content negotiation.<br />
#<br />
# Just list the languages in decreasing order of preference. We have<br />
# more or less alphabetized them here. You probably want to change this.<br />
#<br />
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW</p>
<p>#<br />
# ForceLanguagePriority allows you to serve a result page rather than<br />
# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback)<br />
# [in case no accepted languages matched the available variants]<br />
#<br />
ForceLanguagePriority Prefer Fallback</p>
<p>#<br />
# Commonly used filename extensions to character sets. You probably<br />
# want to avoid clashes with the language extensions, unless you<br />
# are good at carefully testing your setup after each change.<br />
# See http://www.iana.org/assignments/character-sets for the<br />
# official list of charset names and their respective RFCs.<br />
#<br />
AddCharset ISO-8859-1&nbsp; .iso8859-1&nbsp; .latin1<br />
AddCharset ISO-8859-2&nbsp; .iso8859-2&nbsp; .latin2 .cen<br />
AddCharset ISO-8859-3&nbsp; .iso8859-3&nbsp; .latin3<br />
AddCharset ISO-8859-4&nbsp; .iso8859-4&nbsp; .latin4<br />
AddCharset ISO-8859-5&nbsp; .iso8859-5&nbsp; .latin5 .cyr .iso-ru<br />
AddCharset ISO-8859-6&nbsp; .iso8859-6&nbsp; .latin6 .arb<br />
AddCharset ISO-8859-7&nbsp; .iso8859-7&nbsp; .latin7 .grk<br />
AddCharset ISO-8859-8&nbsp; .iso8859-8&nbsp; .latin8 .heb<br />
AddCharset ISO-8859-9&nbsp; .iso8859-9&nbsp; .latin9 .trk<br />
AddCharset ISO-2022-JP .iso2022-jp .jis<br />
AddCharset ISO-2022-KR .iso2022-kr .kis<br />
AddCharset ISO-2022-CN .iso2022-cn .cis<br />
AddCharset Big5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Big5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .big5<br />
# For russian, more than one charset is used (depends on client, mostly):<br />
AddCharset WINDOWS-1251 .cp-1251&nbsp;&nbsp; .win-1251<br />
AddCharset CP866&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .cp866<br />
AddCharset KOI8-r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .koi8-r .koi8-ru<br />
AddCharset KOI8-ru&nbsp;&nbsp;&nbsp;&nbsp; .koi8-uk .ua<br />
AddCharset ISO-10646-UCS-2 .ucs2<br />
AddCharset ISO-10646-UCS-4 .ucs4<br />
AddCharset UTF-8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .utf8</p>
<p># The set below does not map to a specific (iso) standard<br />
# but works on a fairly wide range of browsers. Note that<br />
# capitalization actually matters (it should not, but it<br />
# does for some browsers).<br />
#<br />
# See http://www.iana.org/assignments/character-sets<br />
# for a list of sorts. But browsers support few.<br />
#<br />
AddCharset GB2312&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .gb2312 .gb <br />
AddCharset utf-7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .utf7<br />
AddCharset utf-8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .utf8<br />
AddCharset big5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .big5 .b5<br />
AddCharset EUC-TW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .euc-tw<br />
AddCharset EUC-JP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .euc-jp<br />
AddCharset EUC-KR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .euc-kr<br />
AddCharset shift_jis&nbsp;&nbsp; .sjis</p>
<p>#<br />
# AddType allows you to add to or override the MIME configuration<br />
# file mime.types for specific file types.<br />
#<br />
#AddType application/x-tar .tgz<br />
#<br />
# AddEncoding allows you to have certain browsers uncompress<br />
# information on the fly. Note: Not all browsers support this.<br />
# Despite the name similarity, the following Add* directives have nothing<br />
# to do with the FancyIndexing customization directives above.<br />
#<br />
#AddEncoding x-compress .Z<br />
#AddEncoding x-gzip .gz .tgz<br />
#<br />
# If the AddEncoding directives above are commented-out, then you<br />
# probably should define those extensions to indicate media types:<br />
#<br />
AddType application/x-compress .Z<br />
AddType application/x-gzip .gz .tgz<br />
AddType application/x-javascript .js</p>
<p>#<br />
# AddHandler allows you to map certain file extensions to "handlers":<br />
# actions unrelated to filetype. These can be either built into the server<br />
# or added with the Action directive (see below)<br />
#<br />
# To use CGI scripts outside of ScriptAliased directories:<br />
# (You will also need to add "ExecCGI" to the "Options" directive.)<br />
#<br />
#AddHandler cgi-script .cgi</p>
<p>#<br />
# For files that include their own HTTP headers:<br />
#<br />
#AddHandler send-as-is asis</p>
<p>#<br />
# For server-parsed imagemap files:<br />
#<br />
#AddHandler imap-file map</p>
<p>#<br />
# For type maps (negotiated resources):<br />
# (This is enabled by default to allow the Apache "It Worked" page<br />
#&nbsp; to be distributed in multiple languages.)<br />
#<br />
AddHandler type-map var</p>
<p>#<br />
# Filters allow you to process content before it is sent to the client.<br />
#<br />
# To parse .shtml files for server-side includes (SSI):<br />
# (You will also need to add "Includes" to the "Options" directive.)<br />
#<br />
#AddType text/html .shtml<br />
#AddOutputFilter INCLUDES .shtml</p>
<p>#<br />
# Action lets you define media types that will execute a script whenever<br />
# a matching file is called. This eliminates the need for repeated URL<br />
# pathnames for oft-used CGI file processors.<br />
# Format: Action media/type /cgi-script/location<br />
# Format: Action handler-name /cgi-script/location<br />
#</p>
<p>#<br />
# Customizable error responses come in three flavors:<br />
# 1) plain text 2) local redirects 3) external redirects<br />
#<br />
# Some examples:<br />
#ErrorDocument 500 "The server made a boo boo."<br />
#ErrorDocument 404 /missing.html<br />
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"<br />
#ErrorDocument 402 http://www.example.com/subscription_info.html<br />
#</p>
<p>#<br />
# Putting this all together, we can internationalize error responses.<br />
#<br />
# We use Alias to redirect any /error/HTTP_&lt;error&gt;.html.var response to<br />
# our collection of by-error message multi-language collections.&nbsp; We use <br />
# includes to substitute the appropriate text.<br />
#<br />
# You can modify the messages' appearance without changing any of the<br />
# default HTTP_&lt;error&gt;.html.var files by adding the line:<br />
#<br />
#&nbsp;&nbsp; Alias /error/include/ "/your/include/path/"<br />
#<br />
# which allows you to create your own set of files by starting with the<br />
# /usr/local/apache/error/include/ files and copying them to /your/include/path/, <br />
# even on a per-VirtualHost basis.&nbsp; The default include files will display<br />
# your Apache version number and your ServerAdmin email address regardless<br />
# of the setting of ServerSignature.<br />
#<br />
# The internationalized error documents require mod_alias, mod_include<br />
# and mod_negotiation.&nbsp; To activate them, uncomment the following 30 lines.</p>
<p>#&nbsp;&nbsp;&nbsp; Alias /error/ "/usr/local/apache/error/"<br />
#<br />
#&nbsp;&nbsp;&nbsp; &lt;Directory "/usr/local/apache/error"&gt;<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride None<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options IncludesNoExec<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddOutputFilter Includes html<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddHandler type-map var<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order allow,deny<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow from all<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ForceLanguagePriority Prefer Fallback<br />
#&nbsp;&nbsp;&nbsp; &lt;/Directory&gt;<br />
#<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 410 /error/HTTP_GONE.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var<br />
#&nbsp;&nbsp;&nbsp; ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var</p>
<p><br />
#<br />
# The following directives modify normal HTTP response behavior to<br />
# handle known problems with browser implementations.<br />
#<br />
BrowserMatch "Mozilla/2" nokeepalive<br />
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0<br />
BrowserMatch "RealPlayer 4\.0" force-response-1.0<br />
BrowserMatch "Java/1\.0" force-response-1.0<br />
BrowserMatch "JDK/1\.0" force-response-1.0</p>
<p>#<br />
# The following directive disables redirects on non-GET requests for<br />
# a directory that does not include the trailing slash.&nbsp; This fixes a <br />
# problem with Microsoft WebFolders which does not appropriately handle <br />
# redirects for folders with DAV methods.<br />
# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.<br />
#<br />
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully<br />
BrowserMatch "MS FrontPage" redirect-carefully<br />
BrowserMatch "^WebDrive" redirect-carefully<br />
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully<br />
BrowserMatch "^gnome-vfs" redirect-carefully<br />
BrowserMatch "^XML Spy" redirect-carefully<br />
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully</p>
<p>#<br />
# Allow server status reports generated by mod_status,<br />
# with the URL of http://servername/server-status<br />
# Change the ".example.com" to match your domain to enable.<br />
#<br />
&lt;Location /mync-server-status&gt;<br />
&nbsp;&nbsp;&nbsp; SetHandler server-status<br />
&nbsp;&nbsp;&nbsp; #Order deny,allow<br />
&nbsp;&nbsp;&nbsp; #Deny from all<br />
&nbsp;&nbsp;&nbsp; #Allow from 132.194.65.108<br />
&nbsp;&nbsp;&nbsp; AuthType Basic<br />
&nbsp;&nbsp;&nbsp; AuthName mync<br />
&nbsp;&nbsp;&nbsp; AuthUserFile /mync/auth/authfile<br />
&nbsp;&nbsp;&nbsp; require valid-user<br />
&lt;/Location&gt;</p>
<p>#<br />
# Allow remote server configuration reports, with the URL of<br />
#&nbsp; http://servername/server-info (requires that mod_info.c be loaded).<br />
# Change the ".example.com" to match your domain to enable.<br />
#<br />
#&lt;Location /server-info&gt;<br />
#&nbsp;&nbsp;&nbsp; SetHandler server-info<br />
#&nbsp;&nbsp;&nbsp; Order deny,allow<br />
#&nbsp;&nbsp;&nbsp; Deny from all<br />
#&nbsp;&nbsp;&nbsp; Allow from .example.com<br />
#&lt;/Location&gt;</p>
<p><br />
#<br />
# Bring in additional module-specific configurations<br />
#</p>
<p><br />
### Section 3: Virtual Hosts<br />
#<br />
# VirtualHost: If you want to maintain multiple domains/hostnames on your<br />
# machine you can setup VirtualHost containers for them. Most configurations<br />
# use only name-based virtual hosts so the server doesn't need to worry about<br />
# IP addresses. This is indicated by the asterisks in the directives below.<br />
#<br />
# Please see the documentation at <br />
# &lt;URL:http://httpd.apache.org/docs/2.0/vhosts/&gt;<br />
# for further details before you try to setup virtual hosts.<br />
#<br />
# You may use the command line option '-S' to verify your virtual host<br />
# configuration.</p>
<p>#<br />
# Use name-based virtual hosting.<br />
#<br />
#NameVirtualHost *:80</p>
<p>#<br />
# VirtualHost example:<br />
# Almost any Apache directive may go into a VirtualHost container.<br />
# The first VirtualHost section is used for requests without a known<br />
# server name.<br />
#<br />
#&lt;VirtualHost *:80&gt;<br />
#&nbsp;&nbsp;&nbsp; ServerAdmin webmaster@dummy-host.example.com<br />
#&nbsp;&nbsp;&nbsp; DocumentRoot /www/docs/dummy-host.example.com<br />
#&nbsp;&nbsp;&nbsp; ServerName dummy-host.example.com<br />
#&nbsp;&nbsp;&nbsp; ErrorLog logs/dummy-host.example.com-error_log<br />
#&nbsp;&nbsp;&nbsp; CustomLog logs/dummy-host.example.com-access_log common<br />
#&lt;/VirtualHost&gt;</p>
<p>LoadModule weblogic_module modules/mod_wl_20.so<br />
#LoadModule deflate_module&nbsp;&nbsp;&nbsp;&nbsp; modules/mod_deflate.so<br />
#LoadModule include_module&nbsp;&nbsp;&nbsp;&nbsp; modules/mod_include.so<br />
#LoadModule headers_module&nbsp;&nbsp;&nbsp;&nbsp; modules/mod_headers.so</p>
<p><br />
&lt;IfModule mod_ssl.c&gt;<br />
&nbsp;&nbsp;&nbsp; Include conf/ssl.conf<br />
&lt;/IfModule&gt;</p>
<p>&lt;IfModule mod_weblogic.c&gt;<br />
&nbsp;&nbsp;&nbsp; WebLogicCluster 132.194.34.104:7001,132.194.34.101:7001<br />
&nbsp;&nbsp;&nbsp; ConnectTimeoutSecs 60<br />
&nbsp;&nbsp;&nbsp; MatchExpression *.jsp<br />
&nbsp;&nbsp;&nbsp; MatchExpression *.do<br />
&nbsp;&nbsp;&nbsp; #KeepAliveEnabled ON&nbsp; <br />
&nbsp;&nbsp;&nbsp; #KeepAliveSecs&nbsp; 30<br />
&lt;/IfModule&gt;</p>
<p><br />
&lt;Location /mync/servlet&gt;<br />
&nbsp;&nbsp;&nbsp; SetHandler weblogic-handler<br />
&nbsp;&nbsp;&nbsp; ErrorPage notice.html<br />
&lt;/Location&gt;</p>
<p>&lt;Location /mync/portal&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; SetHandler weblogic-handler<br />
&nbsp;&nbsp;&nbsp; ErrorPage notice.html<br />
&nbsp;&nbsp;&nbsp; setOutputFilter DEFLATE<br />
&nbsp;&nbsp;&nbsp; AddOutputFilterByType DEFLATE text/html<br />
&lt;/Location&gt;</p>
<p>&lt;Location /mync/login&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; SetHandler weblogic-handler<br />
&nbsp;&nbsp;&nbsp; ErrorPage notice.html<br />
&lt;/Location&gt;</p>
<p><br />
&lt;Location /opencms&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; SetHandler weblogic-handler<br />
&nbsp;&nbsp;&nbsp; #ExpiresActive on<br />
&nbsp;&nbsp;&nbsp; #ExpiresByType text/html "now plus 0 seconds"<br />
&nbsp;&nbsp;&nbsp; ErrorPage notice.html<br />
&lt;/Location&gt;</p>
<p>&lt;Location /opencms/opencms/system/workplace&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp; SetHandler weblogic-handler<br />
&nbsp;&nbsp;&nbsp; ExpiresActive on<br />
&nbsp;&nbsp;&nbsp; ExpiresByType text/html "now plus 0 seconds"<br />
&nbsp;&nbsp;&nbsp; ErrorPage notice.html<br />
&nbsp;&nbsp;&nbsp; MatchExpression *.jsp<br />
&lt;/Location&gt;</p>
<p><br />
#DynamicServerList OFF<br />
RewriteEngine on<br />
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)<br />
RewriteRule .* - [F]</p>

          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/180417#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>Thu, 22 Nov 2007 10:35:00 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/180417</link>
        <guid>http://herenhuang.javaeye.com/blog/180417</guid>
      </item>
      <item>
        <title>servlet/jsp 重定向</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/180418" style="color:red;">http://herenhuang.javaeye.com/blog/180418</a>&nbsp;
          发表时间: 2007年11月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>通常，在一个设计良好的Web应用中，都会综合使用Servlet和JSP技术。Servlet控制业务流转，JSP则负责业务处理结果的显示。此时，将大量用到重定向技术。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重定向技术可以分为两类，一类是客户端重定向，一类是服务器端重定向。客户端重定向可以通过设置特定的HTTP头，或者写JavaScript脚本实现。本文主要探讨服务器端重定向技术的实现。</p>
<p><br />
服务器端的重定向相关类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器端的重定向技术涉及到javax.servlet.ServletContext、javax.servlet.RequestDispatcher、javax.servlet.http.ServletRequest、javax.servlet.http.ServletResponse等几个接口。<br />
服务器端的重定向方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器端的重定向可以有两种方式，一是使用HttpServletResponse的sendRedirect()方法，一是使用RequestDispatcher的forward()方法。下面对这两种方式进行介绍。</p>
<p>HttpServletResponse.sendRedirect()方法</p>
<p>HttpServletResponse接口定义了可用于转向的sendRedirect()方法。代码如下：</p>
<p>public void sendRedirect(java.lang.String location)throws java.io.IOException</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL，如response.sendRedirect("http://java.sun.com")也可以使用相对的URL。如果location以&#8220;/&#8221;开头，则容器认为相对于当前Web应用的根，否则，容器将解析为相对于当前请求的URL。这种重定向的方法，将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址，作用类似于上面设置HTTP响应头信息的实现。</p>
<p>RequestDispatcher.forward()方法</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher是一个Web资源的包装器，可以用来把当前request传递到该资源，或者把新的资源包括到当前响应中。RequestDispatcher接口中定义了两个方法，参见如下代码：</p>
<p>public interface RequestDispatcher {<br />
void forward(ServletRequest request, ServletResponse response);<br />
void include(ServletRequest request, ServletResponse response);<br />
}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forward()方法将当前的request和response重定向到该RequestDispacher指定的资源。这在实际项目中大量使用，因为完成一个业务操作往往需要跨越多个步骤，每一步骤完成相应的处理后，转向到下一个步骤。比如，通常业务处理在Servlet中处理，处理的结果转向到一个JSP页面进行显示。这样看起来类似于Servlet链的功能，但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源，而不仅仅是另外一个Servlet。 include()方法将把Request Dispatcher资源的输出包含到当前输出中。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意，只有在尚未向客户端输出响应时才可以调用forward()方法，如果页面缓存不为空，在重定向前将自动清除缓存。否则将抛出一个IllegalStateException异常。</p>
<p><br />
如何得到RequestDispatcher</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有三种方法可以得到Request Dispatcher对象。</p>
<p>1.javax.servlet. ServletRequest的getRequestDispatcher(String path)方法，其中path可以是相对路径，但不能越出当前Servlet上下文。如果path以&#8220;/&#8221;开头，则解析为相对于当前上下文的根。</p>
<p>2.javax.servlet. ServletContext的getRequestDispatcher(String path)方法，其中path必须以&#8220;/&#8221;开头，路径相对于当前的Servlet上下文。可以调用ServletContext的getContext(String uripath)得到另一个Servlet上下文，并可以转向到外部上下文的一个服务器资源链接。</p>
<p>3.使用javax.servlet. ServletContext的getNamedDispatcher(String name)得到名为name的一个Web资源，包括Servlet和JSP页面。这个资源的名字在Web应用部署描述文件web.xml中指定。<br />
<br />
</p>
<p>这三种方法的使用有细微的差别。比如，下面是一个应用的配置文件web.xml：</p>
<p>&lt;?xml version="1.0" ?&gt;<br />
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"<br />
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"&gt;<br />
&lt;web-app&gt;<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;FirstServlet&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;org. javaresearch.redirecttest.ServletOne&lt;/servlet-class&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;SecondServlet&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;org.javaresearch. redirecttest.ServletTwo&lt;/servlet-class&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;FirstServlet&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/servlet/firstservlet/&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;SecondServlet&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/servlet/secondservlet/&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;<br />
&lt;/web-app&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中定义了两个Servlet，名字分别为FirstServlet和SecondServlet，对应的类分别为org.javaresearch. redirecttest.ServletOne和org. javaresearch.redirecttest.ServletTwo。可以在浏览器中通过类似于下面的链接访问：</p>
<p><a href="http://localhost:8080/servlet/firstservlet/" target="_blank">http://localhost:8080/servlet/firstservlet/</a></p>
<p>使用1中方法，例如在firstservlet可以写入下面的代码：</p>
<p>RequestDispatcher rd = request.getRequestDispatcher("secondservlet");<br />
rd.forward(request, response);</p>
<p>&nbsp;</p>
<p>此时控制权将转向到第二个Servlet了。</p>
<p>使用2中的方法，可以从Servlet Context中得到RequestDispatcher代码如下：</p>
<p>RequestDispatcher rd = getServletContext().getRequest<br />
Dispatcher("/servlet/secondservlet");<br />
rd.forward(request, response);</p>
<p>&nbsp;</p>
<p>使用3中的方法，从上面的web. xml配置文件可以看到定义了两个Servlet，名字分别为FirstServlet和SecondServlet，所以可以得到命名的Dispatcher：</p>
<p>RequestDispatcher rd = getServletContext().getNamedDispatcher("SecondServlet");<br />
rd.forward(request, response);</p>
<p>&nbsp;</p>
<p>这样也可以重定向到SecondServlet了。</p>
<p><br />
JSP页面中的重定向</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSP在解析后编译为一个Servlet运行，所以在JSP中也可以使用上面的重定向代码，并且，JSP还提供了更便利的操作，如下：</p>
<p>&lt;jsp:forward page= "nextpage.jsp"/&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSP页面执行到这儿，将终止当前的处理，将控制权交由nextpage.jsp。</p>
<p><br />
如何选择</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是：前者仅是容器中控制权的转向，在客户端浏览器地址栏中不会显示出转向后的地址；后者则是完全的跳转，浏览器将会得到跳转的地址，并重新发送请求链接。这样，从浏览器的地址栏中可以看到跳转后的链接地址。所以，前者更加高效，在前者可以满足需要时，尽量使用Request Dispatcher.forward()方法，并且，这样也有助于隐藏实际的链接。在有些情况下，比如，需要跳转到一个其它服务器上的资源，则必须使用HttpServletResponse.sendRequest()方法<br />
</p>
<p><br />
</p>
 
          <br/>
          <span style="color:red;">
            <a href="http://herenhuang.javaeye.com/blog/180418#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, 16 Nov 2007 10:40:00 +0800</pubDate>
        <link>http://herenhuang.javaeye.com/blog/180418</link>
        <guid>http://herenhuang.javaeye.com/blog/180418</guid>
      </item>
      <item>
        <title>安装和配置 Apache HTTP Server 插件</title>
        <author>herenhuang</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://herenhuang.javaeye.com">herenhuang</a>&nbsp;
          链接：<a href="http://herenhuang.javaeye.com/blog/180419" style="color:red;">http://herenhuang.javaeye.com/blog/180419</a>&nbsp;
          发表时间: 2007年11月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h2 class="pHeading1"><del><a name="wp101251"></a></del>Apache HTTP Server 插件概述<a name="overview"></a> </h2>
<p class="pBody"><del><a name="wp104103"></a></del>Apache HTTP Server 插件允许将请求从 Apache HTTP Server 代理到 WebLogic Server。该插件允许 WebLogic Server 处理要求使用 WebLogic Server 动态功能的请求，从而增强了 Apache 安装。 </p>
<p class="pBody"><del><a name="wp104107"></a></del>该插件专用于某种环境，在这样的环境中，Apache Server 提供静态页，而文档树的另一个部分（最好是由 HTTP Servlet 或 Java Server Page 生成的动态页）会委托给可以在不同的进程中（可能在不同的主机上）进行操作的 WebLogic Server。对于最终用户（浏览器），委托给 WebLogic Server 的 HTTP 请求看似仍然来自同一个来源。 </p>
<p class="pBody"><del><a name="wp104214"></a></del>HTTP 隧道是一种技术，它允许 HTTP 请求和响应通过公司的防火墙进行访问。它也可以通过插件操作，提供对 WebLogic Server 服务的非浏览器客户端访问。 </p>
<p class="pBody"><del><a name="wp103183"></a></del>Apache HTTP Server 插件充当 Apache HTTP Server 中的 Apache 模块。Apache 模块由 Apache Server 在启动时加载，然后某些 HTTP 请求会委托给它。Apache 模块类似于 HTTP Servlet（除了 Apache 模块是用平台本地代码编写的之外）。 </p>
<p class="pBody"><del><a name="wp131302"></a></del>有关支持 Apache HTTP Server 插件的配置的信息，请参阅 <span class="cHyperlink"><a href="http://edocs.bea.com/platform/suppconfigs/configs92/92_over/add-ons.html">http://edocs.bea.com/platform/suppconfigs/configs92/92_over/add-ons.html</a></span>。 </p>
<h3 class="pHeading2"><del><a name="wp112640"></a></del>Apache 2.0 版中的保持活动连接 </h3>
<p class="pBody"><del><a name="wp112690"></a></del>2.0 版的 Apache HTTP Server 插件通过使用从插件到 WebLogic Server 的可重用连接缓冲池提高了性能。该插件通过对来自同一客户端的后续请求重用缓冲池中的同一连接，在插件和 WebLogic Server 之间实现了 HTTP 1.1 保持活动连接。如果连接处于非活动状态的时间超过 30 秒（或用户定义的时间），则会关闭该连接并将其返回到缓冲池中。可以根据需要禁用此功能。有关详细信息，请参阅&#8220;KeepAliveEnabled&#8221;。 </p>
<h3 class="pHeading2"><del><a name="wp113252"></a></del>代理请求 </h3>
<p class="pBody"><del><a name="wp131486"></a></del>插件根据指定的配置将请求代理到 WebLogic Server。可以根据请求的 URL（或 URL 的一个部分）代理请求。这称为按路径进行代理。<em class="cEmphasis"></em>还可以根据请求文件的<em class="cEmphasis"></em> MIME 类型代理请求。或者可以使用这两种方法的组合。如果请求同时符合这两个条件，则按路径代理请求。同时，可以为每种类型的请求指定其他参数，来定义插件的其他行为。有关详细信息，请参阅<a href="http://edocs.bea.com.cn/wls/docs92/plugins/apache.html#wp130946"><span class="cHyperlink">配置 Apache HTTP Server 插件</span></a>。 </p>
<h3 class="pHeading2"><del><a name="wp131497"></a></del>Apache 2.2 </h3>
<p class="pBody"><del><a name="wp131498"></a></del>尽管此文档讨论的是 Apache 2.0，您可应用同样的说明来使用具有<a href="http://edocs.bea.com.cn/wls/docs92/plugins/apache.html#wp126678">表&nbsp;3-2</a> 中所示的库的 Apache 2.2。 </p>
<h3 class="pHeading2"><del><a name="wp131493"></a></del>证书<a name="platform"></a> </h3>
<p class="pBody"><del><a name="wp131390"></a></del>Linux、Solaris、Windows 和 HPUX11 平台支持 Apache HTTP Server 插件。有关对特定 Apache 版本的支持信息，请参阅 <span class="cHyperlink"><a href="http://edocs.bea.com/platform/suppconfigs/configs92/92_over/add-ons.html">http://edocs.bea.com/platform/suppconfigs/configs92/92_over/add-ons.html</a></span>。 </p>
<p>&nbsp;</p>
<hr noshade />
<h2 class="pHeading1"><del><a name="wp131399"></a></del>安装 Apache HTTP Server 插件<a name="install"></a> </h2>
<p class="pBody"><del><a name="wp112704"></a></del>可将 Apache HTTP Server 插件作为 Apache HTTP Server 安装中的 Apache 模块进行安装，并将其作为动态共享对象（Dynamic Shared Object，简称 DSO）进行链接。 </p>
<p class="pBody"><del><a name="wp127906"></a></del>DSO 作为服务器在运行时动态加载的库进行编译，可以在不重新编译 Apache 的情况下安装。 </p>
<h3 class="pHeading2"><del><a name="wp114478"></a></del>将 Apache HTTP Server 插件作为动态共享对象安装 </h3>
<p class="pBody"><del><a name="wp126732"></a></del>Apache 插件作为 Solaris、Linux、Windows 和 HPUX11 平台的共享对象 (<code class="cCode">.so</code>) 分发。BEA WebLogic 提供因平台、是否要在客户端和 Apache 之间使用 SSL 以及 SSL 加密强度（常规或 128 位 - 只有在安装 128 位版本的 WebLogic Server 时才会安装 128 位版本）而异的共享对象文件版本。 </p>
<p class="pBody"><del><a name="wp127393"></a></del><a href="http://edocs.bea.com.cn/wls/docs92/plugins/apache.html#wp131188">表&nbsp;3-1</a> 显示包含各种平台的共享对象文件的 WebLogic Server 安装目录（其中 WL_HOME 是 WebLogic 平台的顶级安装目录）。 </p>
<p class="pBody"><del><a name="wp131123"></a></del><a href="http://edocs.bea.com.cn/wls/docs92/plugins/apache.html#wp126678">表&nbsp;3-2</a> 针对不同版本的 Apache HTTP Server 和不同加密强度来标识 WebLogic Server Apache 插件模块。 </p>
<p class="pGraphic"><del><a name="wp126733"></a></del></p>
<div align="left">
<table class="table" cellspacing="0" id="wp131188table126744" cellpadding="3">
    <caption><del><a name="wp131188"></a></del>表 3-1 插件共享对象文件的位置 </caption>
    <tbody>
        <tr align="center" valign="top" bgcolor="#cccccc">
            <th scope="col">
            <div class="pCellHeading"><del><a name="wp131192"></a></del>操作系统 </div>
            </th>
            <th scope="col">
            <div class="pCellHeading"><del><a name="wp131194"></a></del>共享对象位置 </div>
            </th>
        </tr>
        <tr align="left" valign="top">
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131196"></a></del>Solaris </div>
            </td>
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131198"></a></del><code class="cCode">WL_HOME/weblogic92/server/plugin/solaris/sparc</code> </div>
            </td>
        </tr>
        <tr align="left" valign="top">
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131200"></a></del>Linux </div>
            </td>
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131202"></a></del><code class="cCode">WL_HOME/weblogic92/server/plugin/linux/i686</code> </div>
            <div class="pCellBody"><del><a name="wp131203"></a></del><code class="cCode">WL_HOME/weblogic92/server/plugin/linux/ia64</code> </div>
            <div class="pCellBody"><del><a name="wp131204"></a></del><code class="cCode">WL_HOME/weblogic92/server/plugin/linux/s390</code> </div>
            </td>
        </tr>
        <tr align="left" valign="top">
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131206"></a></del>Windows（仅适用于 Apache 2.0） </div>
            </td>
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131208"></a></del><code class="cCode">WL_HOME\weblogic92\server\plugin\win\32 </code>或 </div>
            <div class="pCellBody"><del><a name="wp131209"></a></del><code class="cCode">WL_HOME\weblogic92\server\plugin\win\64</code> </div>
            </td>
        </tr>
        <tr align="left" valign="top">
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131211"></a></del>HPUX11 </div>
            </td>
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131213"></a></del><code class="cCode">WL_HOME/weblogic92/server/plugin/hpux11/IPF64</code> </div>
            <div class="pCellBody"><del><a name="wp131214"></a></del><code class="cCode">WL_HOME/weblogic92/server/plugin/hpux11/PA_RISC</code> </div>
            <del><a name="wp131215"></a></del>
            <table class="Note">
                <tbody>
                    <tr>
                        <td valign="top"><strong>警告：</strong></td>
                        <td>如果在 HP-UX11 上运行 Apache 2.0.x Server，请在构建 Apache Server 之前设置下面紧邻的环境变量。由于 HP-UX 上加载链接库的顺序问题，如果在生成之前未将加载顺序预设为环境变量，则可能导致核心转储。设置下列环境变量，然后继续 Apache <code class="cCode">configure</code>, <code class="cCode">make</code> 和 <code class="cCode">make install</code> 步骤（在 Apache HTTP Server 文档中描述了这些步骤，该文档位于 <span class="cHyperlink"><a href="http://httpd.apache.org/docs-2.1/install.html#configure">http://httpd.apache.org/docs-2.1/install.html#configure</a></span>）： </td>
                    </tr>
                </tbody>
            </table>
            <del><a name="wp131217"></a></del>
            <div class="pPreformattedRelative">
            <pre>export EXTRA_LDFLAGS="-lstd -lstream -lCsup -lm -lcl -ldld -lpthread"</pre>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="pGraphic"></p>
<p class="pBody"><del><a name="wp126612"></a></del>从下表中选择适当的插件共享对象版本： </p>
<p class="pGraphic"><del><a name="wp126646"></a></del></p>
<div align="left">
<table class="table" cellspacing="0" id="wp126678table126613" cellpadding="3">
    <caption><del><a name="wp126678"></a></del>表 3-2 Apache 插件共享对象文件版本 </caption>
    <tbody>
        <tr align="center" valign="top" bgcolor="#cccccc">
            <th scope="col">
            <div class="pCellHeading"><del><a name="wp126615"></a></del>Apache 版本 </div>
            </th>
            <th scope="col">
            <div class="pCellHeading"><del><a name="wp126617"></a></del>常规强度的加密 </div>
            </th>
            <th scope="col">
            <div class="pCellHeading"><del><a name="wp126619"></a></del>128 位加密 </div>
            </th>
        </tr>
        <tr align="left" valign="top">
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp126641"></a></del>标准 Apache 2.0.x 版 </div>
            </td>
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp126643"></a></del><code class="cCode">mod_wl_20.so</code> </div>
            </td>
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp126645"></a></del><code class="cCode">mod_wl28_20.so</code> </div>
            </td>
        </tr>
        <tr align="left" valign="top">
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131511"></a></del>标准 Apache 2.2.x 版 </div>
            </td>
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131513"></a></del><code class="cCode">mod_wl_22.so</code> </div>
            </td>
            <td scope="row" class="table">
            <div class="pCellBody"><del><a name="wp131515"></a></del><code class="cCode">mod_wl28_22.so</code> </div>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="pGraphic"></p>
<p class="pBody"><del><a name="wp114479"></a></del>要将 Apache HTTP Server 插件作为动态共享对象安装，请执行下列操作： </p>
<div class="pSmartList1">
<ol class="pSmartList1" type="1">
    <li><del><a name="wp100376"></a></del>使用<a href="http://edocs.bea.com.cn/wls/docs92/plugins/apache.html#wp131188">表&nbsp;3-1</a> 找到您的平台的共享对象目录。
    </li><li><del><a name="wp126927"></a></del>在<a href="http://edocs.bea.com.cn/wls/docs92/plugins/apache.html#wp126678">表&nbsp;3-2</a> 中确定您的 Apache 版本的插件共享对象文件。
    </li><li><del><a name="wp115919"></a></del>验证是否已启用 WebLogic Server Apache HTTP Server 插件 <code class="cCode">mod_so.c</code> 模块。
    <p class="pBodyRelative"><del><a name="wp104574"></a></del>Apache HTTP Server 插件将作为动态共享对象 (DSO) 安装在 Apache HTTP Server 安装中。Apache 中的 DSO 支持是基于模块 <code class="cCode">mod_so.c</code> 的，必须在加载 mod_wl_20.so 之前启用该模块。如果使用 Apache 提供的脚本安装 Apache HTTP Server，则 <code class="cCode">mod_so.c</code>已被启用。通过执行以下命令，验证是否已启用 <code class="cCode">mod_so.c</code>： </p>
    <del><a name="wp100386"></a></del>
    <div class="pPreformattedRelative">
    <pre><code class="cCodeEmphasis">APACHE_HOME</code>\bin\apache -l</pre>
    </div>
    <p class="pBodyRelative"><del><a name="wp104575"></a></del>（其中 <code class="cCodeEmphasis">APACHE_HOME</code> 是包含 Apache HTTP Server 安装的目录。） </p>
    <p class="pBodyRelative"><del><a name="wp100387"></a></del>此命令会列出所有已启用的模块。如果未列出 <code class="cCode">mod_so.c</code>，则必须重新生成 Apache HTTP Server，以确保配置下列选项： </p>
    <del><a name="wp112735"></a></del>
    <div class="pPreformattedRelative">
    <pre>...<br />
    --enable-module=so<br />
    --enable-rule=SHARED_CORE<br />
    ...</pre>
    </div>
    <del><a name="wp131016"></a></del>
    <div class="pPreformattedRelative">
    <pre>请参阅位于 <a href="http://httpd.apache.org/docs/2.0/dso.html"><span class="cHyperlink">
    http://httpd.apache.org/docs/2.0/dso.html</span></a> 的&#8220;Apache 2.0 Shared Object (DSO) Support&#8221;。</pre>
    </div>
    </li><li><del><a name="wp120315"></a></del>将 <code class="cCode">mod_wl_20.so</code> 文件复制到 <code class="cCodeEmphasis">APACHE_HOME</code><code class="cCode">\modules</code> 目录中，并将以下行手工添加到 <code class="cCodeEmphasis">APACHE_HOME</code>/<span style="font-style: italic">conf/httpd.conf</span> 文件中，为 Apache 2.0.x 版安装 Apache HTTP Server 插件模块： <del><a name="wp120308"></a></del>
    <div class="pPreformattedRelative">
    <pre>LoadModule weblogic_module     modules/mod_wl_20.so</pre>
    </div>
    </li><li><del><a name="wp124688"></a></del>为 Apache HTTP Server 插件定义任何其他参数。
    <p class="pBodyRelative"><del><a name="wp124696"></a></del>Apache HTTP Server 插件可识别 <a name="params"></a><a href="http://edocs.bea.com.cn/wls/docs92/plugins/plugin_params.html#wp1143055">Web 服务器插件的常规参数</a>中列出的参数。要修改 Apache HTTP Server 插件的行为，请在以下块中定义这些参数： </p>
    <div class="pSmartList2Bullet">
    <ul>
        <li><del><a name="wp124701"></a></del>在 <code class="cCode">Location</code> 块中，定义适用于按路径<em class="cEmphasis" style="font-style: italic"></em>进行的代理的参数
        <li><del><a name="wp124702"></a></del>在 <code class="cCode">IfModule</code> 块中，定义适用于按 MIME 类型<em class="cEmphasis" style="font-style: italic"></em>进行的代理的参数 </li>
    </li></ul>
    </div>
    </li><li><del><a name="wp119188"></a></del>使用下列命令验证 <code class="cCodeEmphasis">APACHE_HOME</code>\conf\httpd.conf 文件的语法： <del><a name="wp119190"></a></del>
    <div class="pPreformattedRelative">
    <pre>APACHE_HOME\bin\apachectl -t </pre>
    </div>
    <p class="pBodyRelative"><del><a name="wp119191"></a></del>此命令的输出将报告 <code class="cCode">httpd.conf</code> 文件中的任何错误或返回： </p>
    <del><a name="wp126203"></a></del>
    <div class="pPreformattedRelative">
    <pre>Syntax OK</pre>
    </div>
    </li><li><del><a name="wp100400"></a></del>重新启动 Weblogic Server。
    </li><li><del><a name="wp105740"></a></del>启动（或重新启动，如果已更改配置）Apache HTTP Server。
    <li><del><a name="wp130911"></a></del>通过打开浏览器并将 URL 设置为 Apache Server +&#8220;<code class="cCode">/weblogic/</code>&#8221;（这将打开默认 WebLogic Server HTML 页、欢迎文件或默认 Servlet，如 WebLogic Server 上对默认 Web 应用程序的定义）来测试插件。例如： <del><a name="wp130940"></a></del>
    <div class="pPreformattedRelative">
    <pre>http://myApacheserver.com/weblogic/</pre>
    </div>
    </li>
</li></ol>
</div>
<p>&nbsp;</p>
<hr noshade />
<h2 class="pHeading1"><del><a name="wp130946"></a></del>配置 Apache HTTP Server 插件<a name="httpd-conf"></a> </h2>
<p class="pBody"><del><a name="wp109477"></a></del>在 Apache HTTP Server 中安装插件后，需要对 WebLogic Server Apache 插件进行配置并将服务器配置为使用该插件。本部分说明如何编辑 Apache <code class="cCode">httpd.conf</code> 文件以指示 Apache 服务器为作为 Apache 模块的插件加载 WebLogic Server 库，并指定应由该模块处理的应用程序请求。 </p>
<h3 class="pHeading2"><del><a name="wp110943"></a></del>编辑 httpd.conf 文件 </h3>
<p class="pBody"><del><a name="wp100404"></a></del>编辑 Apache HTTP Server 安装中的 <code class="cCode">httpd.conf</code> 文件以配置 Apache HTTP Server 插件。 </p>
<p class="pBody"><del><a name="wp125858"></a></del>本部分说明如何查找和编辑 <code class="cCode">httpd.conf</code> 文件以实现下列操作：配置服务器以使用 WebLogic Server Apache 插件、按路径或 MIME 类型代理请求、启用 HTTP 隧道，以及使用其他 WebLogic Server 插件参数。 </p>
<div class="pSmartList1">
<ol class="pSmartList1" type="1">
    <li><del><a name="wp110662"></a></del>打开 <code class="cCode">httpd.conf</code> 文件。
    <p class="pBodyRelative"><del><a name="wp128129"></a></del>该文件位于 <span style="font-style: italic">APACHE_</span><code class="cCodeEmphasis">HOME</code><code class="cCode">\conf\httpd.conf</code>（其中 APACHE_<code class="cCode" style="font-style: normal">HOME</code><span style="font-style: italic"> </span>是 Apache HTTP Server 安装的根目录）。请参阅<a href="http://edocs.bea.com.cn/wls/docs92/plugins/apache.html#wp102410">设置边界身份验证</a>中的示例 <code class="cCode">httpd.conf</code> 文件。 </p>
    </li><li><del><a name="wp110663"></a></del>确保 Apache 2.0.x 中包含 WebLogic Server 模块，手工将下面的行添加到 <code class="cCode">httpd.conf</code> 文件中。 <del><a name="wp119205"></a></del>
    <div class="pPreformattedRelative">
    <pre>LoadModule weblogic_module   modules\mod_wl_20.so</pre>
    </div>
    </li><li><del><a name="wp100407"></a></del>添加用于定义以下参数之一的 <code class="cCode">IfModule</code> 块：
    <p class="pBodyRelative"><del><a name="wp109640"></a></del>对于非群集 <em class="cEmphasis"></em>WebLogic Server： </p>
    <p class="pBodyRelative"><del><a name="wp109647"></a></del>WebLogicHost 和 WebLogicPort 参数。 </p>
    <p class="pBodyRelative"><del><a name="wp109648"></a></del>对于 <em class="cEmphasis"></em>WebLogic Server 群集： </p>
    <p class="pBodyRelative"><del><a name="wp109652"></a></del>WebLogicCluster 参数。 </p>
    <p class="pBodyRelative"><del><a name="wp109776"></a></del>例如： </p>
    <del><a name="wp109665"></a></del>
    <div class="pPreformattedRelative">
    <pre>&lt;IfModule mod_weblogic.c&gt;<br />
    &nbsp;&nbsp;WebLogicHost myweblogic.server.com<br />
    &nbsp;&nbsp;WebLogicPort 7001<br />
    &lt;/IfModule&gt;</pre>
    </div>
    </li><li><del><a name="wp109663"></a></del>要按 MIME 类型代理请求，请将 <code class="cCode">MatchExpression</code> 行添加到 <code class="cCode">IfModule</code> 块中。请注意，如果同时启用按 MIME 类型进行的代理和按路径进行的代理，则按路径进行的代理优先于按 MIME 类型进行的代理。
    <p class="pBodyRelative"><del><a name="wp112865"></a></del>例如，以下针对非群集 WebLogic Server 的 <code class="cCode">IfModule</code> 块指定代理具有 MIME 类型 <code class="cCode">.jsp</code> 的所有文件： </p>
    <del><a name="wp109743"></a></del>
    <div class="pPreformattedRelative">
    <pre>&lt;IfModule mod_weblogic.c&gt;<br />
    &nbsp;&nbsp;WebLogicHost myweblogic.server.com<br />
    &nbsp;&nbsp;WebLogicPort 7001<br />
    &nbsp;&nbsp;MatchExpression *.jsp<br />
    &lt;/IfModule&gt;</pre>
    </div>
    <p class="pBodyRelative"><del><a name="wp109868"></a></del>也可以使用多个 <code class="cCode">MatchExpressions</code>，例如： </p>
    <del><a name="wp109869"></a></del>
    <div class="pPreformattedRelative">
    <pre><code class="cCode">&lt;IfModule mod_weblogic.c&gt;<br />
    </code>&nbsp;&nbsp;WebLogicHost myweblogic.server.com<br />
    &nbsp;&nbsp;WebLogicPort 7001<br />
    <code class="cCode">&nbsp;&nbsp;MatchExpression *.jsp<br />
    &nbsp;&nbsp;MatchExpression *.xyz<br />
    &lt;/IfModule&gt;</code></pre>
    </div>
    <p class="pBodyRelative"><del><a name="wp109850"></a></del>如果要按 MIME 类型将请求代理到 WebLogic Server 群集，请使用 <a href="http://edocs.bea.com.cn/wls/docs92/plugins/plugin_params.html#wp1155261"><code class="cCode">WebLogicCluster</code></a> 参数，而不使用 <code class="cCode">WebLogicHost</code> 和 <code class="cCode">WebLogicPort</code> 参数。例如： </p>
    <del><a name="wp110204"></a></del>
    <div class="pPreformattedRelative">
    <pre><code class="cCode">&lt;IfModule mod_weblogic.c&gt;<br />
    </code>&nbsp;&nbsp;WebLogicCluster w1s1.com:7001,w1s2.com:7001,w1s3.com:7001<br />
    <code class="cCode">&nbsp;&nbsp;MatchExpression *.jsp<br />
    &nbsp;&nbsp;MatchExpression *.xyz<br />
    &lt;/IfModule&gt;</code></pre>
    </div>
    </li><li><del><a name="wp124637"></a></del>要按路径代理请求，请使用 <code class="cCode">Location</code> 块和 <code class="cCode">SetHandler</code> 语句。<code class="cCode" style="font-weight: normal">SetHandler</code><span style="font-weight: bold"> </span>指定Apache HTTP Server 插件模块的处理程序。例如，以下位置块代理 URL 中包含 <code class="cCode">/weblogic</code> 的所有请求： <del><a name="wp124641"></a></del>
    <div class="pPreformattedRelative">
    <pre>&lt;Location /weblogic&gt;<br />
    SetHandler weblogic-handler<br />
    PathTrim /weblogic<br />
    &lt;/Location&gt;</pre>
    </div>
    <p class="pBodyRelative"><del><a name="wp124642"></a></del>PathTrim 参数指定在将请求传递到 WebLogic Server 实例之前从 URL 的开始部分剪切的字符串（请参阅 <a href="http://edocs.bea.com.cn/wls/docs92/plugins/plugin_params.html#wp1143055"><span class="cHyperlink">Web 服务器插件的常规参数</span></a>）。 </p>
    </li><li><del><a name="wp124662"></a></del>（可选）对 t3 或 IIOP 启用 HTTP 隧道。
    <div class="pSmartList2">
    <ol class="pSmartList2" type="a">
        <li><del><a name="wp124643"></a></del>要在使用 t3 协议和 <code class="cCode">weblogic.jar</code> 时启用 HTTP 隧道，请将以下 Location 块添加到 <code class="cCode">httpd.conf</code> 文件中： <del><a name="wp122801"></a></del>
        <div class="pPreformattedRelative">
        <pre>&lt;Location /HTTPClnt&gt;<br />
        SetHandler weblogic-handler<br />
        &lt;/Location&gt;</pre>
        </div>
        <li><del><a name="wp122766"></a></del>要在使用 IIOP（WebLogic Server 瘦客户端 <code class="cCode">wlclient.jar</code>使用的唯一协议）时启用 HTTP 隧道，请将以下 Location 块添加到 <code class="cCode">httpd.conf</code> 文件中： <del><a name="wp122811"></a></del>
        <div class="pPreformattedRelative">
        <pre>&lt;Location /iiop&gt;<br />
        SetHandler weblogic-handler<br />
        &lt;/Location&gt;</pre>
        </div>
        </li>
    </li></ol>
    </div>
    <li><del><a name="wp122734"></a></del>为 Apache HTTP Server 插件定义任何其他参数。
    <p class="pBodyRelative"><del><a name="wp110588"></a></del>Apache HTTP Server 插件可识别 <a name="params"></a><a href="http://edocs.bea.com.cn/wls/docs92/plugins/plugin_params.html#wp1143055"><span class="cHyperlink">Web 服务器插件的常规参数中列出的参数</span></a><span class="cHyperlink">。</span>要修改 Apache HTTP Server 插件的行为，请在以下块中定义这些参数： </p>
    <div class="pSmartList2Bullet">
    <ul>
        <li><del><a name="wp110696"></a></del>在 <code class="cCode">Location</code> 块中，定义适用于按路径<em class="cEmphasis" style="font-style: italic"></em>进行的代理的参数
        <li><del><a name="wp110856"></a></del>在 <code class="cCode">IfModule</code> 块中，定义适用于按 MIME 类型<em class="cEmphasis" style="font-style: italic"></em>进行的代理的参数 </li>
    </li></ul>
    </div>
    </li>
</li></ol>
</div>
<h3 class="pHeading2"><del><a name="wp110857"></a></del>将 weblogic.conf 文件包括在 httpd.conf 文件中 </h3>
<p class="pBody"><del><a name="wp110894"></a></del>如果希望保留几个单独的配置文件，则可通过在 <code class="cCode">httpd.conf</code>文件的 <code class="cCode">IfModule</code> 块中使用 Apache Include 指令，在名为 <code class="cCode">weblogic.conf</code> 文件的单独配置文件中定义参数： </p>
<del><a name="wp110858"></a></del>
<div class="pPreformattedRelative">
<pre><code class="cCode">&lt;IfModule mod_weblogic.c&gt;<br />
# Config file for WebLogic Server that defines the parameters<br />
Include conf/weblogic.conf <br />
&lt;/IfModule&gt;</code></pre>
</div>
<p class="pBody"><del><a name="wp124850"></a></del><code class="cCode">weblogic.conf</code> 文件的语法与 <code class="cCode">httpd.conf</code> 文件的语法相同。 </p>
<p class="pBody"><del><a name="wp125710"></a></del>本部分描述如何创建 <code class="cCode">weblogic.conf</code> 文件，并包括示例 <code class="cCode">weblogic.conf</code> 文件。 </p>
<h4 class="pHeading3"><del><a name="wp125341"></a></del>创建 weblogic.conf 文件 </h4>
<p class="pBody"><del><a name="wp125320"></a></del>构造 <code class="cCode">weblogic.conf</code> 文件时，请注意下列事项： </p>
<div class="pSmartList1Bullet">
<ul>
    <li><del><a name="wp125435"></a></del>如果要在 Apache HTTP Server 插件和 WebLogic Server 之间使用 SSL，则无法在通过 Apache <code class="cCode">Include</code> 指令访问的文件（与 <code class="cCode">weblogic.conf</code>文件一样）中定义参数。
    </li><li><del><a name="wp125427"></a></del>在新行上输入每一个参数。请不要在参数和参数值之间放置&#8220;=&#8221;。例如： <del><a name="wp100426"></a></del>
    <div class="pPreformattedRelative">
    <pre>PARAM_1 value1<br />
    PARAM_2 value2<br />
    PARAM_3 value3</pre>
    </div>
    </li><li><del><a name="wp110958"></a></del>如果请求既与 <code class="cCode">IfModule</code> 块中的 <code class="cCode">MatchExpression</code> 中指定的 MIME 类型匹配，又与 <code class="cCode">Location</code> 块中指定的路径匹配，则 <code class="cCode">Location</code> 块指定的行为优先。
    </li><li><del><a name="wp125380"></a></del>如果要定义 <code class="cCode">CookieName</code> 参数<a href="http://edocs.bea.com.cn/wls/docs92/webapp/weblogic_xml.html#session-descriptor"></a>，则必须在 <code class="cCode">IfModule</code> 块中定义它。
    </li><li><del><a name="wp125463"></a></del>如果使用 Apache HTTP Server <code class="cCode">&lt;VirtualHost&gt;</code> 块，则必须在 <code class="cCode">&lt;VirtualHost&gt;</code> 块中包括虚拟主机的所有配置参数（例如 <code class="cCode">MatchExpression</code>）（请参阅 <span class="cHyperlink"><a href="http://httpd.apache.org/docs/vhosts/">Apache Virtual Host documentation</a></span>）。
    </li><li><del><a name="wp128591"></a></del>如果希望只为环境中的所有虚拟主机配置一个日志文件，则可以使用全局属性来实现。可以在 &lt;IfModule&gt; 标记中一次指定 Debug、WLLogFile 和 WLTempDir 属性，而不是在每个虚拟主机中指定相同的 Debug、WLLogFile 和 WLTempDir 属性。
    </li><li><del><a name="wp128592"></a></del>示例 httpd.conf 文件： <del><a name="wp128593"></a></del>
    <div class="pPreformatted">
    <pre>&lt;IfModule mod_weblogic.c&gt;</pre>
    </div>
    <del><a name="wp128594"></a></del>
    <div class="pPreformatted">
    <pre>  WebLogicCluster	agarwalp02:8005,agarwalp02:8006</pre>
    </div>
    <del><a name="wp128595"></a></del>
    <div class="pPreformatted">
    <pre>  Debug 		ON</pre>
    </div>
    <del><a name="wp128596"></a></del>
    <div class="pPreformatted">
    <pre>  WLLogFile             c:/tmp/global_proxy.log </pre>
    </div>
    <del><a name="wp128597"></a></del>
    <div class="pPreformatted">
    <pre>  WLTempDir             "c:/myTemp"</pre>
    </div>
    <del><a name="wp128598"></a></del>
    <div class="pPreformatted">
    <pre>  DebugConfigInfo       On</pre>
    </div>
    <del><a name="wp128599"></a></del>
    <div class="pPreformatted">
    <pre>  KeepAliveEnabled ON</pre>
    </div>
    <del><a name="wp128600"></a></del>
    <div class="pPreformatted">
    <pre>  KeepAliveSecs  15</pre>
    </div>
    <del><a name="wp128601"></a></del>
    <div class="pPreformatted">
    <pre>&lt;/IfModule&gt;</pre>
    </div>
    <del><a name="wp128602"></a></del>
    <div class="pPreformatted">
    <pre>&lt;Location /jurl&gt;</pre>
    </div>
    <del><a name="wp128603"></a></del>
    <div class="pPreformatted">
    <pre>  SetHandler weblogic-handler</pre>
    </div>
    <del><a name="wp128604"></a></del>
    <div class="pPreformatted">
    <pre>  WebLogicCluster agarwalp01:7001</pre>
    </div>
    <del><a name="wp128605"></a></del>
    <div class="pPreformatted">
    <pre>&lt;/Location&gt;</pre>
    </div>
    <del><a name="wp128606"></a></del>
    <div class="pPreformatted">
    <pre>&lt;Location /web&gt;</pre>
    </div>
    <del><a name="wp128607"></a></del>
    <div class="pPreformatted">
    <pre>  SetHandler weblogic-handler</pre>
    </div>
    <del><a name="wp128608"></a></del>
    <div class="pPreformatted">
    <pre>  PathTrim		/web</pre>
    </div>
    <del><a name="wp128609"></a></del>
    <div class="pPreformatted">
    <pre>  Debug 		OFF</pre>
    </div>
    <del><a name="wp128610"></a></del>
    <div class="pPreformatted">
    <pre>  WLLogFile 		c:/tmp/web_log.log</pre>
    </div>
    <del><a name="wp128611"></a></del>
    <div class="pPreformatted">
    <pre>&lt;/Location&gt;</pre>
    </div>
    <del><a name="wp128613"></a></del>
    <div class="pPreformatted">
    <pre>&lt;Location /foo&gt;</pre>
    </div>
    <del><a name="wp128614"></a></del>
    <div class="pPreformatted">
    <pre>  SetHandler weblogic-handler</pre>
    </div>
    <del><a name="wp128615"></a></del>
    <div class="pPreformatted">
    <pre>  PathTrim		/foo</pre>
    </div>
    <del><a name="wp128616"></a></del>
    <div class="pPreformatted">
    <pre>  Debug 		ERR</pre>
    </div>
    <del><a name="wp128617"></a></del>
    <div class="pPreformatted">
    <pre>  WLLogFile 		c:/tmp/foo_proxy.log</pre>
    </div>
    <del><a name="wp128618"></a></del>
    <div class="pPreformatted">
    <pre>&lt;/Location&gt;</pre>
    </div>
    </li><li><del><a name="wp128589"></a></del>与 /jurl/* 匹配的所有请求的&#8220;调试级别&#8221;都将设置为&#8220;ALL&#8221;，并会将日志消息记录到 c:/tmp/global_proxy.log 文件中。与 /web/* 匹配的所有请求的&#8220;调试级别&#8221;都将设置为&#8220;OFF&#8221;，并且不会记录任何日志消息。与 /foo/* 匹配的所有请求的&#8220;调试级别&#8221;都将设置为&#8220;ERR&#8221;，并会将日志消息记录到 c:/tmp/foo_proxy.log 文件中。
    <li><del><a name="wp116265"></a></del>BEA 建议使用 <code class="cCode">MatchExpression</code> 语句，而不使用 <code class="cCode">&lt;files&gt;</code> 块。 </li>
</li></ul>
</div>
<h4 class="pHeading3"><del><a name="wp125150"></a></del>示例 weblogic.conf 配置文件<a name="sample-wlconf"></a> </h4>
<p class="pBody"><del><a name="wp125151"></a></del>以下示例 <code class="cCode">weblogic.conf</code> 文件可以用作模板，您可以对其进行修改以满足您的环境和服务器的需要。以 # 开始的行是注释。 </p>
<h5 class="pHeading4"><del><a name="wp125153"></a></del>使用 WebLogic 群集的示例<a name="example-cluster"></a> </h5>
<del><a n