2005年06月08日
在JDK1.4中使用JAXP1.3
由于JDK1.5以上已经自带jaxp了,而jdk1.4以下版本需要自己添加jaxp库文件。
 
1。下载
因为jwsdp-1.5中带的jaxp是1.26版本,因此需要单独重新下载jaxp
https://jaxp.dev.java.net/files/documents/913/7831/JAXP_RI_20041025.class
 
参考:
https://jaxp.dev.java.net
http://java.sun.com/xml/jaxp/index.jsp
 
2.安装:
JAXP_RI_20041025.class所在的目录下,进入命令行,
运行:java -cp . JAXP_RI_20041025
然后屏幕上列出所有解压出来的文件名字。
此时,在当前目录下会有一个叫jaxp-1_3的目录,里面有jaxp的jar文件和api文档。
 
3.jaxp需要用到的jar为(都在jaxp-1_3目录下):
dom.jar,jaxp-api.jar,sax.jar,xalan.jar,xercesImpl.jar
 
4.接下来就可以根据自己需要来使用jaxp1.3了
 
5.由于sun默认使用的解析器是经过其包装后的(基于Xerces version 2.6.0 和 XSLTC version 2.5.2),比如:
com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl(可查看javax.xml.parsers.SAXParserFactory 的源代码),
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl(可查看javax.xml.transform.TransformerFactory 的源代码).
因此在需要使用其它解析器的时候,需要通过设置系统属性值的方式,
或者在$java.home/lib/jaxp.properties进行配置($java.home为System.getProperty("java.home")所得到的路径,具体可以查看javax.xml.parsers.FactoryFinder源代码中的 static Object find(String factoryId, String fallbackClassName) 方法)来选择具体的解析器实现。
jaxp.properties中支持以下属性.
 
示例文件如下(实际就是jaxp的默认值):
javax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

javax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

javax.xml.datatype.DatatypeFactory=com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl
 
假如需要使用apache的解析器,那么如下操作 。
a.下载http://www.apache.org/dist/xml/xerces-j/Xerces-J-bin.2.6.2.zip
http://www.eu.apache.org/dist/xml/xalan-j/binaries/xalan-j_2_6_0-bin.zip
(均为当前最新版本)
b.解压获得相应的jar文件,放入classpath中。
3.配置jaxp.properties为:
javax.xml.transform.TransformerFactory=org.apache.xalan.xsltc.trax.TransformerFactoryImpl
#也可以使用
#javax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
javax.xml.datatype.DatatypeFactory=org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl
 
 
 
 
 
6.需要关于jaxp的调试信息,设置系统属性jaxp.debug为1即可
   System.setProperty("jaxp.debug","1");
或者运行时的命令为: java -Djaxp.debug=1 com.lizongbo.TestJAXP
 
 
 
几篇非常好的资料:
 
JAXP 专述 Sun 的 Java API for XML 语法分析
http://www-128.ibm.com/developerworks/cn/xml/jaxp/index.html

JAXP 再述 Sun 的 Java API for XML Parsing,1.1 版

http://www-128.ibm.com/developerworks/cn/xml/jaxp1/index.html
 
JAXP 1.3 的新特性,第 1 部分
技术综述,考察解析 API 的变化和新的验证 API
http://www-128.ibm.com/developerworks/cn/xml/x-jaxp13a.html
JAXP 1.3 的新特性,第 2 部分
XPath 功能、支持名称空间的工具和其他改进
http://www-128.ibm.com/developerworks/cn/xml/x-jaxp13b.html
JAXP 全面介绍,第 1 部分
XML 处理工具包使解析和验证变得更容易
http://www-128.ibm.com/developerworks/cn/xml/x-jaxp/index.html
 
Factory模式和Abstract Factory模式
http://www.netbei.com/Article/jsp/jsp6/200409/2771.html
 

Java中关于XML的API一瞥

http://www.matrix.org.cn/article/1073.html
 
 
2005年06月07日
1。使用 WORD-WRAP: break-word样式来进行自适应换行。
例如:
div { word-wrap: break-word; word-break: break-all; }
<xmp style="WORD-WRAP: break-word;word-break: break-all;"></xmp>
其中表格换行
<table style=’table-layout:fixed’>
 
