本站首页    管理页面    写新日志    退出

The Neurotic Fishbowl

[Java报表软件—技术知识]Java报表软件Apache和tomcat整合
FineReport——报表技术领跑者 发表于 2012/2/28 14:45:19

  在Java报表软件中,要注意以下几点 Connector的选择选择合适的Connector对于性能、配置的方便性有很重要的影响,目前大致上有JK1。x, JK2, mod_webapp三种connector可以使用。 JK使用比较广泛。JK2是JK1.x的改进,比较新。但是不太容易配置,相关的文档也比较少。此外,JK可以支持其他Web服务器和tomcat的集成。 但mod_webapp不支持。 因此,目前JK1.x是最好的选择。 获得JK使用二进制版本 如果你对报表中的手工编译源代码心有余悸,使用二进制版本也许是个明智的选择。你可以从http://apache。linuxforum。net/dist/jakarta/tomcat-connectors/jk/binaries/下载JK1.x的最新版本。 然而,不幸的是二进制版本的JK和Apache的版本是捆绑在一起的,如果你使用了比较新的Apache(比如httpd-2.0.29)的话,往往很难找到对应的二进制版本的JK。 手工编译源代码 对于不同的操作系统和Apache的版本,如果没有预编译好的JK,则需要进行手工编译。除了Linux以外,其他操作系统一般不会安装编译环境。这时你还需要安装编译器。典型的例子是在Solaris上安装GCC,或是在Windows上安装Visual C++。另外,通常Open Source的软件一般都是用GNU的autoconf、automake生成自动配置脚本和Makefile的,JK也不例外。除了Linux以外的Unix系统中的make不一定能够兼容这些脚本。 所以如果你碰到这些问题就需要安装gmake。下面以Solaris8为例说明如何安装配置编译环境: 在Solaris8中系统自带的make不能兼容automake产生的某些Makefile。 需要的软件包: gcc-3.3-sol9-sparc-local.gzmake-3.80-sol8-sparc-local.tar.gz所有需要的软件包都可以在www.sunfreeware.com上下载到。 解压缩:$gunzip gcc-3.3-sol9-sparc-local.gz $gunzip make-3.80-sol8-sparc-local.gz 用pkgadd安装,需要root权限: #pkgadd -d gcc-3.3-sol9-sparc-local #pkgadd -d make-3.80-sol8-sparc-local 用pkgadd安装后,通常gcc, make会被安装在/usr/local/bin目录下。这是需要让gmake成为系统默认的make。检查PATH环境变量,确保/usr/local/bin目录的位置在Solaris8自带的make的bin之前:$which make /usr/ccs/bin/make $echo $PATH /usr/bin:/usr/ccs/bin:/usr/local/bin 如果发现gmake还不是系统默认的make,可以修改/etc/profile调整PATH。但有一种更简单有效的方法,在/usr/bin目录下建一个到/usr/local/bin/make的符号连接make,这样就能使gmake成为系统默认的make了: # cd /usr/bin # ln -s /usr/local/bin/make make 在报表软件中同样的技巧可以解决一些Perl脚本对perl解释器可执行文件路径引用的不正确。如某个perl脚本的头信息有#!/usr/local/bin/perl -w但Perl在系统上被安装在/usr/bin/目录下。这时需要在 /usr/local/bin/下建立一个到/usr/bin/perl的符号连接perl。 编译完JK后,把它安装到apache中去,执行:# make install 如果不成功,可以手工把mod_jk.so拷贝到apache的modules目录下。 配置在具体动手配置之前应该考虑一下你集成的目标:仅仅是简单的把某个subcontext由tomcat处理,还是更高层次的动态/静态内容整合?是否允许HTTPS的转发;是否要进行负载平衡?具体配置的复杂度会因你的集成目标不同而大相径庭。 假定我们的集成目标是:1.所有的静态资源由Apache处理 2.所有的动态资源由Tomcat处理 配置Tomcatapache和tomcat整合大致上有三种方式: 1.在apache进程中运行tomcat来处理动态内容 2.通过ajp13协议,apache将动态内容的请求转发给tomcat3.使用本地高速Unix domain socket,apache将动态内容的请求转发给tomcat方式2可以将apache和tomcat分布在不同的机器上,从而可以实现负载平衡。方式3速度比较快,当apache和tomcat分布在相同的机器上时可以考虑使用。本文以方式2的为例说明tomcat和apache的集成。 为了能处理ajp13请求,tomcat需要起一个服务。 这是通过在tomcat的server.xml中定义一个Connector来实现的。 在最新的tomcat4.1.30版本中该Connector默认情况下是启用的。如果没有启用在server.xml加入 port="8009" minProcessors="5" maxProcessors="75" enableLookups="true" redirectPort="8443" acceptCount="10" debug="0" connectionTimeout="20000" useURIValidationHack="false" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>;启动tomcat, 检查ajp13服务是否运行 netstat -a | grep 8009或则查看tomcat标准输出上是否有类似的输出: info: JK2: ajp13 listening on /0.0.0.0:80092004-5-22 14:50:35 org.apache.jk.server.JkMain startinfo: Jk running ID=0 time=20/200 config=D:\Tomcat4.1\conf\jk2.properties 配置Apache配置完Tomcat后,进行Apache的配置。首先,我们需要确定整个web应用所在的context,确定了context也就能确定用户通过什么样的URL可以访问该web应用。比如,网站为www.example.com, 如果web应用的context为purchase,那么用户可以通过URL http://www.example.com/purchase访问该应用;如果web应用的context为/,那么用户可以通过URL http://www.example.com访问该应用。一般而言,将web应用的context设定为/可以方便用户。如果存在多个独立的应用,可以考虑把它们放到不同的子context中去。下面介绍把应用context设为/情况下如何配置,其他情况类似。将jk的配置放在一个独立的文件里,然后在httpd。conf中Include该文件。第一步,让apache加载mod_jk: #mod jk for tomcat-apache integrationLoadModule jk_module modules/mod_jk.so 把应用context映射到存放该应用静态资源的目录: # Static files in the examples webapp are served by apache Alias / /www/tomcat4。1/webapps/ROOT/ 同时,因为现在静态资源不是由tomcat处理了,所以出于安全考虑和遵守JSP/Servlet规范需要禁止对WEB-INF子目录的访问: # The following line prohibits users from directly access WEB-INF; AllowOverride None deny from all ;在集成的调试阶段可以考虑允许目录列表功能: ;AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ;接下来一步告诉apache哪些动态内容应该让tomcat处理,为了确定动态内容URL的特征,应该把web.xml中的所有servlet mapping中出现的URL模式在jk.conf中声明: JkMount /BaseServlet worker1 JkMount /Servlet/* worker1 JkMount /ProductUploadServlet worker1 JkMount /upload worker1 JkMount /test worker1 JkMount /*.jsp worker1 JkMount /*.do worker1 其它可能需要修改的配置 配置项 说明 JkWorkersFile指定jk workers.properties的位置,如果是相对路径,则假定在apache的ServerRoot目录下 JkLogFile指定jk log文件的位置,如果是相对路径,则假定在apachServerRoot目录下 JkLogLevel指定jk log的级别有效的选项有:debug/error/infoJkLogStampFormat指定log中的时间格式,使用c函数strftime的格式字符串语法 总结Tomcat和Apache集成时通常需要一下步骤: 1.决定使用哪种connector2.获得connector,如果没有现成的二进制的connector,则需要手工编译,根据操作系统的不同可能还要设置编译环境。 3.配置tomcat4.配置apache,确定context,将context对应到应用的顶层目录。根据web.xml中的servlet映射把所有的动态内容的url模式配置在apache中 5.测试 附录一个完整的配置例子: #mod jk for tomcat-apache integration LoadModule jk_module modules/mod_jk.so JkWorkersFile conf/workers.properties # Where to put jk logs JkLogFile logs/mod_jk。log # Set the jk log level [debug/error/info] JkLogLevel debug # Select the log format JkLogStampFormat "[%Y-%m-%d %H:%M:%S] " # JkOptions indicate to send SSL KEY SIZE, JkOptions +ForwardKeySize +ForwardURICompat +ForwardURICompatUnparsed -ForwardDirectories # JkRequestLogFormat set the request format JkRequestLogFormat "%w %V %T" # Static files in the examples webapp are served by apache Alias / /www/tomcat4。1/webapps/ROOT/ # The following line prohibits users from directly access WEB-INF ;AllowOverride Nonedeny from all ;AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ;#JkAutoAlias /www/tomcat4.1/webapps/ROOT JkMount /BaseServlet worker1 JkMount /Servlet/* worker1 JkMount /ProductUploadServlet worker1 JkMount /upload worker1 JkMount /test worker1 JkMount /*.jsp worker1 JkMount /*.do worker1 此外,在报表中jk还需要一个workers.properties文件配置jk本身的参数.如过不需要培植负载平衡 可以使用以下配置 # Define 1 real worker using ajp13 worker.list=worker1 # Set properties for worker1 (ajp13) worker.worker1.type=ajp13 worker.worker1.host=127.0.0.1 worker.worker1.port=8009 worker.worker1.lbfactor=50 worker.worker1.cachesize=10 worker.worker1.cache_timeout=600 worker.worker1.socket_keepalive=1 worker.worker1.socket_timeout=300 要注意的是JkMount所引用的worker的名称必须是在work.list定义过的。

