Web资源开发完毕后需要发布在Web服务器上才能被外界访问。在小型的应用系统或者有特殊需要的系统中,可以使用免费的Web服务器—Tomcat,该服务器支持JSP以及Servlet规范,其源代码是公开的,不仅可以和目前大部分主流的Web服务器一起工作,还可以作为独立的Web服务器软件。
Tomcat的安装和启动
这里我安装的是Tomcat7.0,在安装Tomcat之前需要安装JDK,运行Tomcat7.0建议使用JDK7.0版本。关于JDK的安装可查看JDK的下载安装及其相关配置(环境变量名一定要配置为JAVA_HOME,Tomcat服务器是由Java语言开发的,它在运行时需要根据JAVA_HOME或JRE_HOME环境变量来获得JRE的安装位置,从而利用Java虚拟机来运行Tomcat)
进入Tomcat的官方网站http://tomcat.apache.org,Download–>Tomcat7,往下翻找到
建议用绿色版本,解压就可以用,不用安装。apache-tomcat-7.0.75-windows-x86.zip这是下载完之后的文件。直接解压到指定目录即可(目录不要太深,目录不要有中文和空格),我解压到了D:\Java。若要卸载,直接把文件删了就行了。
在这个页面还可以看到一个Source Code Distributions,下载下来的文件为apache-tomcat-7.0.75-src.zip,里边是Tomcat的源码。以后会用到。
- bin:用于存放Tomcat的可执行文件和脚本文件
- conf:用于存放Tomcat服务器的各种配置文件
- lib:用于存放Tomcat服务器和所有Web应用程序需要访问的JAR文件
- logs:用于存放Tomcat的日志文件
- temp:用于存放Tomcat运行时产生的临时文件
- webapps:Web应用程序的主要发布目录,通常将要发布的应用程序放到这个目录。
- work:Tomcat的工作目录,JSP编译生成的Servlet源文件和字节码文件放到这个目录下。
在bin子目录下,存放了许多脚本文件,startup.bat就是启动Tomcat的脚本文件(startup.sh是Linux系统下的启动项),双击startup.bat文件,便会启动Tomcat服务器,此时,可以在命令行看到一些启动信息。Tomcat服务器启动后,在浏览器的地址栏中输入http://localhost:8080或者http://127.0.0.1:8080(localhost和127.0.0.1都表示本地计算机)访问Tomcat服务器,如果显示如下界面,则说明Tomcat服务器安装成功。
shutdown.bat用来关闭服务器。
为了方便在任意目录启动,可以配置名为CATALINA_HOME的环境变量,变量值为Tomcat的安装目录,配置步骤和JAVA_HOME的基本一样。配置完之后,在命令行中输入startup就可以启动服务器了。当然也可以不用配置,以后也不用这种方式启动,都是在IDE中启动。
端口号占用问题
启动Tomcat时显示JVM_Bind这个错误的时候就是端口号被占用了。如何解决?
1.关闭端口号对应的进程
在命令行窗口中输入netstat -ano,找到最后一行的PID值。然后打开任务管理器,默认情况下不显示PID,在名称那儿右键,然后勾选上PID。根据PID在里边找到对应的进程,然后结束任务。
2.在conf文件夹中找到server.xml,把里边的端口号8080改成别的,比如8081
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
Web应用
在Web服务器上运行的Web资源都是以Web应用形式呈现的,所谓Web应用就是多个Web资源的集合,Web应用通常也称为Web应用程序或Web工程。一个Web应用由多个Web资源或其他文件组成,其中包括html文件、css文件、js文件、动态Web页面、java程序、支持jar包、配置文件等。
开发人员在开发Web应用时,应按照一定的目录结构来存放这些文件;否则,在把Web应用交给Web服务器管理时,不仅可能会使Web应用无法访问,还会导致Web服务器启动报错。
在webapps里边默认有五个文件夹(docs,examples,host-manager,manager,ROOT),一个文件夹就代表一个Web应用程序,其中输入http://localhost:8080默认启动的就是ROOT。运行docs这个应用,可以在浏览器中输入http://localhost:8080/docs这时候就会显示如下界面
Web应用
html文件,jsp文件,css文件,图片
WEB-INF目录
- web.xml
- classes
- lib
一个Web应用需要包含多个目录,这些目录来存储不同类型的文件。其中,所有的Web资源都可以直接存放在Web应用的根目录下,在Web应用的根目录中还有一个特殊的目录WEB-INF,所有的配置文件都直接存放在这个目录中,WEB-INF还有两个子目录,classes目录用于存放.class文件,lib目录用于存放Web应用所需要的各种jar文件。在WEB-INF这个目录下的文件不能被外部直接访问。
用MyEclipse建一个Web应用
打开MyEclipse,File–>New–>Web Project
在src里边编写Java代码。WebRoot就相当于应用程序的根目录,在里边放一些html,css,js什么的。
接下来,我把index.jsp删了(现在先弄个静态网页,不弄动态的),新建一个1.html。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link href="css/myStyle.css" type="text/css" rel="stylesheet"><link>
</head>
<body>
<p>hello</p>
</body>
</html>
再建一个css文件,里面建一个myStyle.css
p{
color:red;
}
在src里建一个HelloWeb.java,存在com.eaglezsx.demo包里
package com.eaglezsx.demo;
public class HelloWeb {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
为了看的更清楚,Window–>Show View–>Other–>Navigator
之后选中项目,
点击菜单中的这个按钮,找到项目的文件。把WebRoot里边的文件复制一份(META-INF可以不复制,它是myeclipse自己的配置信息)。然后找到Tomcat里的webapps,先在里边建一个文件夹FirstWeb,然后把刚才复制的文件放到里边。
启动服务器,在浏览器中输入网址http://localhost:8080/FirstWeb/1.html,显示结果为
集成Tomcat和自动部署应用
Windows–>Preferences–>MyEclipse–>Servers–>Tomcat–>Tomcat 7.x。(也可以直接在搜索栏搜索)
然后找到其安装路径,选择Enable,点击OK即可。
这样Tomcat就已经集成在Myeclipse上了。
如何部署Web应用?
点击这个按钮,选择HelloWeb这个项目,点击Add,选择Tomcat 7.x这个服务器。
然后点击OK。
在服务器中会添加如下文件,HelloWeb就是我项目的名称。
点击Start启动服务器。之后就可以在浏览器中输入http://localhost:8080/HelloWeb/1.html来访问了。
想要停止的话,就点击Start下边的Stop Server。
在集成了Tomcat后,也可以在Servers视窗中部署
Tomcat 7.x右键–>Add Deployment
还有一种部署方式是打成war包。进入到WebRoot目录,输入命令jar -cvf MyWeb.war .
c是Create,f是file,v是view,可以看到添加的过程,也可以写成cf,最后加的.代表把当前目录的所有文件都添加进去。添加完成后,会在当前目录生成一个MyWeb.war文件。把他丢到webapps里边,当启动服务器的时候会自动将其解压,想删除的话,直接把MyWeb.war删除即可,其解压文件过一会儿会自动删除。
C:\Users\YZ>g:
G:\>cd G:\Workspaces\MyEclipse 10\HelloWeb\WebRoot
G:\Workspaces\MyEclipse 10\HelloWeb\WebRoot> jar -cvf MyWeb.war .
已添加清单
正在添加: 1.html(输入 = 341) (输出 = 242)(压缩了 29%)
正在添加: css/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: css/myStyle.css(输入 = 18) (输出 = 20)(压缩了 -11%)
正在忽略条目META-INF/
正在忽略条目META-INF/MANIFEST.MF
正在添加: WEB-INF/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: WEB-INF/classes/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: WEB-INF/classes/com/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: WEB-INF/classes/com/eaglezsx/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: WEB-INF/classes/com/eaglezsx/demo/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: WEB-INF/classes/com/eaglezsx/demo/HelloWeb.class(输入 = 403) (输出 = 263)(压缩了 34%)
正在添加: WEB-INF/lib/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: WEB-INF/web.xml(输入 = 404) (输出 = 218)(压缩了 46%)
G:\Workspaces\MyEclipse 10\HelloWeb\WebRoot>
配置虚拟目录
将所有的Web应用都放在webapps目录下可能空间不够用,会将Web应用放置在其他目录下。但Tomcat无法管理webapps目录以外的Web应用程序,在这种情况下,Web应用要想被外界访问,就需要手动配置虚拟目录,在Tomcat服务器中配置虚拟目录有两种方式。
1.在server.xml文件中配置虚拟目录
conf目录下的server.xml文件,在元素中添加一个元素
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/HelloWeb" docBase="g:\HelloWeb"/>
这样我把HelloWeb这个应用放到了g盘也能访问到
path-虚拟目录:http://localhost:8080/HelloWeb
docBase-真实目录:g:\HelloWeb
Host的父节点是Engine,Engine可以管理多个Host(主机),默认只有一个,就是localhost,访问的是webapps下的应用,unpackWARs和autoDeploy是用来配置是否要自动解压部署war文件。
Tomcat的体系架构如下
这种方式需要重新启动服务器,不建议这样做。
2.在自定义xml文件中配置虚拟目录
进入conf\Catalina\localhost目录,在该目录中创建一个HelloWeb.xml的配置文件(文件名就代表应用的虚拟目录名,可以任意起,建议和应用名相同),在里边填写
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="g:\HelloWeb"/>
配置默认应用
将配置虚拟目录的时候弄的那个HelloWeb.xml改名为ROOT.xml即可,这样写地址时就不用写应用名了。
配置默认主页
在web.xml中的这个节点中添加节点
<welcome-file-list>
<welcome-file>1.html</welcome-file>
</welcome-file-list>
这样只需要输入http://localhost:8080/HelloWeb就可以访问到1.html了,可以写多个节点,找的时候会从上往下找,直到找到为止。
配置默认端口
浏览网页服务默认的端口号都是80
在conf文件夹中找到server.xml,把里边的端口号改成80
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
这样以后再写地址的时候就不用写端口号了
配置虚拟主机
Tomcat服务器允许用户在同一台计算机上配置多个Web站点,在这种情况下,需要为每个Web站点配置不同的主机名,即配置虚拟主机。现实生活中,为了提高硬件资源的利用率,有很多网站通过配置虚拟主机的方式实现服务器的共享。
在sever.xml文件中,元素代表一个虚拟主机,它的属性name和appBase分别表示虚拟主机的名称和路径
<Engine name="Catalina" defaultHost="localhost">
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
...
</Host>
</Engine>
默认情况下,虚拟主机的名称为localhost,路径为
127.0.0.1 localhost
这行文本的作用就是建立IP地址(127.0.0.1)和主机名(localhost)的映射关系,这也是在浏览器地址栏中可以使用localhost访问本地Web服务器的原因。如果要增加更多的主机名与IP地址的映射关系,只需要在这个hosts文件中进行配置即可。
127.0.0.1 www.eaglezsx.com
Tomcat的管理平台
在浏览器中输入网址打开http://localhost.8080/打开Tomcat首页,点击首页的Manager App。会弹出框让输入用户名和密码。
这个需要在conf\tomcat-users.xml文件中添加具有管理员权限的账号。Tomcat定义了四个不同的角色
- manager-gui:允许访问HTML图形管理控制台和状态页面。
- manager-script:允许访问文本接口和状态页面。
- manager-jmx:允许访问JMX代理和状态页面。
- manager-status:只允许访问状态页面。
由于Tomcat管理平台是一个HTML页面,只需在配置文件中添加gui角色。
<tomcat-users>
<role rolename="manager-gui"/>
<user username="eaglezsx" password="1" roles="manager-gui"/>
</tomcat-users>
之后重新启动Tomcat服务器,输入用户名和密码后就可以看到Tomcat管理平台的页面了。