谈笑有鸿儒,往来无白丁

在恰当的时间、地点以恰当的方式表达给恰当的人...  阅读的时候请注意分类,佛曰我日里面是谈笑文章,其他是各个分类的文章,积极的热情投入到写博的队伍中来,支持blogjava做大做强!向dudu站长致敬>> > 我的微博敬请收听
随着java的流行,其在web上的应用也越来越广,tomcat作为一个开源的servlet容器,应用前景越来越广,本文将向你讲述tomcat的一些知识。  
一:简介  
tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品(Most Innovative Java Product),同时它又是sun公司官方推荐的servlet和jsp容器(具体可以见http://java.sun.com/products/jsp/tomcat/),因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。  

二:安装及配置  
tomcat最新版本为4.0.1,这个版本用了一个新的servlet容器Catalina,完整的实现了servlet2.3和jsp1.2规范。注意安装之前你的系统必须安装了jdk1.2以上版本。  

(一):安装  
1:windows平台  
从tomcat网站下载jakarta-tomcat-4.0.1.exe,按照一般的windows程序安装步骤即可安装好tomcat,安装时它会自动寻找你的jdk和jre的位置。  

2:linux平台  
下载jakarta-tomcat-4.0.1.tar.gz,将其解压到一个目录。  

(二):配置  
运行tomcat需要设置JAVA_HOME变量  
set JAVA_HOME=c:/jdk (win98,在msdos方式下使用,或者放入autoexec.bat中)  
export JAVA_HOME=/usr/local/jdk (linux下使用,放到/etc/bashrc或者/etc/profile中)  

(三):运行  
设置完毕后就可以运行tomcat服务器了,进入tomcat的bin目录,win98下用startup启动tomcat,linux下用startup.sh,相应的关闭tomcat的命令为shutdown和shutdown.sh。  

启动后可以在浏览器中输入http://localhost:8080/测试,由于tomcat本身具有web服务器的功能,因此我们不必安装apache,当然其也可以与apache集成到一起,下面会介绍。  

下面你可以测试其自带的jsp和servlet示例。  

三:应用  

(一):目录结构  
tomcat的目录结构如下: 目录名 简介  
bin 存放启动和关闭tomcat脚本  
conf 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml  
work 存放jsp编译后产生的class文件  
webapp 存放应用程序示例,以后你要部署的应用程序也要放到此目录  
logs 存放日志文件  
lib/japser/common 这三个目录主要存放tomcat所需的jar文件  


(二):server.xml配置简介  
下面我们将讲述这个文件中的基本配置信息,更具体的配置信息见tomcat的文档 元素名 属性 解释  
server port 指定一个端口,这个端口负责监听关闭tomcat的请求  
shutdown 指定向端口发送的命令字符串  
service name 指定service的名字  
Connector  
(表示客户端和service之间的连接) port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求  
minProcessors 服务器启动时创建的处理请求的线程数  
maxProcessors 最大可以创建的处理请求的线程数  
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址  
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号  
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理  
connectionTimeout 指定超时的时间数(以毫秒为单位)  
Engine  
(表示指定service中的请求处理机,接收和处理来自Connector的请求) defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的  
Context  
(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范) docBase 应用程序的路径或者是WAR文件存放的路径  
path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****  
reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序  
host  
(表示一个虚拟主机)  
name 指定主机名  
appBase 应用程序基本目录,即存放应用程序的目录  
unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序  
Logger  
(表示日志,调试和错误信息)  
className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口  
prefix 指定log文件的前缀  
suffix 指定log文件的后缀  
timestamp 如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt  
Realm  
(表示存放用户名,密码及role的数据库)  
className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口  
Valve  
(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样)  
className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息  

directory 指定log文件存放的位置  
pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多  


注意:1:经过我测试,我设置Context 的path="",reloadable=true,然后放一个WAR文件到webapps目录,结果tomcat不能检测出此文件(重起tomcat可以),而把此文件解压,则tomcat会自动检测出这个新的应用程序。如果不能自动检测WAR文件,我们可以利用下面管理中讲的方法来部署应用程序。  

2:默认的server.xml中,Realm元素只设置了一个className属性,但此文件中也包含几个通过JDBC连接到数据库进行验证的示例(被注释掉了),通过Realm元素我们可以实现容器安全管理(Container Managed Security)。  

3:还有一些元素我们没有介绍,如Parameter,loader,你可以通过tomcat的文档获取这些元素的信息。  

(三):管理  

1:配置  
在进行具体的管理之前,我们先给tomcat添加一个用户,使这个用户有权限来进行管理。  

打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行:  
<user name="zf" password="zf" roles="standard,manager"/>  




注意:这一行的最后部分一定是/>,tomcat的文档掉了/符号,如果没有/符号的话,tomcat重起时将无法访问应用程序。通过logs/catalina.out文件你可以看到这个错误的详细信息。  

然后重起tomcat,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的用户名和密码即可。  

2:应用程序列表  
在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息:  
OK - Listed applications for virtual host localhost  
/ex:running:1  
/examples:running:1  
/webdav:running:0  
/tomcat-docs:running:0  
/manager:running:0  
/:running:0  



面的信息分别为应用程序的路径,当前状态(running 或者stopped),与这个程序相连的session数。  

3:重新装载应用程序  
在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显示如下:  
OK - Reloaded application at context path /examples  




表示example应用程序装载成功,如果我们将server.xml的Context元素的reloadable属性设为true(见上面表格),则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。  

4:显示session信息  
在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显示如下: OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes  

1111111111111
第一步:下载j2sdk和tomcat:到sun官方站点(http://java.sun.com/j2se/1.4.2/download.html)下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.4.2 Documentation,然后到tomcat官方站点(http://www.apache.org/dist/jakarta/tomcat-4/)下载tomcat(下载最新4.1.x版本的tomcat);  

第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后按默认设置进行安装即可。  
1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.4.2):  
JAVA_HOME=c:\j2sdk1.4.2  
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径)  
path=%JAVA_HOME%\bin  
接着可以写一个简单的java程序来测试J2SDK是否已安装成功:  
public class Test{  
public static void main(String args[]){  
System.out.println("This is a test program.");  
}  
}  
将上面的这段程序保存为文件名为Test.java的文件。  
然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令  
javac Test.java  
java Test  
此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。  

2.安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat):  
CATALINA_HOME=c:\tomcat;  
CATALINA_BASE=c:\tomcat;  
然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去,修改后的classpath如下:  
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;  
接着可以启动tomcat,在IE中访问http://localhost:8080  
如果看到tomcat的欢迎页面的话说明安装成功了。

第三步:建立自己的jsp app目录  
1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录;  
2.在webapps目录下新建一个目录,起名叫myapp;  
3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的;  
4.WEB-INF下新建一个文件web.xml,内容如下:  
<?xml version="1.0" encoding="ISO-8859-1"?>  

<!DOCTYPE web-app  
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
"http://java.sun.com/dtd/web-app_2_3.dtd">  

<web-app>  
<display-name>My Web Application</display-name>  
<description>  
A application for test.  
</description>  
</web-app>  
5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下:  
<html><body><center>  
Now time is: <%=new java.util.Date()%>  
</center></body></html>  
6.重启Tomcat  
7.打开浏览器,输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。  

第四步:建立自己的Servlet:  
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个servlet程序,文件名为Test.java,文件内容如下:  
package test;  
import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
public class Test extends HttpServlet {  
protected void doGet(HttpServletRequest request, HttpServletResponse response)  
throws ServletException, IOException {  
PrintWriter out=response.getWriter();  
out.println("<html><body><h1>This is a servlet test.</h1></body></html>");  
out.flush();  
}  
}  
2 .编译  
将Test.java放在c:\test下,使用如下命令编译:  
C:\Test>javac Test.java  
然后在c:\Test下会产生一个编译后的servlet文件:Test.class  
3 .将结构test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那个test目录到classes目录下,如果classes目录不存在,就新建一个。 现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结构  
4 .修改webapps\myapp\WEB-INF\web.xml,添加servlet和servlet-mapping  
编辑后的web.xml如下所示,红色为添加的内容:  
<?xml version="1.0" encoding="ISO-8859-1"?>  

<!DOCTYPE web-app  
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
"http://java.sun.com/dtd/web-app_2_3.dtd">  

<display-name>My Web Application</display-name>  
<description>  
A application for test.  
</description>  
<servlet>  
<servlet-name>Test</servlet-name>  
<display-name>Test</display-name>  
<description>A test Servlet</description>  
<servlet-class>test.Test</servlet-class>  
</servlet>  
<servlet-mapping>  
<servlet-name>Test</servlet-name>  
<url-pattern>/Test</url-pattern>  
</servlet-mapping>  
</web-app>  
这段话中的servlet这一段声明了你要调用的Servlet,而servlet-mapping则是将声明的servlet“映射”到地址/Test上  
5 .好了,启动Tomcat,启动浏览器,输入http://localhost:8080/myapp/Test 如果看到输出This is a servlet test.就说明编写的servlet成功了。  
注意:修改了web.xml以及新加了class,都要重启Tomcat  