阅读全文(1243) | 回复(0) | 编辑 | 精华

 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

 
 



The Neurotic Fishbowl

.: 公告

本博客提供详细的java报表软件的制作过程,发布java报表软件的版本更新信息,并适时对国内主流报表软件进行功能比较。


Bloginess

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31

.: 我的分类(专题)

首页(357)
Java报表软件—制作笔记(54)
Java报表软件—功能比较(43)
Java报表软件—使用心得(21)
Java报表软件—行业动态(54)
Java报表软件—新闻资讯(48)
Java报表软件—技术知识(49)
Java报表软件—问题解析(2)


In the Bowl

.: 最新日志

如何对报表的参数控件赋值
java报表工具FineReport常见
报表怎么做 FineReport连接池原
报表怎么做FineReport数据连接之
报表模板之报表设计
报表模板之报表设计


.: 最新回复

回复:报表参数
好好学习,
好好学习,天天向上。买双 air jor
回复:理解FineReport缓存系列2
回复:理解FineReport缓存系列2


The Fishkeeper
blog名称:Java报表软件
日志总数:357
评论数量:69
留言数量:0
访问次数:1211805
建立时间:2006年4月16日



Text Me

.: 留言板

签写新留言

需要你的帮助


Other Fish in the Sea

.: 链接

报表开发工具  html5图表java报表开发工具




站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144787447 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号