参考: http://www.delphibbs.com/delphibbs/dispq.asp?lid=1004292
 
css20.chm::/css20/c_wordwrap.html
 
css20.chm::/css20/c_tablelayout.html
 
2.禁止输入法,这样就可以限制不能够输入汉字
<input type=text style="ime-mode: disabled ; ">
see:http://www.duoluo.com/webdream/dlog/showlog.asp?cat_id=5&log_id=407
 
3.表格单元内容为空时也需要显示边框.
 <table border=1 style="border-collapse: collapse; " bordercolor=red>
<tr>
<td>lizongbo</td><td>lizongbo</td>
</tr>
<tr>
<td><!–注意这里内容为空,–></td><td>lizongbo</td>
</tr>
<tr>
<td>lizongbo</td><td>lizongbo</td>
</tr>
</table>
“empty-cells: hide;”这个设置并不能够产生效果,因为ie不支持:
参考:http://www.faridea.com/bbs/Announce/Announce.asp?BoardID=301&ID=4618
2005年06月06日

jsp预编译有以下好处:

1.省去第一次运行jsp时的编译所花费的时间,实现servlet一样,一步到位的运行。

2.有效的保护源代码,在产品发布的时候只需要提供依据编译好的class文件,不需要提供jsp源文件,对保护jsp源代码有好处,虽然class文件没有混淆,但是很少人愿意手工去把预编译jsp产生的class文件还原为jsp(目前还没发现有自动还原为jsp的工具)。

但是,也注意,如果为了享受第二个好处,那么也就注意,你需要为不同的servlet容器进行不同的预编译。

比如tomcat的是org.apache.jasper.JspC,而Weblogic的是weblogic.jspc

用Tomcat进行预编译的ant脚本如下:

build.properties的内容为:

tomcat.home=D:/jakarta-tomcat-5.5.9
webapp.path=E:/lizongbo/mywebapp

build.xml的内容为:

<project name="Webapp Precompilation" default="all" basedir=".">
<property file="build.properties"/>
  <target name="jspc">

    <taskdef classname="org.apache.jasper.JspC" name="jasper2" >
      <classpath id="jspc.classpath">
        <pathelement location="${java.home}/../lib/tools.jar"/>
        <fileset dir="${tomcat.home}/bin">
          <include name="*.jar"/>
        </fileset>
        <fileset dir="${tomcat.home}/server/lib">
          <include name="*.jar"/>
        </fileset>
        <fileset dir="${tomcat.home}/common/lib">
          <include name="*.jar"/>
        </fileset>
      </classpath>
    </taskdef>

    <jasper2 javaEncoding="UTF-8"
             validateXml="false"
             uriroot="${webapp.path}"
             webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml"
             outputDir="${webapp.path}/WEB-INF/src" />

  </target>

  <target name="compile">

    <mkdir dir="${webapp.path}/WEB-INF/classes"/>
    <mkdir dir="${webapp.path}/WEB-INF/lib"/>

    <javac destdir="${webapp.path}/WEB-INF/classes"
           optimize="of"
           encoding="UTF-8"
           debug="on" failonerror="false"
           srcdir="${webapp.path}/WEB-INF/src"
    excludes="**/*.smap">
      <classpath>
        <pathelement location="${webapp.path}/WEB-INF/classes"/>
        <fileset dir="${webapp.path}/WEB-INF/lib">
          <include name="*.jar"/>
        </fileset>
        <pathelement location="${tomcat.home}/common/classes"/>
        <fileset dir="${tomcat.home}/common/lib">
          <include name="*.jar"/>
        </fileset>
        <pathelement location="${tomcat.home}/shared/classes"/>
        <fileset dir="${tomcat.home}/shared/lib">
          <include name="*.jar"/>
        </fileset>
        <fileset dir="${tomcat.home}/bin">
          <include name="*.jar"/>
        </fileset>
      </classpath>
      <include name="**" />
      <exclude name="tags/**" />
    </javac>
<jar jarfile="${webapp.path}/WEB-INF/lib/lizongbo.jar" basedir="${webapp.path}/WEB-INF/classes"/>
  </target>
  <target name="all" depends="jspc,compile">
  </target>

</project>

只需要设置好ant的path环境变量,然后修改build.properties。执行ant命令即可。

生成好的jar文件是lizongbo.jar。

在做为产品发布的时候,还需要清除掉${webapp.path}/WEB-INF/classes下的class文件,并且把

${webapp.path}/WEB-INF/generated_web.xml里的servlet映射,添加到${webapp.path}/WEB-INF/web.xml中。

然后就可以删除所有预编过的jsp了。

Tomcat 5.5.9中的admin 模块就是通过jsp预编译打包为catalina-admin.jar的。

D:\jakarta-tomcat-5.5.9\server\webapps\下的几个web应用,都是使用了jsp预编译。

http://www.apache.org/dist/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9-admin.zip

参考以下连接,将对你可能遇到的问题有帮助:

遇到 "unmappable character for encoding GBK" 的解决。


http://www.donews.net/lizongbo/archive/2005/05/14/379810.aspx

Jasper 2 JSP Engine How To

Web Application Compilation:

http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jasper-howto.html

jspc Task:

http://ant.apache.org/manual/OptionalTasks/jspc.html

weblogic中使用ant预编译jsp文件

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=17465&messageID=136608

http://www.knowsky.com/2881.html

2005年05月27日
使用UrlRewrite Filter对url进行美化转换处理
1.下载
 http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.4-src.zip
http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.4.zip
相关联接:http://tuckey.org/urlrewrite/
 
2.解压得到urlrewrite-2.4.jar和urlrewrite.xml.
 
3.创建一个测试用的webapp.
先建立一个Servlet,来输出request.getQueryString().
并将这个servlet映射为/*
4.引入urlrewrite-2.4.jar,
编辑web.xml,加入
 
        <filter>
            <filter-name>UrlRewriteFilter</filter-name>
            <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
            <init-param>
                <param-name>logLevel</param-name>
                <param-value>DEBUG</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>UrlRewriteFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
 
5.在WEB-INF目录下创建urlrewrite.xml,然后定义一些url重写规则。
然后就可以在webapp中使用url重写了。
例如:
 <rule>
  <from>(.*).html</from>
  <to>/lizongbo/$1</to>
 </rule>
 <rule>
  <from>/lizongbo.html</from>
  <to type="redirect">http://www.donews.net/lizongbo</to>
 </rule>
6.有一个特殊的url,/rewrite-status是用来显示urlrewrite的状态信息的。
 
UrlRewrite Filter确实简单实用且功能强大,不错。
Tomcat自带的Example里也有url重写的例子,不过功能比较弱。
 
参考http://tuckey.org/urlrewrite/
http://tuckey.org/urlrewrite/manual/guide.html
http://tuckey.org/urlrewrite/manual/index.html
2005年05月26日
用p6spy和sqlprofiler来进行jdbc sql日志记录和分析
 
1.相关工具下载:
p6spy:   http://heanet.dl.sourceforge.net/sourceforge/p6spy/p6spy-install.zip
http://www.p6spy.com/download.html
辅助日志分析工具:
http://heanet.dl.sourceforge.net/sourceforge/sqlprofiler/sqlprofiler-0.3-bin.zip
http://www.jahia.org/jahia/page377.html
2.解压p6spy-install.zip,把p6spy.jar和spy.properties放到classpath中。
 
修改spy.properties
realdriver=org.gjt.mm.mysql.Driver# 数据库驱动程序的名字
 
appender=com.p6spy.engine.logging.appender.StdoutLogger
 
3.在设置数据源或者配置数据库连接的地方,
修改driver为:com.p6spy.engine.spy.P6SpyDriver
 
例如:

<sql:setDataSource driver="com.p6spy.engine.spy.P6SpyDriver" user="${db_user}" password="${db_password}" url="${db_url}" var="mydb" scope="application"/>

 
运行程序,然后就可以在控制台看到所有的sql语句了。
 
4.解压sqlprofiler-0.3-bin.zip,将
spy.properties下面内容复制到先前的spy.properties替换相应地配置:
————————–
appender=com.p6spy.engine.logging.appender.Log4jLogger
#appender=com.p6spy.engine.logging.appender.StdoutLogger
#appender=com.p6spy.engine.logging.appender.FileLogger
 
# append to  the p6spy log file.  if this is set to false the
# log file is truncated every time.  (file logger only)
append=true
 
#The following are for log4j logging only
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=p6spy – %m%n
 
log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender
log4j.appender.SQLPROFILER_CLIENT.RemoteHost=localhost
log4j.appender.SQLPROFILER_CLIENT.Port=4445
log4j.appender.SQLPROFILER_CLIENT.LocationInfo=true
 
#log4j.logger.p6spy=INFO,STDOUT
log4j.logger.p6spy=DEBUG, SQLPROFILER_CLIENT
 
 
这段配置的意思是使用log4j来记录日志。
因此需要用到log4j.jar
 
先运行sqlprofiler.jar,然后再运行自己的应用,
这样就可以建立socket的logger了。
然后就可以在sqlprofiler的界面中看到sql语句。
 
参考:
http://www.javaworld.com.tw/jute/post/view?bid=21&id=93745&sty=1&tpg=1&age=0
 
windows下openldap的安装与测试
1.openldap的下载:
可以通过 openldap for windows 在google上搜索到。
目前最新版本是:2.2.19
下载地址:
http://download.bergmans.us/openldap/openldap-2.2.19/openldap-2.2.19-db-4.3.21-openssl-0.9.7e-win32.exe
相关联接:
http://lucas.bergmans.us/hacks/openldap/
 
2.运行openldap-2.2.19-db-4.3.21-openssl-0.9.7e-win32.exe安装,一路next就可以了安装ldap for windows到D:\openldap\。
 
3.假设我们使用的域名是 lizongbo.com 对应的主机IP是192.168.9.126
 
4.修改C:\WINNT\system32\drivers\etc\下的host文件
添加下面一行
192.168.9.226   lizongbo.com
 
5.配置openldap,修改D:\openldap\slapd.conf里的内容
 
把下面两行(57,58行)
 
suffix  "dc=my-domain,dc=com"
rootdn  "cn=Manager,dc=my-domain,dc=com"
 
改成
 

suffix  "dc=lizongbo,dc=com"
rootdn  "cn=Manager,dc=lizongbo,dc=com"
 
运行
 
D:\openldap>slappasswd -h {MD5}
New password: Re-enter new password: {MD5}S6CYCoq9tq5LPyFg79WaMQ==
(我输入的密码是lizongbo)
然后继续修改slapd.conf
 
把下面这行(62行)
 
rootpw  secret
 
改成
 
rootpw  {MD5}S6CYCoq9tq5LPyFg79WaMQ==
 
 
 
接下来运行D:\openldap\slapd.exe来启动LDAP服务。
或者运行slapd -d 1
可以看到日志信息。
 
6.java测试:
 
package com.lizongbo.ldapdemo;
 
import java.util.*;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
 
public class LDAPTest {
  public LDAPTest() {
  }
 
  public static void main(String[] args) {
    LDAPTest LDAPTest1 = new LDAPTest();
    String root = "dc=lizongbo,dc=com"; //root
 
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://192.168.9.226/" + root);   
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=lizongbo,dc=com");
    env.put(Context.SECURITY_CREDENTIALS, "lizongbo");
    DirContext ctx = null;
    try {
      ctx = new InitialDirContext(env);
      System.out.println("认证成功");
    }
    catch (javax.naming.AuthenticationException e) {
      e.printStackTrace();
      System.out.println("认证失败");
    }
    catch (Exception e) {
      System.out.println("认证出错:");
      e.printStackTrace();
    }
 
    if (ctx != null) {
      try {
        ctx.close();
      }
      catch (NamingException e) {
        //ignore
      }
    }
    System.exit(0);
  }
 
}
2005年05月17日

配置cgi,以支持exe文件.

参考:http://www.oreilly.com.cn/news.php?n=20040109171925&c=java
 
如果使用exe文件来做cgi,还需要设置一个参数executable,这个参数的默认值是支持perl的。
 

配置如下:
 
 <servlet>
  <servlet-name>cgi</servlet-name>
  <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
  <init-param>
   <param-name>clientInputTimeout</param-name>
   <param-value>100</param-value>
  </init-param>
  <init-param>
   <param-name>debug</param-name>
   <param-value>0</param-value>
  </init-param>
  <init-param>
   <param-name>cgiPathPrefix</param-name>
   <param-value>WEB-INF/cgi-bin</param-value>
  </init-param>
        <init-param>
            <param-name>executable</param-name>
            <param-value>cmd /c </param-value>
        </init-param>
  <load-on-startup>5</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>cgi</servlet-name>
  <url-pattern>/cgi-bin/*</url-pattern>
 </servlet-mapping>
 
testcgi.exe文件存放的路径在
D:\jakarta-tomcat-5.5.8\webapps\lizongbo\WEB-INF\cgi-bin
 
访问地址是:
 
http://localhost:8080/lizongbo/cgi-bin/testcgi.exe
 
 
但是Tomcat 4.1.30的cgi有bug.
访问http://localhost:8080/lizongbo/cgi-bin/testcgi.exe/index.php
这样的路径时候就会出现404错误。
解决办法:
那就是用Tomcat5.5.9的D:\jakarta-tomcat-5.5.9\server\lib\servlets-cgi.jar
(原名servlets-cgi.renametojar)来替换Tomcat4.1.30的,然后重新启动Tomcat即可.

出于java的安全限制,System.getProperty("line.seperator")是不能够直接取得的。可以这样做:
String lineSeparator = (String) java.security.AccessController.doPrivileged(
               new sun.security.action.GetPropertyAction("line.separator"));
具体参考java.io.BufferedWriter的源代码就可以找到上面这行代码。

2005年05月16日

代码改自:org.displaytag.sample.displaysourceservlet

web.xml的映射如下:
  <servlet>
    <servlet-name>displayjspsourceservlet</servlet-name>
    <servlet-class>com.lizongbo.displayjspsourceservlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>displayjspsourceservlet</servlet-name>
    <url-pattern>*.jspsrc</url-pattern>
  </servlet-mapping>

java代码如下:
package com.lizongbo;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class displayjspsourceservlet
    extends httpservlet {
  private static final string content_type = "text/html; charset=utf-8";
  public void init() throws servletexception {
  }

  public void doget(httpservletrequest request, httpservletresponse response) throws
      servletexception, ioexception {
    response.setcontenttype(content_type);
    printwriter out = response.getwriter();
    out.println("<html>");
    out.println("<head><title>jsp source ");
    string jspfn = request.getservletpath();
    jspfn = jspfn == null ? "" : jspfn;
    if (jspfn.lastindexof(".jsp.") > 1) {
      jspfn = jspfn.substring(0,jspfn.lastindexof(".jsp.") + 4);
    }
    out.print(jspfn);
    out.println("  — lizongbo edit from org.displaytag.sample.displaysourceservlet </title></head>");
    out.println("<body bgcolor=\"#ffffff\">");
    out.println("<pre>");
    inputstream inputstream = getservletcontext().getresourceasstream(
        jspfn);
    if (inputstream == null) {
      out.println("unable to find jsp file: " + jspfn);
    }
    else {
      for (int currentchar = inputstream.read(); currentchar != -1;
           currentchar = inputstream.read()) {
        if (currentchar == ‘<’) {
          out.print("&lt;");
        }
        else {
          out.print( (char) currentchar);
        }
      }
    }
    out.println("</pre>");
    out.println("</body>");
    out.println("</html>");
    out.close();
  }
  public void dopost(httpservletrequest request, httpservletresponse response) throws
      servletexception, ioexception {
    doget(request, response);
  }

  public void destroy() {
  }
}


使用方法
比如可以访问:http://lizongbo.com:/lizongbo/lizongbo.jsp
那么访问 http://lizongbo.com:/lizongbo/lizongbo.jsp.jspsrc

就可以查看到jsp文件的源代码。

2005年05月15日

1.下载地址:
Tomcat 5.5.9:
http://www.eu.apache.org/dist/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.zip
http://www.eu.apache.org/dist/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9-fulldocs.tar.gz
http://www.eu.apache.org/dist/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9-compat.zip
http://www.eu.apache.org/dist/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9-admin.zip
Apache 2.0.54:
http://www.eu.apache.org/dist/httpd/binaries/win32/apache_2.0.54-win32-x86-no_ssl.msi
mod_jk1.2.12:
http://www.eu.apache.org/dist/jakarta/tomcat-connectors/jk/binaries/win32/jk-1.2.12/mod_jk-1.2.12-apache-2.0.54.so(好像Apache 2.0.53已经自带mod_jk.so了,但是2.0.54没有自带)
Apache2.0.54带mod_ssl.so的版本
http://hunter.campbus.com/Apache_2.0.54-Openssl_0.9.7g-Win32.zip

2.安装:
先解压tomcat;安装apache,添加mod_jk.so(复制并重命名mod_jk-1.2.12-apache-2.0.54.so)
添加mod_ssl.so(取自Apache_2.0.54-Openssl_0.9.7g-Win32.zip,或者从xampp中获取,目前只有2.0.53的)把ssl.conf,ssl.default.conf放到conf目录,

其中default.conf作为备份),libeay32.dll, ssleay32.dll(这2个都在bin目录)。把它们全都复制到你自己的apahce下的对应目录。


3.配置Apache:
编辑httpd.conf
ServerName www.lizongbo.com
注释成下面这个样子:
#<IfModule mod_ssl.c>
#    Include conf/ssl.conf
#</IfModule>
 然后再文件最后一行加上:
Include conf/ssl.conf

ssl.conf内容可以参照xampp的配置:
关键是如下两行

SSLCertificateFile conf/ca/server.crt
SSLCertificateKeyFile conf/ca/server.key


————————————–

利用tomcatca生成证书,
然后把D:\tomcat-ca\work\ca\下的ca-cert.pem改名字为:server.crt
把ca-key.pem改名字为:server.key,把这两个文件复制到E:\Apache\Apache2\conf\ca下面。
这个时候启动apache,访问https://lizongbo.com/正常的话应该就可以使用ssl了。

4.整合Tomcat:
解压tomcat到E:\jakarta-tomcat-5.5.9.
重命名并复制到E:\Apache\Apache2\modules\mod_jk.so
新建并编辑和保存E:\Apache\Apache2\conf\workers.properties:
具体内容内容参考mod_jk的源代码。


编辑http.conf,在文件结尾增加下面的内容:
 <Directory ~ "/WEB-INF/">
     Order allow,deny
     Deny from all
    </Directory>
 <Directory ~ "/META-INF/">
     Order allow,deny
     Deny from all
    </Directory>
LoadModule jk_module modules/mod_jk.so
Alias /admin E:/jakarta-tomcat-5.5.9/server/webapps/admin
JkWorkersFile E:/apache/Apache2/conf/workers.properties
JkLogFile E:/apache/Apache2/logs/mod_jk.log
JkLogLevel info
#JkLogLevel debug
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
JkMount /clusterapp/servlet/* myloadbalancer
JkMount /clusterapp/*.jsp myloadbalancer
JkMount /admin/ myloadbalancer
JkMount /admin/j_security_check myloadbalancer
JkMount /admin/*.jsp myloadbalancer
JkMount /admin/*.do myloadbalancer
JkMount /status/* status


接下来配置Tomcat:
编辑E:\jakarta-tomcat-5.5.9\conf\server.xml
123行左右,把<Engine name="Catalina" defaultHost="lizongbo.com">
改成:
     <Engine name="Catalina" defaultHost="lizongbo.com" jvmRoute="tomcat1">
修改
tomcat-user.xml
内容如下:
<?xml version=’1.0′ encoding=’utf-8′?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="lizongbo" password="lizongbopass" roles="admin,manager"/>
</tomcat-users>

5.访问http://lizongbo.com/status/
可以看到jk的状态信息。

配置Tomcat的 ssl,(也可不配置,略)。
然后修改server.xml
把转向端口8843改为443
    <Connector port="8009"
               enableLookups="false" redirectPort="443" protocol="AJP/1.3" />

配置web.xml强制使用https来访问资源,(也可不配置,略)。

这样,当如果在同一台服务器上测试apache+Tomcat的集群时候
,就可以通过80,443,8080,8443端口都能够访问到网站的http服务,
可以给用户提供更高安全性的访问,实在是一件愉悦的事情:)

参考:
http://www.chinaunix.net/jh/13/523585.html