第四步:建立自己的Bean:  
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个java程序,文件名为TestBean.java,文件内容如下:  
package test;  
public class TestBean{  
private String name = null;  
public TestBean(String strName_p){  
this.name=strName_p;  
}  
public void setName(String strName_p){  
this.name=strName_p;  
}  
public String getName(){  
return this.name;  
}  
}  
2 .编译  
将TestBean.java放在c:\test下,使用如下命令编译:  
C:\Test>javac TestBean.java  
然后在c:\Test下会产生一个编译后的bean文件:TestBean.class  
3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,  
4 .新建一个TestBean.jsp文件,文件内容为:  
<%@ page import="test.TestBean" %>  
<html><body><center>  
<%  
TestBean testBean=new TestBean("This is a test java bean.");  
%>  
Java bean name is: <%=testBean.getName()%>  
</center></body></html>  
5 .好了,重启Tomcat,启动浏览器,输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。  

这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码,自己多动手写代码以增强自己在这方面开发的能力了。  

////////////////////
JSP中tomcat的SQL Server2000数据库连接池的配置
环境:
1. 数据库:Microsoft SQL Server 2000
2. 数据库驱动程序:net.sourceforge.jtds.jdbc.Driver

JNDI(Java Naming and Directory Interface)概述:
Tomcat4(5)提供了一个与Java Enterprise Edition应用服务相兼容的JNDI--InitialContext实现实例。它的初始数据设置在$CATALINA_HOME/conf/server.xml文件里,并可能在网页应用环境描述(/WEB-INF/web.xml)里被下列元素引用:
1) <env-entry>--环境入口,设置应用程序如何操作。
2) <resource-ref>--资源参数,一般是数据库驱动程序、JavaMail Session、自定义类工厂等。
3) <resource-env-ref>--在Servlet 2.4里用来简化设置不需认证信息的资源资源如环境参数、resource-ref变量。

InitialContext在网页应用程序初始化时被设置,用来支持网页应用程序组件。所有的入口和资源都放在JNDI命名空间里的java:comp/env段里。点击下列网址以获取更多信息:
1) Java命名和目录接口(Java Naming and Directory Interface)
2) J2EE平台说明(J2EE Platform Specification)

设置JNDI资源
设置JNDI资源要在$CATALINA_HOME/conf/server.xml文件里使用下列标志符:
1) <Environment>--设置域个可变的JNDI InitialContext入口的名字和值(同上面说的<env-entry>等价)。
2) <Resource>--设置应用程序可用的资源的名字和类型(同上面说的<resource-ref>等价)。
3) <ResourceParams>--设置Java资源类工厂的名称或将用的JavaBean属性。
4) <ResourceLink>--给全局JNDI环境(JNDI Context)添加一个链接。
上述这些标志符必须放在<Context>和</Context>之间(针对专门的网页应用程序)或<DefaultContext>和</DefaultContext>之间。
此外,设在网页应用环境描述(Web Application Descriptor)(/WEB-INF/web.xml)里的名字和值也在初始环境(Initial Context)里被设置,当被<Environemt>元素值允许时将被重设初始值。
全局变量能在<Server>子元素的<GlobalNamingResources>里设置。

数据库连接池概述:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

配置Tomcat数据库连接池的前提:
1. 必须装有Java运行环境;
2. 必须有SQL Server2000数据库服务器(可以不在本地);
3. 必须有jtds.jar,并将它放在$CATALINA_HOME/common/lib目录下(只能是这里)。使用它是因为Microsoft公司的Java SQL Server驱动程序不支持二次查询,可到网上搜到。目前使用的是jtds-0.6.jar。

在$CATALINA_HOME/conf/server.xml里设置数据库连接池:
下面是配置的代码,必须放在<Host>和</Host>之间。

