tomcat下的文件及其用途
tomcat下的文件及其用途端口的修改
表5-1 Tomcat的目录结构及其用途
目 录 用途
/bin 存放启动和关闭 Tomcat 的脚本文件
/common/lib 存放 Tomcat 服务器及所有 Web 应用程序都可以访问的 JAR 文件
/conf 存放 Tomcat 服务器的各种配置文件,其中包括 server.xml ( Tomcat 的主
要配置文件)、 tomcat-users.xml 和 web.xml 等配置文件
/logs 存放 Tomcat 的日志文件
/server/lib 存放 Tomcat 服务器运行所需的各种 JAR 文件
/server/webapps 存放 Tomcat 的两个 Web 应用程序: admin 应用程序和 manager 应用程序
/shared/lib 存放所有 Web 应用程序都可以访问的 JAR 文件
/temp 存放 Tomcat 运行时产生的临时文件
/webapps 当发布 Web 应用程序时,通常把 Web 应用程序的目录及文件放到这个目录下
/work Tomcat 将 JSP 生成的 Servlet 源文件和字节码文件放到这个目录下
从表5-1中可以看到,/common/lib目录、/server/lib和/shared/lib目录下都可以存放JAR文件,它们的区别在于:
— 在/server/lib目录下的JAR文件只能被Tomcat服务器访问;
— 在/shared/lib目录下的JAR文件可以被所有的Web应用程序访问,但不能被Tomcat服务器访问;
— 在/common/lib目录下的JAR文件可以被Tomcat服务器和所有的Web应用程序访问。
此外,对于后面将要介绍的Java Web应用程序,在它的WEB-INF目录下,也可以建立lib子目录,在lib子目录下可以存放各种JAR文件,这些JAR文件只能被当前Web应用程序所访问。
前面介绍了,Tomcat安装目录下的conf子目录用于存放Tomcat服务器的各种配置文件,其中的server.xml是Tomcat的主要配置文件,这是一个格式良好的XML文档,在这个文件中可以修改Tomcat默认监听的端口号。用UltraEdit(你可以用记事本程序或其他的文本编辑工具)打开server.xml,找到修改8080端口的地方。读者也许要问了,“这个配置文 件,我都不熟悉,怎么知道在哪里修改端口号呢?”对于初次接触server.xml的读者,确实不了解这个文件的结构,但是我们应该有一种开放的思路,既然Tomcat的监听端口号是在server.xml中配置,那么只要我们在这个文件中查找“8080”这些数字字符序列,不就能找到修改端口号的地方了吗!在UltraEdit中,同时按下键盘上的“Ctrl”和“F”键,出现如图5-10所示的查找对话框。
然后在“查找内容”中输入“8080”,单击“查找下一个”按钮。重复这个过程,直到找到如图5-11所示的在server.xml中配置端口号位置。
找到后,如果我们不能确定此处就是修改端口号的地方,也没有关系,可以先尝试着修改一下端口号,然后启动 Tomcat,如果启动成功,也就证明了我们修改的地方是正确的。学习时,我们应该养成这种探索并不断实验的精神。在这里,我们可以修改端口号为8000 (读者可以根据自己机器的配置选择一个端口号),然后保存。再次启动Tomcat,在Tomcat启动完毕后,打开浏览器,在地址栏中输入http: //localhost:8000/(读者根据自己设置的端口号做相应的修改),就可以看到Tomcat的默认主页了。
关闭Tomcat服务器时,执行 bin目录下的shutdown.bat文件。
个人总结
简单的内部测试的发布方法,不用打包步骤
使用myesclipse时,在本机自动编译且运行正常后,找到Tomcat目录的相关位置,如C:/Tomcat6.0/work/Catalina/localhost/_/org/apache/jsp,下一级目录就是server.xml中配置的子目录了,复制内容该子目录的全部内容到测试服务器的同样目录下,启动测试服务器的tomcat,就能看到对应的网页了。
说明,此方法,用户可以看到源文件,只能用于内部测试。
调整hosts文件 ,以便输入网址时,能够找到对应的地址
C:/WINDOWS/system32/drivers/etc/hosts文件
127.0.0.1 localhost
127.0.0.1 localhost82
Tomcat默认端口号,8080
Tomcat 用端口号区分不同工程
说明,此方法,适用于多人开发,布置在测试服务器上,多人测试。
<Service name="Catalina1">
<Connector port="8070" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"
/>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="工程1目录/WebRoot" reloadable="true"></Context>
</Host>
<Service name="Catalina2">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"
/>
<Host name="localhost2" appBase="webapps" unpackWARs="true" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="工程2目录/WebRoot" reloadable="true"></Context>
</Host>
此方法,类似<Service name 、<Connector port 的二级结点有多个。
Tomcat 用相同端口号区分不同工程
说明,此方法,适用个人开发过程的调试,因Host name为同一个,且hosts文件只认自己机器上的 name 布置在测试服务器上,多人测试。
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"
需建立两套 Service ,分别使用不同端口, Host 指向不同工程路径。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="工程1目录/WebRoot" reloadable="true"></Context>
</Host>
<Host name="localhost2" appBase="webapps" unpackWARs="true" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="工程2目录/WebRoot" reloadable="true"></Context>
</Host>
此方法,类似<Service name="Catalina"> 的二级结点,只有一个。
注意,localhost和localhost2,要在本地直接使用,需要先在hosts文件中定义
hosts文件的说明
Hosts是一个没有扩展名的系统文件 ,可以用记事本 等工具打开,其作用就是将一些常用的网址域名 与其对应的IP地址建立一个关联“数据库”,当用户在浏览器 中输入一个需要登录的网址时,系统会首先自动从Hosts文件 中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析。
该文件只对本机有用,如果要访问网内的测试服务器,一般只能用IP+端口号的方式;如果在该文件中加入一行,192.168.0.81 mytest ,地址为测试服务器的IP地址,则访问时,只要输入http://mytest :端口号即可,避免了记忆地址的麻烦;说明,该文件不认端口号,如192.168.0.81:8080 mytest ,则不能用。
注意事项
发布后与开发版不一样,直接用http://localhost:8080 访问时,显示的是tomcat的root下的index.jsp,即使你的目录下有此文件也是显示tomcat的,解决方法,用不同的端口号,且地址改为访问IP地址,即使本机,也用http://127.0.0.1:8080 ,就正常了。
已经用设置过滤器的方法处理,仍然有乱码,且是发布后的字符集问题时,配置文件中增加字符集的指定。
<Connector port="8070" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"
URIEncoding="UTF-8" <!-- 防止出现乱码 --> />