浅学Tomcat
一.web概念的回顾
1.软件架构
c/s架构:客户端/服务器端
b/s架构:浏览器/服务器端
2.资源分类
静态资源:各用户对同一资源访问后,结果一致;静态资源可有浏览器直接解析
HTML,css,JS
动态资源:各用户对同一资源的获取可能不一样,动态资源得由服务器端转换成静态资源后由浏览器解析
Servlet/jsp,php,asp
3.通信协议三要素
1.IP:计算机在网络中的唯一标识
2.端口:各应用程序在计算机中的唯一标识 0—65536
3.传输协议:规定了数据传输规则
1.基本协议
tcp:安全协议,三次握手,网速慢
udp:不安全协议,广播,网速快
#web服务器概念
服务器:安装有服务器软件的计算机
服务器软件:接收用户请求,处理请求,响应请求
web服务器软件:接收用户请求,处理请求,响应请求
*在web服务器软件中,可以部署web项目,用户通过浏览器访问web项目
*web容器
常用的web服务器软件:
webLogic:大型web服务器,支持全部JAVAEE规范
webSphere:大型web服务器,支持全部JAVAEE规范
JBoss:大型web服务器,支持全部JAVAEE规范
tomcat:支持少部分JAVAEE规范
JavaEE是Java语言在企业级开发中使用的技术规范的总和,总共13项大的规范
*Tomcat的基本使用
文件夹内容
bin 可执行文件
conf 配置文件
lib 依赖的jar包
logs 日志文件
temp 存放临时文件
webAPP存放web项目
work 存放运行时数据
下载
安装 *安装不要有中文或者空格
卸载
启动 *bin/startup.bat双击运行
*用浏览器访问自己http://192.0.0.1(或者localhost):8080
别人http://IP:8080
*常见问题
*黑屏和闪退 因为JAVA_HOME没有正确配置 新建环境JAVA_HOME,内容是jdk的目录,在path中添加%JAVA_HOME%
*窗口报错 暴力解决:杀死占用8080端口的进程
cmd:netstat -ano 就会有dos窗口显示,找到8080(0.0.0.0:8080)对应的PID,打开任务管理器,点击查看,勾选PID,找到对应的进程杀死
温柔解决:修改TOMCAT的端口号
进入conf/server.xml 找到<conntctor port="8080" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="...">的类似代码并修改port对应的数字
*可以改成80端口(HTTP协议默认端口)打开浏览器就不用输入端口号了(只要使用http协议上网,后面都会跟上80端口)
关闭
正常关闭:
bin/shutdown.bat双击运行
在Tomcat运行窗口ctrl+c
强制关闭:
直接点击Tomcat的X按钮
配置
*项目的部署方式
1.直接在webapps中配置
*/hello:项目的访问路径-->虚拟路径
*将项目打war包放入webapps中,将会自动解压(删除war,解压的文件会自动被删除)
2.修改server.xml
在<Host></Host>中添加<Context docBase="D:\hello" path="/hehe"/>
docBase指项目存放路径,path是虚拟目录
3.在conf/Catalina/localhost中添加任意xml文件
该改文件中写<Context docBase="D:\hello" />
虚拟目录:xml文件名称
*静态项目和动态项目
*Java动态项目的结构
根目录下的WEB-INF目录
web.xml:web项目的核心配置文件
classes目录:放置字节码文件目录
lib目录:依赖的jar包目录
* 将Tomcat集成到IDEA中,并且创建JavaEE的项目,部署项目。
*将Tomcat集成到IDEA中
run->edit configurations(编辑配置)->defaults(默认)->tomcat->local:--server:application server--configure配置tomcat文件夹,http port:8080
*在项目中添加tomcat:new->module->java Enterprice---configure SDK,javaEE version(选择与tomcat相匹配的javaEE7),tomcat
勾选Web Application,选择Versions与勾选的Web Application一致,勾选creat web.xml,然后创建module
run->edit configrations(编辑配置)->tomcat server->tomcat->deployment->XXX:war exploded(此时旁边有Application context)
(在Application context(虚拟目录)右边有/代表访问时不用虚拟目录而且相当于根路径 )
(部署成功后在Edit Configuration中会自动多一项tomcat server并且在deployment部署中显示war exploded项目是以war包形式部署的)
热部署:选择tomcat server的server下on'Update'action->update source(更新项目),on frame deactivation->update source(无须重启server)
实战:tomcat中添加多个项目时,在Appliacation context(虚拟目录)中将'/'换成别的名字(最好与项目名称相同'/project name')
在访问时在URL中加/project name/XX(要访问的文件),即localhost:8080/project name/demo1
* 快速入门:
*基本概念
*server applet
运行在服务器端的小程序
Servlet是一个接口,定义了Java类(服务器动态资源中的类没有main方法,依赖于服务器执行,tomcat解析它且该类遵循一定的规则)被浏览器访问到(tomcat识别)的规则
将来我们定义一个类,实现Servlet接口,复写方法
* 快速入门:
1. 创建JavaEE项目
2. 定义一个类,实现Servlet接口
* public class ServletDemo1 implements Servlet
(该接口中共5个虚拟方法,为测试是否调用该类,可在service()中system.out.print打印输出标记)
3. 实现接口中的抽象方法
4. 配置Servlet
在web.xml中配置:
<!--配置Servlet -->
<servlet-name>demo1</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping<!-—servlet的映射-->
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern><!--当使用URL访问时的虚拟目录-->
</servlet-mapping>
*基本原理
1.服务器接到浏览器请求,解析URL地址,获取访问的servlet路径(虚拟目录和要访问的文件)
2.tomcat根据解析的内容到web.xml中找到<url-pattern>对比其内容,再找到<servlet-name>中的内容并对比
3.tomcat根据<servlet-name>的内容找到对应的<servlet-name>,并找到<servlet-class>中的全类名(这是反射)
4.tomcat根据全类名找到对应的字节码文件并加载入内存Class.forName(),创建其对象cls.newInstance()
5.实现相应的方法service()等
*Servlet的生命周期及方法
1.被创建:执行init()初始化,只执行一次
*servlet什么时候被创建
*默认情况:第一次被访问时,创建
*可以配置
在web.xml中找到<servlet>标签,并且添加标签<load-on-startup>,在该标签中给值
如果配负数,第一次访问时被创建;配0或正整数,服务器启动时被创建(一般0-10)
servlet创建时执行init()且只执行一次,servlet在内存中只有一个对象,servlet是单例
问题:当多个用户访问时(多线程),线程变得不安全
解决:不要在servlet中定义成员变量;即便定义成员变量,也不要修改他的值
2.提供服务:执行service()服务,(调用一次执行一次)执行多次
3.被销毁:执行destroy()销毁(正常销毁,且在销毁之前执行,为了释放资源),只执行一次
getServletConfig()获取servlet的配置
getServletInfo()获取servlet版本、作者等信息
*IDEA和tomcat的相关配置
1.IDEA会为每一个tomcat部署的项目单独建立一份配置文件
*运行tomcat,在控制台能看到log:Using CATALINA_BASE: "C:\Users\fqy\.IntelliJIdea2018.1\system\tomcat\_itcast",这是tomcat使用的文件路径
*在IDEA中的tomcat修改端口,就会用tomcat项目部署的第三种方式创建xml文件(文件名字是对应的application context中的虚拟目录一致)
2.工作空间项目 和 tomcat部署的web项目
*tomcat访问的是“tomcat部署的web项目”,“tomcat部署的项目”对应“工作空间项目”的所有文件(部署的项目一般在工作空间的out目录下面,该项目中会有classes文件存放字节码文件)
*在WEN-INF中布置的文件,浏览器无法直接访问
3.断点调试:使用debug调试(在文件中设置断点,运行服务器,当运行到断点时会停止,点击下一步继续)