<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true"><Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/><Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/><ResourceParams name="jdbc/connectDB"> <parameter>  <name>maxActive</name>  <!-- Maximum number of DB connections in pool.Set to 0 for no limit. -->  <value>100</value> </parameter> <parameter>  <name>maxIdle</name>  <!-- Maximum number of idle DB connections to retain in pool.Set to 0 for no limit. -->  <value>30</value> </parameter> <parameter>  <name>maxWait</name>  <!-- Maximum time to wait for a DB connection to become available in ms.An exception is thrown if this timeout is exceeded.Set to -1 to wait indefinitely. -->  <value>10000</value> </parameter> <parameter>  <name>removeAbandoned</name>  <!-- Abandoned DB connections are removed and recycled -->  <value>true</value> </parameter> <parameter>  <name>removeAbandonedTimeout</name>  <!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.  -->  <value>60</value> </parameter> <parameter>  <name>logAbandoned</name>  <!-- Log a stack trace of the code which abandoned -->  <value>false</value> </parameter> <parameter>  <name>factory</name>  <!-DBCP Basic Datasource Factory -->  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter>  <name>username</name>  <!-- Database User Name -->  <value>Iorishinier</value> </parameter> <parameter>  <name>password</name>  <!-- User Password -->  <value>mypasswd</value> </parameter> <parameter>  <name>driverClassName</name>  <!-- Database Driver Class Name -->  <value>net.sourceforge.jtds.jdbc.Driver</value> </parameter> <parameter>  <name>url</name>  <!-- Database Address -->  <value>jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind</value> </parameter></ResourceParams></Context>

下面是一些参数的说明:
<Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true">
其中:
1) path 指定路径,这里设定的是$CATALINA_HOME/webapps下的quality目录;
2) docBase 文件根目录。
3) reloader 当网页被更新时是否重新编译。
4) maxActive 连接池的最大数据库连接数。设为0表示无限制。
5) maxIdle 数据库连接的最大空闲时间。超过此空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
6) maxWait 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
7) removeAbandoned 回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。
Smile removeAbandonedTimeout 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。
9) logAbandoned 将被遗弃的数据库连接的回收记入日志。
10) driverClassName JDBC驱动程序。
11) url 数据库连接字符串

在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里设置被引用的资源:
下面是配置代码,必须放在<web-app>和</web-app>里。

<!-- Database Config start --><resource-ref><description>connectDB test</description><res-ref-name>jdbc/connectDB</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth></resource-ref><!-- Database Config end -->


下面是一下参数的必要说明:
1) description 对被引用的资源的描述。
2) res-ref-name 资源名称。见上面的<ResourceParams name="jdbc/connectDB">
3) res-type 资源类型。见上面的<Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/>

在JSP中使用资源:
这是在$CATALINA_HOME/webapps/quality下的某级子目录里的jsp网页文件部分代码:

<%@ page contentType="text/html;charset=GBK"%><%@ page errorPage="error.jsp"%><%@ page import="javax.naming.*"%><%@ page import="javax.sql.*"%><%@ page import="java.sql.*"%><html> <head> </head> <body>  <%   ………………   ………………   // 数据库操作   Context ctx=null;   Connection cnn=null;   Statement stmt=null;   ResultSet rs=null;   try   {    ctx=new InitialContext();    if(ctx==null)     throw new Exception("没有匹配的环境");    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");    if(ds==null)     throw new Exception("没有匹配数据库");        cnn=ds.getConnection();    stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);    rs=stmt.executeQuery("select * from table1");    ………………    ………………   }   finally   {    if(rs!=null)     rs.close();    if(stmt!=null)     stmt.close();    if(cnn!=null)     cnn.close();    if(ctx!=null)     ctx.close();   }    %> </body></html>


代码说明:
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
上面这句应用了刚才设的资源。
资源使用完要释放,尤其是Context资源,见try-catch-finally部分的finally代码段,这是一种好的习惯。资源释放时如果释放了上级资源,下级资源将先被释放。如:释放了ctx,那么资源释放顺序将是rs,stmt,cnn,ctx。换句话说,如果释放了ctx,那么rs,stmt和cnn都将不可用了。
这里的释放资源只是将数据库连接返回连接池中,并不是把资源真正释放掉,见数据库连接池概述。


/////
Tomcat下JSP、Servlet和JavaBean环境的配置  

经常看到jsp的初学者问tomcat下如何配置jsp、servlet和bean的问题,于是总结了一下如何tomcat下配置jsp、servlet和ben,希望对那些初学者有所帮助。  
一、开发环境配置  
第一步:下载j2sdk和tomcat:到sun官方站点(http://java.sun.com/j2se/1.4.2/download.html)下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.4.2 Documentation,然后到tomcat官方站点(http://www.apache.org/dist/jakarta/tomcat-4/)下载tomcat(下载最新4.1.x版本的tomcat);  
第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后按默认设置进行安装即可。  
1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.4.2):  
JAVA_HOME=c:\j2sdk1.4.2  
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径)  
path=%JAVA_HOME%\bin  
接着可以写一个简单的java程序来测试J2SDK是否已安装成功:  
public class Test{  
public static void main(String args[]){  
System.out.println("This is a test program.");  
}  
}  
将上面的这段程序保存为文件名为Test.java的文件。  
然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令  
javac Test.java  
java Test  
此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。  
2.安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat):  
CATALINA_HOME=c:\tomcat  
CATALINA_BASE=c:\tomcat  
然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的(可以根据实际追加)servlet.jar追加到classpath中去,修改后的classpath如下:  
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;  
接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。  
第三步:建立自己的jsp app目录  
1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录;  
2.在webapps目录下新建一个目录,起名叫myapp;  
3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的;  
4.WEB-INF下新建一个文件web.xml,内容如下:  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<!DOCTYPE web-app  
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
"http://java.sun.com/dtd/web-app_2_3.dtd">  
<web-app>  
<display-name>My Web Application</display-name>  
<description>  
A application for test.  
</description>  
</web-app>  
5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下:  
<html><body><center>  
Now time is: <%=new java.util.Date()%>  
</center></body></html>  
6.重启Tomcat  
7.打开浏览器,输http://localhost:8080/myapp/index.jsp看到当前时间的话说明就成功了。  
第四步:建立自己的Servlet:  
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个servlet程序,文件名为Test.java,文件内容如下:  
package test;  
import java.io.IOException;  
import java.io.PrintWriter;  
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
public class Test extends HttpServlet {  
protected void doGet(HttpServletRequest request, HttpServletResponse response)  
throws ServletException, IOException {  
PrintWriter out=response.getWriter();  
out.println("<html><body><h1>This is a servlet test.</h1></body></html>");  
out.flush();  
}  
}  
2 .编译  
将Test.java放在c:\test下,使用如下命令编译:  
C:\Test>javac Test.java  
然后在c:\Test下会产生一个编译后的servlet文件:Test.class  
3 .将结构test\Test.class剪切到%CATALINA_HOME%\webapps\myapp\WEB-INF\classes下,也就是剪切那个test目录到classes目录下,如果classes目录不存在,就新建一个。 现在webapps\myapp\WEB-INF\classes下有test\Test.class的文件目录结构  
4 .修改webapps\myapp\WEB-INF\web.xml,添加servlet和servlet-mapping  
编辑后的web.xml如下所示,红色为添加的内容:  
<?xml version="1.0" encoding="ISO-8859-1"?>  
<!DOCTYPE web-app  
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
"http://java.sun.com/dtd/web-app_2_3.dtd">  
<web-app>  
<display-name>My Web Application</display-name>  
<description>  
A application for test.  
</description>  
<servlet>  
<servlet-name>Test</servlet-name>  
<display-name>Test</display-name>  
<description>A test Servlet</description>  
<servlet-class>test.Test</servlet-class>  
</servlet>  
<servlet-mapping>  
<servlet-name>Test</servlet-name>  
<url-pattern>/Test</url-pattern>  
</servlet-mapping>  
</web-app>  
这段话中的servlet这一段声明了你要调用的Servlet,而servlet-mapping则是将声明的servlet"映射"到地址/Test上  
5 .好了,重启动Tomcat,启动浏览器,输http://localhost:8080/myapp/Test如果看到输出This is a servlet test.就说明编写的servlet成功了。  
注意:修改了web.xml以及新加了class,都要重启Tomcat  
第四步:建立自己的Bean:  
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个java程序,文件名为TestBean.java,文件内容如下:  
package test;  
public class TestBean{  
private String name = null;  
public TestBean(String strName_p){  
this.name=strName_p;  
}  
public void setName(String strName_p){  
this.name=strName_p;  
}  
public String getName(){  
return this.name;  
}  
}  
2 .编译  
将TestBean.java放在c:\test下,使用如下命令编译:  
C:\Test>javac TestBean.java  
然后在c:\Test下会产生一个编译后的bean文件:TestBean.class  
3 .将TestBean.class文件剪切到 %CATALINA_HOME%\webapps\myapp\WEB-INF\classes\test下,  
4 .新建一个TestBean.jsp文件,文件内容为:  
<%@ page import="test.TestBean" %>  
<html><body><center>  
<%  
TestBean testBean=new TestBean("This is a test java bean.");  
%>  
Java bean name is: <%=testBean.getName()%>  
</center></body></html>  
5 .好了,重启Tomcat,启动浏览器,输http://localhost:8080/myapp/TestBean.jsp如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。  
这样就完成了整个Tomcat下的jsp、servlet和javabean的配置。接下来需要做的事情就是多看书、多读别人的好代码,自己多动手写代码以增强自己在这方面开发的能力了。  

