Tomcat
服务器
- 从软件角度来理解
- 服务器就是个网络程序
- 是一个处于监听状态的网络程序
- 只要有请求到达,就会立即处理请求并返回响应
- Tomcat就是这样一个网络程序
- 它默认监听8080端口
- 它负责接收HTTP协议请求
- 它能够让程序员编程处理响应(它需要把写好的程序放到Tomcat中)
- 从硬件角度理解
- 服务器是安装了Tomcat等网络程序的计算机
- 安装和配置Tomcaat
- 把Tomcat当作普通的网络程序使用
- 下载Tomcat
- 解压到F:/Tomcatapache-tomcat-9.0.0.M17
- 配置环境变量
- 确保存在JAVA_HOME(必须是这个名字)并指向JDK的安装路径
- 确保CLASSPATH指向%JAVA_HOME%\lib\tools.jar
- 新建一个CATALINA_HOME=F:/Tomcatapache-tomcat-9.0.0.M17(解压路径)
- 该路径后面不能有\,否则报错
- 把Tomcat当作普通的网络程序使用
- bin:编译好的程序或工具
- startup.bat:可以以普通程序的方式启动Tomcat
- 关闭窗口则Tomcat关闭
- Eclipse实际上就以这种方式调用Tomcat
- startup.bat内部会设置临时环境变量,然后调用catalina.bat。处理参数,日志设置,设置CLASSPATH、主类、最后执行主类
- shutdown.bat:关闭Tomcat
- 但通常不用
- startup.bat:可以以普通程序的方式启动Tomcat
- conf:配置文件
- lib:jar包
- logs:日志文件(Tomcat运行时会生成很多日志,安装Tomcat位置必须有写权限)
- temp:临时文件(写权限)
- webapps:我们写的BS架构应用(Servlet/JSP/框架应用)
- 每一个应用一个文件夹
- bin:编译好的程序或工具
- 把Tomcat安装成Windows服务
- 优势
- 可以随计算机启动而自动启动(就算计算机重启,也不用手动启动它)
- 当Tomcat奔溃时,会自动重启
- 当需要长时间以商业方式正式运行一个应用时
- 执行bin\service.bat install
- 内部原理是找到tomcat9.exe当有install参数时,会调用tomcat9.exe并且传递新的参数。要求把tomcat安装成windows服务
- 优势
- Tomcat的配置
- conf config configuration 配置
- server.xml:用来配置Tomcat服务
- server:一个(根节点)
- service[name]:多个,当需要监听多个端口提供Web服务时可以增加Service。
- connector[port][protocol]:连接器,要监听那个端口,可以指定处理的协议版本。
- Engine[name][defaultHost]:执行引擎,可以指定默认主机。Connector建立连接后,交给Engine处理。
- Host[name][appBase][unpackWARs][autoDeploy]:
- 主机、虚拟主机:多个(靠域名区分)
- 一个主机中可以有多个应用,这些应用的访问路径不同
- www.zhiyou100.com
- 默认应用:www.zhiyou100.com/
- 报名应用:www.zhiyou100.combaoming/
- 毕业应用:www.zhiyou100.com.biye/
- 域名:name
- 程序文件保存位置:appBase(可以有多个应用)
- 是否支持自动解压WAR包:unpackWARs
- 是否支持自动部署:autoDeploy
- 主机、虚拟主机:多个(靠域名区分)
- Contex[path]docBase[]:应用、虚拟目录
- path:访问路径
- docBase:程序文件的保存位置
- Host[name][appBase][unpackWARs][autoDeploy]:
- service[name]:多个,当需要监听多个端口提供Web服务时可以增加Service。
- server:一个(根节点)
- tomcat-users.xml:用来配置Tomcat管理账号和角色
- web.xml:Tomcat:Tomcat应用的配置(应用的配置从它继承而来)
- web-app:一个web应用
- servlet:多个
- 默认所有应用都支持两个servlet
- default:用来处理html\css\js\图片等静态文件
- jsp:用来将jsp转码成java并编译成class类,然后使用编译出的类生成页面(处理请求)
- filter
- 默认带了一些filter但未启用,比如编码转换的filter
- session-config:
- 配置session,指定了默认超时时间30min
- mime-mapping:
- 配置mime类型
- 他会影响请求头和响应头中的Comtent-Type头,决定Tomcat是否处理相应的资源
- servlet:多个
- web-app:一个web应用
- Tomcat默认应用 ROOT文件夹中的应用就是默认路径
- 当访问域名时,打开就是默认应用
- 其他应用都需要带应用路径 如:/crm 等
- Tomcat自带一个管理应用
- 可以查看Tomcat服务器的运行状态
- 可以管理主机及应用
- 这个管理应用只能在服务器本身中访问,不能在其它电脑访问
- 需要配置管理角色和用户
- tomcat-users.xml 中添加role和user
- 管理应用
- 服务器运行状态:操作系统的信息、JVM的信息、端口的连接情况
- 应用管理:列出主机下的应用、启动/停止/发布应用/卸载应用
- 主机管理:列出所有主机和添加主机
Dynamic Web Project
第一次创建Dynamic Web Project
- 需要创建Tomcat运行时环境
Tomcat安装位置
JDK安装位置
preferences—>Server—>Runtime Environments
Context toot 应用路径
WebContent Web内容所在
文件结构
- Java Resources/src:是存放Java源代码的位置
- build/classes:存放生成类
- WebContent:是web应用存放位置。可以打成WAR包
- META-INF:WAR包元数据,也可以存放一些配置文件,包含清单文件
- WEB-INF:存放第三方jar包,jsp等Web资源,
- web.xml:应用配置文件/部署描述符
- HTML、CSS、JS图片在开发时,可以放在WebContent中。部署时,如果需要可以放在其它位置(虚拟目录)或其它服务器中
JSP文件相关设置
- 设置编码为UTF-8:preferences—>Web—>JSP Files:Encoding
- 创建一个新的JSP模版:preferences—>Web—>JSP Files—>Editor—>Templates
Build Path
- Faynamic Web Project在编译和运行过程中,需要很多类或Jar包
- Build Path为Eclipse指明了项目需要类和Jar包的位置(也包括项目源代码的位置,和项目源代码生成的类的位置)
- 其中最重要的是Libraries里面的Apache Tomcat和JDK(JRE)
修改启动浏览器
- Window—>Web Browser:改成现代浏览器
在Eclipse中修改应用路径
- 在项目上点右键—>preference—>Web Project Setting—>Context root
- 找到Server视图,找到主机,在主机下面删除应用,重启
Eclipse与Tomcat的关系
- 默认情况下,Eclipse会在当前的Workspace中收集Dynamic Web Project运行所需的各种资源(包含类),放入 .metadata\.plugins\org.eclipse.wst.server.core
- 另外将Tomcat的配置文件也复制一份,方到Workspace的Servers文件夹中
- 通过调用javaw来启动Tomcat安装目录中的Tomcat Jar包,在这个过程中
- 指定ClassPath
- 指定主类
- 在Run Configurations—>Apache Tomcat—>创建的Tomcat服务器
- Arguments:启动参数
- ClassPath:寻找类的位置
- Source:源代码和Jar包
Servlet&JSP
- 创建Servlet类
- 默认情况下,常见的Servlet类以javax.servlet.http.HttpServlet类为父类
- HttpServlet由Tomcat提供(在servlet-api.jar包中)
- 最少要选中一个doXXX的方法,通过这个方法处理请求,这个方法有两个参数
- request:请求报文(请求行、请求头、请求体)中所有数据全部都在里
- response:响应报文(响应行、响应头、响应体)都要通过response设置
- 设置响应头(编码格式)
- response.setContentType("text/html;charset=UTF-8");
- response.setHeader("content-Type", "UTF-8");
- 设置响应头(编码格式)
- 默认情况下,常见的Servlet类以javax.servlet.http.HttpServlet类为父类
- 处理请求
- 新建一个Servlet类,选择一个doXXX方法
- 在这个方法中通过request参数获取请求报文中的数据
- 加工之后response设置响应报文