Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。
Tomcat是Apache软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP等少量JavaEE规范。
可以从 Tomcat 官网 下载合适的版本进行安装。
注意,不同的版本需要不同版本的 java(JDK)运行环境支持,具体的版本支持列表可以看这里。
解压后运行根目录下的/bin/startup.bat
即可启动 Tomcat。
- Linux 系统运行
/bin/startup.sh
。- 如果出现闪退的情况,可以检查环境变量
JAVA_HOME
是否设置正确。
启动后控制台会输出监听的端口信息:
开始协议处理句柄["http-nio-8081"]
访问对应的端口即可,比如我这里是 http://localhost:8081/。
可以修改配置文件/conf/server.xml
来修改默认的监听端口:
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
部署 Web 应用到 Tomcat 有两种方式,一种是直接将资源文件组成的目录放在/webapps
下,另一种是将 war 包放在 /webapps
目录下。
提供一个示例项目hello2,下载解压后将目录直接复制到/webapps
下。
然后访问 http://localhost:8081/hello2/a.html 就可以看到页面。
提供一个示例 war 包haha.war,直接将这个 war 包放到 /webapps
下。等一会刷新就能看到 Tomcat 将其自动解压并生成对应的 /webapps/haha
目录。
访问 http://localhost:8081/haha/a.html 就能看到页面。
目录结构分为在 Maven 项目开发阶段的工程目录,以及打包成 war 后在 Tomcat 部署并自动解压后的结构。
工程目录的结构:
war 包解压后的结构:
有两种方式,一种是在创建 Maven 项目时使用“模版”maven-archetype-webapp
。
Idea 需要从远程读取模版列表,有时候会网络连接失败(可以查看 help-> show log in …),会一直卡在模版列表刷新上,此时需要重启 Idea 多尝试几次。
使用 Maven 模版创建项目,在构建项目框架阶段,Maven 还需要从中央仓库读取模版的详细内容,这是一个 XML 配置文件,有几 M 大小。因为国内访问中央仓库速度非常慢,所以经常会卡死在这一步。
实际上在 Maven 使用模版构建项目的时候,可以通过参数 archetypeCatalog 指定从哪里加载模版内容,有三个可选项:
其中的 remote 选项就是从中央仓库加载模版,可以修改为使用其他两种方式。
具体可以参考这篇文章。
通过该模版创建好的项目在/src/main
目录下还缺少java
和resources
目录,自行手动创建即可。
模版会添加一个 JUnit 依赖以及各种插件,删除即可。
不使用模版创建项目的方式可以观看这个视频。
虽然可以将项目打包成 war 后手动部署到本地的 Tomcat 进行测试,但这样做太过麻烦。所以最好将 Tomcat 集成到开发环境中,以方便使用。
可以在 Idea 中集成本地 Tomcat,这样就可以在 Idea 中启动本地 Tomcat,并将当前应用进行部署。
相关内容查看这个视频。
还可以使用 Tomcat Maven 插件。
修改 POM.xml 文件,添加:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
plugin>
plugins>
build>
该插件包含了一个 Tomcat7,所以直接可以通过这个插件运行内置的 Tomcat。
Tomcat Maven 插件最高只支持 Tomcat7,不包含之后的版本。
可以添加配置修改内置 Tomcat 的监听端口和项目路径:
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.2version>
<configuration>
<port>80port>
<path>/path>
configuration>
plugin>
The End,谢谢阅读。
本文的完整示例可以从这里获取。