jvm应填写到  
c:\j2sdk\bin  

给你一个简单的配置::::  

JSP环境配置心得  
首先要说的是,使用jdk+tomcat完全可以配置我们的jsp服务器,不再需要其实任何东东,有很多文章介绍了Apache,其实根本用不着,一般的学习调试tomcat完全可以胜任了。  
安装jdk后,tomcat在安装之前会自动找到jdk的安装路径,一路点击"下一步",经过一段时间的文件复制,最后"close",完成comcat的安装。  
您最好去下载一个版本较高的tomcat,比如4.1以上的,因为它不需要设置太多的系统变量,右击"我的电脑",选择"属性"->"高级"->"环境变量"->"系统变量",新建一个TOMCAT_HOME,值设置成你的tomcat所在的路径,比如:D:\Program Files\Apache Group\Tomcat 4.1,配置完成。  
从开始菜单中找到tomcat选项,一般打开顺序是:开始->程序->Apache Tomcat 4.1,选择"Start Tomcat",让jsp服务器开始运行,此时会打开一个类似Dos的窗口,会显示一些相关的信息。  
如果您使用代理上网,一定要先撤掉代理,不然您的jsp程序永远也得不到执行。如果不是代理的,这一步就跳过了。  
打开浏览器,在地址栏中输入:http://localhost:8080,如果看到有老虎(我也不知道是老虎还是猫)的画面,恭喜您,您成功了一半。  
先来享受一下成功的喜悦吧,请输入下面的代码:  
<html>  
<head>  
<title>First Page</title>  
</head>  
<body>  
<H3>Today is: h  
<%= new java.util.Date() %>  
</H3>  
</body>  
</html>  
将该程序保存为:First.jsp,放到Tomcat的ROOT目录下,然后在浏览器的地址栏中输入:http://localhost:8080/First.jsp,(First.jsp跟我们保存的文件名的大小写要一致)回车,如果不出意外,应该可以看到形如Today is: h Fri Apr 11 08:32:38 CST 2003 的结果。  
注意:ROOT是tomcat的默认虚拟目录,如果要改成自己的虚拟目录怎么办呢?请继续往下看吧。  
要改成自己的虚拟目录,就要请出server.xml来了,该文件是一个配置文件,在Tomcat\conf目录下,使用任何文本编辑软件都能打开它,我们先找到下面一句:  
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"  
port="8080" minProcessors="5" maxProcessors="75"  
enableLookups="true" redirectPort="8443"  
acceptCount="100" debug="0" connectionTimeout="20000"  
useURIValidationHack="false" disableUploadTimeout="true" />  
这里的port="8080"就是端口,我们完全可以用别的端口来代替,但不能是被系统占用的端口(0--1023),这里简单提一下。  
下面我们再往下找,会发现以下的语句:  
</Context>  
</Host>  
我们就应该找到这两个语句,如果不懂E文,您就认定这两个语句好了。然后我们将该语句更改如下:  
</Context>  
<Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true">  
</Context>  
</Host>  
这里的path="/myjsp"就是我们就配置的虚拟目录了,以后在地址栏中输入http://localhost:8080/myjsp即可。而docBase="e:/myjsp" 则是机器本地路径,他们通过这个语句形成一个映射关系,其它照抄。  
将上面的First.jsp文件放到e:/myjsp目录下,输入http://localhost:8080/myjsp/First.jsp,是不是有一种喜上眉梢的感觉?  
在论坛里我见得最多的就是很多人不知道javaBean文件放到哪里,老实说开始我也不知道,更令人不解的是,十个人有九种不同的说法,这更让我们茫然。其实这问题也不是我们想像的那么复杂,我们以一个例子说明:  
先建立一个java程序,代码如下:  
package hall;  
public class SimpleBean {  
private String message = "No message specified";  
public String getMessage() {  
return(message);  
}  
public void setMessage(String message) {  
this.message = message;  
}  
}  
保存为SimpleBean.java,编译后会生成一个包,其实就相当于一个目录,也就是SimpleBean.class会存放在hall目录中,暂且保存起来,将来备用。  
再输入以下代码:  
<HTML>  
<HEAD>  
<title>Reusing JavaBeans in JSP</title>  
</HEAD>  
<BODY>  
<CENTER>  
<TABLE BORDER=5>  
<TR><TH CLASS="title">  
Reusing JavaBeans in JSP</TABLE>  
</CENTER>  
<P>  
<jsp:useBean id="test" class="hall.SimpleBean" />  
<jsp:setProperty name="test" property="message" value="Hello WWW" />  
<H1>Message: <I>  
<jsp:getProperty name="test" property="message" />  
</I></H1>  
</BODY>  
保存在我们刚才建立的虚拟目录e:/myjsp下面,并命名为:BeanTest.jsp。  
现在我们应该将hall(包)目录放在哪儿呢?别急,我们先在e:/myjsp下建立一个文件夹WEB-INF,然后再在WEB-INF下建立一个classes文件夹,最后将hall目录放到classes下,当然,hall下的字节码文件SimpleBean.class也一并要移过来,而SimpleBean.java就和BeanTest.jsp放到同一目录吧(可以不需要放的,自己试试)。  
好了,大功告成了,重新启动机器(如果您试了好多次都不行,这一步一定要做),在浏览器中输入:http://localhost:8080/myjsp/BeanTest.jsp,您看到了什么?呵,别告诉我您什么都没看到,那肯定是您设置的问题了。  
好了,文章写完了,我也只是一只菜鸟,所以有写的不准备的地方请多多指教。祝您jsp之旅一路顺风!!!  
Java学习 - 技术文章中心  
初学者问的诸如:《怎样配置环境变量》《怎样运行Servlet》啊?这样的问题太多了,现在我写一个初学者入门必读,以便对初学者有指导作用!  
首先是下载工具:  
我建议初学者用Editplus+JDK,我觉得如果用例如JB,Eclipse,JCreator,虽然刚开始的时候比较方便,但是确使初学者门不知道怎样配置环境变量,  
从而难以达到知其然,知其所以然的地步  
可以通过如下地址下载:  
Editplus(最新版本是v2.11):http://count.skycn.com/softdown.php?id=3641&url=http://sc-http.skycn.net/down/epp211a_cn.exe(要照注册码就自己找吧,网上很多的)  
JDK(最新版本是Java2sdk1_4_2):http://count.skycn.com/softdown.php?id=3116&url=http://sc-http.skycn.net/down/j2sdk-1_4_2-windows-i586.exe(这是For Windows)  
然后就是安装JDK,我是把它装到从c:\JDK目录下面:  
然后就是CLASSPATH的问题了:  
正如操作系统利用PATH来搜索可执行程序一样,Java运行环境也会遍历CLASSPATH来查找类,即便是HelloWorld这样简单的程序,JVM也会遍历  
CLASSPATH定义的每一个路径,直到找到相应的文件为止。  
相信大家用的系统不是2k就是XP,然后就应当如下设置Path:  
我的电脑->属性->高级->环境变量  
然后在环境变量的Path后面追加: C:\JDK\bin;.;C:\JDK\lib  
也可以这样配置:C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar  
★记住:环境变量中的 . 切记不能少,它表示当前路径,如果少掉出现的错误等会就说!  
dt.jar是关于运行环境的类库,tools.jar是关于一些工具的类库  
如果没有配置:C:\JDK\bin,则会出现 " javac′ 不是内部或外部命令,也不是可运行的程序或批处理文件。"这样的错误。  
然后下面就该写程序了:  
首先是(HelloWorld.java),打开Editplus,新建一个Java文件,请照着如下输入,要一字不漏,并且分清大小写:  
public class HelloWorld{  
public static void main(String[] args){  
System.out.println("Hello,World!");  
}  
}  
然后把这个文件保存(ctrl + s)到HelloWorld.java,记住大小写一定要分清,是HelloWorld.java不是helloworld.java或者其它的  
下面就该运行了,开始->运行->cmd  
在控制台中把目录切换到当前目录:  
javac HelloWorld.java  
java HelloWorld  
你就会在控制台上看见输出的Hello,World!(没出来?我把电脑吃了:))  
javac是编译命令,它把HelloWorld.java编译成HelloWorld.class  
java就是解释命令,JVM把HelloWorld.class解释执行.  
在这个时候:  
1。如果出现Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld  
那就是你在环境变量中没有加上那个.(dot)  
2。如果出现Exception in thread "main" java.lang.NoSuchMethodError: main  
或者HelloWorld.java:1: Public class helloworld must be defined in a file called  
"HelloWorld.java".  
那就是你没有分清大小写的写入这个HelloWorld,或者保存得时候没有保存为HelloWorld.java  
这个名字一定要跟public class的名字一样  
对于环境变量的问题就说到这里,下面我先所说怎么在Editplus里面编译和运行,在Tools->参数设置->配置用户工具  
1.添加工具(添加应用程序)  
菜单文字:Compile Java Program  
程序:C:\JDK\bin\javac.exe  
参数:文件名称  
初始目录:文件目录  
2.添加工具(添加应用程序)  
菜单文字:Run Java Program  
程序:C:\JDK\bin\java.exe  
参数:文件名称(不含扩展名)  
初始目录:文件目录  
工具组名称可以随便添,比如Debug Java Program  
然后在Tools的下拉菜单中,你就会看见Compile Java Program以及Run Java Program这两个选项,以后你就可以利用ctrl + 1编译和ctrl +2运行程序了  

