TOMCAT 安装教程 & 配置CGI & c语言exe
TOMCAT安装
参考原文网址:百度经验http://jingyan.baidu.com/article/154b4631aad2bb28ca8f4191.html
1.下载安装JDK
网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
设置环境变量
①新建JAVA_HOME,变量值为:
C:\Program Files\Java\jdk1.6.0_10
②新建ClassPath,变量值为:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
③新建Path,变量值为:
%JAVA_HOME%\bin;
注意:根据自己安装的情况进行适当的修改。
2.下载安装TOMCAT
网址:http://tomcat.apache.org/download-60.cgi
①新建CATALINA_BASE,变量值为:
C:\Program Files\Apache Software Foundation\Tomcat 6.0
②新建CATALINA_HOME,变量值为:
C:\Program Files\Apache Software Foundation\Tomcat 6.0
③新建TOMCAT_HOME,变量值为:
C:\Program Files\Apache Software Foundation\Tomcat 6.0
④修改ClassPath,变量值为:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\lib\servlet-api.jar;
⑤修改Path,变量值为:
%JAVA_HOME%\bin;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;
注意:根据自己安装的情况进行适当的修改。
启动服务
在浏览器中进行测试
注意事项:
配置环境变量时,需要细心,比如配置路径中的".;"是一定不能少的,而且软件安装的路径需要非常正确。
有时候,安装一些程序的时候,也会对环境变量进行修改,导致已经安装好的Tomcat出现error,那么请手动复原。重新启动,则可以生效。
3.配置CGI
修改配置文件前要先关闭Apache服务,否则无法保存修改。
cmd-> services.msc
参考网址:http://blog.csdn.net/chcbz/article/details/6032924
1、配置修改conf/web.xml
原来:
<!-- <servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <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</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet> -->
修改为:(去掉注释、将默认文件夹位置改为cgi-bin)
<servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>cgi-bin</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet>
【引】:注意:其中cgiPathPrefix是cgi文件的存放路径,默认是WEB-INF/cgi,我为了方面用awstats,所以改成cgi-bin。
可是这样还不能运行cgi-bin目录下的普通Win32 exe程序还需要设置参数指定使用console /c 来运行exe:
<servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>cgi-bin</param-value> </init-param> <init-param> <param-name>executable</param-name> <param-value>cmd /c</param-value> </init-param> <init-param> <param-name>passShellEnvironment</param-name> <param-value>true</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet>
具体参考网址:http://www.blogjava.net/Tauruser/archive/2007/09/06/143097.html
还是不行,
参考
网址:http://blog.csdn.net/debbykindom/article/details/5790871 Tomcat配置perl及exe的cgi
网址:http://www.iteye.com/problems/90014
网址:http://bbs.csdn.net/topics/70321596
【引用】
如果用c或者c++的话,应该编译成hello.exe这样的可执行文件,然后
把<FORM METHOD="post" ACTION="/cgi-bin/hello.cgi"> 改成
<FORM METHOD="post" ACTION="/cgi-bin/hello.exe">
然后在浏览器访问 http://localhost:8080/cgi-bin/hello.exe
此外,因为hello.exe本身就是可执行程序,所以executable的值配置成空也没问题
<param-name>executable</param-name>
<param-value></param-value>
报错的原因应该是windows不知道hello.cgi应该用什么程序打开(没有设置cgi的文件关联),也就是不识别cgi扩展名。直接在
windows的cmd窗口中执行cmd /c hello.cgi的话,会直接弹出对话框,让你选择用什么程序打开hello.cgi文件。
perl版本:
其中参数executable需要自已添加进去,它的值就是我们用来解释CGI脚本的程序。一般情况下这里会配置为Perl。"C:/Perl/bin/"为Perl的安装目录。
接着继续修改:
原来:
<!-- <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping> -->
修改后:(去掉注释)
<servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping>
/cgi-bin/*意思是,访问cgi文件的默认地址为cgi-bin/*(???)
其中url-pattern就是将来我们访问CGI脚本的url地址模式。
2、修改context.xml文件:
修改前:
<Context> <!-- Default set of monitored resources. If one of these changes, the --> <!-- web application will be reloaded. --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> --> <!-- Uncomment this to enable Comet connection tacking (provides events on session expiration as well as webapp lifecycle) --> <!-- <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" /> --> </Context>
修改后:(添加privilege=“true")
<Context privileged="true"> 。。。 </Context>
4、实例
最后我的配置文件修改为:
web.xml文件:
<servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>cgi-bin</param-value> </init-param> <init-param> <param-name>executable</param-name> <param-value></param-value> </init-param> <init-param> <param-name>passShellEnvironment</param-name> <param-value>true</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet> <!-- The mapping for the CGI Gateway servlet --> <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping>
contex.xml文件:
<Context privileged="true">
。。。
</Context>
indexl根目录:(localhost:8080/)
1、编辑helloworld.exe,c程序:
#include <stdio.h> int main() { printf("Content-Type: text/plain;charset=utf-8\n\n"); printf("Hello world!\n"); return 0; }
(第一个printf是cgi要识别http头,后面的换行是要和后面的内容区分开)
将生成的exe程序放到cgi-bin目录下:
2、编辑test.html
<html> <body> <form action="http://localhost:8080/cgi-bin/helloworld.exe"> <div> <input type="submit" value="执行exe"> </div> </form> </body> </html>
3、打开网页test.html
点击按钮执行之后:
[更换成以下c程序时]
printf输出html
#include <stdio.h> int main(int argc,char **argv) { printf("Content-Type: text/html;charset=utf-8\n\n"); printf("<html><boady><p style=\"color:red;font-size:50pt\">Hello world!</p></body></html>"); return 0; }
效果: