Tomcat
- Tomcat 是开源的服务器,是Java世界最知名的服务器,Tomcat本身是基于Java实现的,需要搭配JDK运行的
- Tomcat 既可以处理静态页面,也可以处理动态页面
- Tomcat搭配云服务器,可以让别人通过访问我的页面
- 当服务器重启时,服务器内存中的数据就没有了,包括webapp的登录信息
安装Tomcat
-
进入tomcat官网,下载zip压缩包
-
解压缩得到一个文件夹 apache-tomcat-8.5.72
-
bin目录下的 startup.bat 启动 Tomcat 服务器,如果是Linux系统 就使用 startup.sh;startup.bat是Windows的批处理脚本,startup.sh是Linux的批处理脚本
-
启动成功
常见问题
http://127.0.0.1:8080/
Tomcat服务器启动后,此路径可以访问自己电脑上的Tomcat服务器的欢迎界面
127.0.0.1是环回IP,表示本机;8080是Tomcat的默认端口号,可以在conf中修改 Tomcat 的端口号
- 由于 Tomcat 默认编码是 utf8,windows默认编码是 GBK,所以服务器程序显示的是乱码
- Tomcat 中的 webapps 文件夹中存放的是 web应用(一个具有完整功能的网站叫做webapp),里面的每一个文件夹都对应一个webapp,可以在浏览器上访问每一个webapp
- Tomcat 服务器出现闪退情况,可以打开cmd,在cmd上运行Tomcat服务器(拖动startup.bat到cmd),会显示异常信息,继而找到错误;也可以在 服务器文件夹中的logs中阅读最新的日志,日志记录了程序运行的情况
如何访问别人的Tomcat服务器
- 首先了解下NAT机制(多个主机共用一个外网IP)
- 外网IP不能重复,不同设备使用同一个路由器进行上网,其外网IP地址是一样的
- 同一个局域网(一个路由器)下,内网IP是唯一的;不同的局域网下,内网IP可以重复;
- 如果两个主机在同一个局域网下,可以访问别人的服务器;如果不在同一个局域网下,被访问的主机必须要有外网IP才可以被访问;当把Tomcat部署到云服务器的时候,有了云服务器的外网IP,就可以访问到了
静态页面:页面的内容是固定不变的
将 一个页面的HTML+ CSS + JavaScript 打包,放到webapps目录下
部署动态页面
动态页面:根据用户输入不同内容,得到不同的结果
Servlet 是Tomcat 提供的一组API,用于计算用户的请求,返回不同的结果
servlet程序
- 创建项目
maven项目,maven是“构建工具”,用于编译打包代码
- 编译------仅仅靠javac编译程序是不够的,一个程序可能需要依赖多个第三方库,所以需要maven来管理这些第三方库(需要哪个,就下载哪个)
- 打包------程序部署到服务器上,可以运行在别人的电脑上
- 项目名称要写作英文
- 引入依赖
- 在 pom.xml (Maven的核心配置文件)引入第三方库
- 在中央仓库maven中央仓库
中搜索servlet,选择tomcat服务器对应的版本的servlet,将其复制到pom.xml
中)
- 通过tomcat官网,找到对应版本的servlet
- 会自动下载,标红表示下载未完成,可以刷新maven
- 每次引入一个第三方库(
<dependency>
标签包裹),都要放到<dependencies>
标签中
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>giao</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependencies>
<!-- 这是servlet的第三方库-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<packaging>war</packaging>
<build>
<finalName>LoveQust</finalName>
</build>
</project>
- 构建目录结构
在web.xml中插入固定内容
<!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>Archetype Created Web Application</display-name>
</web-app>
- 编写代码
- 继承 HttpServlet,HttpServlet来自Servlet的第三方库
- 重写 doXXX方法,doXXX方法是HttpServlet的方法,doGet处理 方法为GET的请求;doPost处理 方法为POST的请求
- 设置 Servlet Path,@WebServlet(“/qust”) 表示请求的URL中 servlet path 是 “/qust” 的时候,调用这个类来处理请求
- 构造响应内容,resp.getWriter().write(“科大 rubbish!!”)构造 响应的body中的内容
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/qust")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf8");
resp.getWriter().write("qust rubbish!!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf8");
resp.getWriter().write("qust nice!!");
}
}
- 打包程序
启动程序的main方法在Tomcat中,要把servlet程序打包部署到Tomcat服务器上,才可以运行(servlet车斗 挂在 有着main发动机 的 Tomcat车头上,才可以跑起来) - 修改 pom.xml
<packaging>war</packaging> <!-- 设置包的类型 .war -->
<!-- 设置包的名称 -->
<build>
<finalName>LoveQust</finalName>
</build>
结果会 新增一个 target 文件夹,此目录下会有 相对应的war包
- 部署到 Tomcat 上
将包拷贝到 webapps目录下,Tomcat(启动中)会自动解压缩成一个文件夹,无需重启服务器
如果识别不出来war包的话,重启服务器即可 - 访问界面
http://127.0.0.1:8080/LoveQust/qust
LoveQust被称为 Context Path 代表一个网站
qust 被称为 Servlet Path 代表网站中的一个界面
使用 Smart Tomcat
- 使用 Smart Tomcat 简化打包、部署程序这两个步骤
借助IDEA的Smart Tomcat 调用Tomcat - Smart Tomcat 运行原理
Smart Tomcat 并不是真的把程序打包部署到webapp目录下,而是相当于把 Tomcat的核心目录给拷贝了一份临时的(不包括欢迎界面),然后把写的代码所在的目录映射到拷贝的临时Tomcat中 - 专业版的IDEA 可以使用内置Tomcat插件打包部署
社区版的IDEA 可以使用第三方插件Smart Tomcat 打包部署 - 一般Smart Tomcat 目录的路径是
C:\Users\86188\.SmartTomcat
(这是我的)
Tomcat的运行
- Tomcat接收HTTP请求,解析成一个HttpServletRequest对象
创建一个HttpServletResponse对象 - 根据请求中的 Context Path确定一个webapp,根据Servlet Path确定一个具体的类,再根据请求的方法调用doXXX方法
- 执行我们的代码,doXXX方法得到计算结果
- 将HttpServletResponse转成一个HTTP响应,返回给浏览器