下面就讨论Servlet的运行:  
首先要运行Servlet,则需要JSP/Servlet container,我建议初学者用Tomcat  
Tomcat(最新版本5.0)http://cvs.apache.org/builds/jakarta-tomcat-5/nightly/jakarta-tomcat-5-bin-20030725.zip  
然后把这个压缩包解压到:  
C:\Tomcat  
然后再配置环境变量:  
添加三个系统变量:  
JAVA_HOME: C:\JDK  
TOMCAT_HOME: C:\Tomcat  
CLASSPATH: %JAVA_HOME%\lib;%TOMCAT_HOME%\lib  
Tomcat的环境变量就配置完毕了,下面检验Tomcat是否能够运行:  
在控制台中转到C:\Tomcat\bin这个目录,运行startup,然后回出现一个窗口,连跳一大串东西,最后表示Server已经运行  
在浏览器中输入http://localhost:8080,出现欢迎界面,则表示Tomcat没问题了  
然后和上面一样,写入你的第一个Servlet  
import java.io.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
public class HelloWorld extends HttpServlet  
{  
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException  
{  
response.setContentType("text/html");  
PrintWriter out = response.getWriter();  
out.println("<html><head><title>");  
out.println("This is my first Servlet");  
out.println("</title></head><body>");  
out.println("<h1>Hello,World!</h1>");  
out.println("</body></html>");  

}  
}  
然后照样用javac HelloWorld.java来编译这个文件,如果出现无法import javax.servlet.*  
那么就是应该把C:\Tomcat\common\lib里面的servlet.jar(根据实际来看)文件拷贝到C:\JDK\jre\lib\ext中,再次编译,就没有问题了!  
然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文件结构:  
ROOT\index.html  
ROOT\welcom.jsp  
ROOT\WEB-INF\lib\MyServlet.jar(如果你的servlet的.class打成了.jar文件,则放在lib下面)  
ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个里面)  
然后在浏览器中输入http://localhost:8080/servlet/HelloWorld,于是Server众望所归的报错了:Error 404--Not Found  
怎么回事呢?  
Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册,用EP打开这个web.xml文件,  
在里面加入  
<servlet>  
<servlet-name>HelloWorld</servlet-name>  
<servlet-class>HelloWorld</servlet-class>  
</servlet>  
<servlet-mapping>  
<servlet-name>HelloWorld</servlet-name>  
<url-pattern>/servlet/helloworld</url-pattern>  
</servlet-mapping>  
这样的结构  
<servlet>  
<servlet-name>HelloWorld</servlet-name>  
<servlet-class>HelloWorld</servlet-class>  
</servlet>  
表示指定包含的servlet类.  
而以下的结构  
<servlet-mapping>  
<servlet-name>HelloWorld</servlet-name>  
<url-pattern>/servlet/HelloWorld</url-pattern>  
</servlet-mapping>  
表示指定HelloServlet应当映射到哪一种URL模式。  
在修改web.xml完毕过后,重新启动Server,然后再输入http://localhost:8080/servlet/HelloWorld,那么偌大一个Hello,World!等着你呢,恭喜你
posted on 2006-11-08 16:57 坏男孩 阅读(1739) 评论(0)  编辑  收藏 所属分类: java命令学习

只有注册用户登录后才能发表评论。


网站导航: