Tomcat
一、Web相关概念
-
软件构架
- C / S:客户端 / 服务器端
- B / S:浏览器 / 服务器端
-
资源分类
-
静态资源:所以用户访问后得到的结果是一样的
如:html,css,JavaScript
-
动态资源:每个用户访问相同资源后得到的结果可能不一样
如:servlet,jsp,php,asp
-
-
网络通信三要素
- IP:电子设备(计算机)在网络中的唯一标识
- 端口:应用程序在计算机中的唯一标识(0~65536)
- 传输协议:规定了数据传输的规则
- 基础协议:
- TCP:安全协议,三次握手,速度稍慢
- UDP:不安全协议,速度快(可能会丢包)
- 基础协议:
-
Web服务器软件
-
服务器:安装了服务器软件的计算机
-
服务器软件:接收用户的请求,处理请求,做出响应
-
Web服务器软件:接收用户的请求,处理请求,做出响应
- 在Web服务器软件中,可以部署Web项目,让用户通过浏览器来访问这些项目
- Web容器
-
常见的java相关的Web服务器软件
weblogic
:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费webSphere
:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费JBOSS
:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费Tomcat
:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet / jsp,开源免费
-
JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
二、Tomcat目录下的文件及其功能
文件名 | 功能 |
---|---|
bin 文件夹 | 存放可执行文件 |
config 文件夹 | 存放配置文件 |
lib 文件夹 | 存放依赖jar 包 |
logs 文件夹 | 存放日志文件 |
temp 文件夹 | 存放临时文件 |
webapps 文件夹 | 存放web 项目 |
work 文件夹 | 存放运行时的数据 |
三、注意事项
- cmd命令:
netstat -ano
能查看计算机当前所有进程及其占用的端口,杀死对应进程可以解决Tomcat启动时端口被占用的情况 - 80端口是http协议的默认端口号
四、Servlet基础入门
- 概念:
server applet
,运行在服务器端的小程序
Servlet
就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则
将来我们自定义一个类,实现Servlet
接口,复写方法
- 创建一个类,实现
Servlet
接口
package cn.chao.web.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo01 implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//提供服务的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("hello servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
Servlet
中的生命周期:- 被创建:执行
init
方法,只执行一次Servlet
的创建时机可在标签下配置:- 第一次访问时创建:值为负数(默认值)
- 在服务器启动时创建:值为0或正整数
- 提供服务:执行
service
方法,执行多次- 每次访问
Servlet
时,Service
方法都会被调用一次
- 每次访问
- 被销毁:执行
destroy
方法,执行一次Servlet
被销毁时执行,服务器关闭时,Servlet
被销毁- 只有服务器正常关闭时才会执行
destroy
方法 destroy
方法在Servlet
被销毁之前执行,一般用于释放资源
- 被创建:执行
-
在
IDEA
中配置Servlet
的方法-
第一种方式:在
web.xml
中配置
<!--配置Servlet,在<web-app>标签之间添加以下代码--> <servlet> <servlet-name>demo01</servlet-name> <servlet-class>cn.chao.web.servlet.ServletDemo01</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo01</servlet-name> <url-pattern>/demo01</url-pattern> </servlet-mapping>
执行原理:
- 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
- 查找web.xml文件,是否有对应的标签体内容
- 如果有,则再找到对应的全类名
- Tomcat会将字节码文件加载进内存并且创建对象
- 调用其方法
-
第二种方式:使用注解配置
在
Servlet3.0
中支持注解配置,可以不需要配置web.xml
,步骤如下:- 创建JavaEE项目,选择
Servlet
的版本3.0以上,可以不创建web.xml
- 定义一个类,实现
Servlet
接口 - 复写方法
- 在类上使用
@WebServlet
注解进行配置
@WebServlet
(“资源路径”)
package cn.chao.web.servlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/demo") public class ServletDemo1 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("servlet3"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
- 创建JavaEE项目,选择
- 运行
Servlet
类
package cn.chao.web.servlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; @WebServlet("/demo") public class ServletDemo1 implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init....."); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service....."); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("destroy....."); } }
点击运行该程序:
运行成功后会自动跳转至网页:
在网址后面添加@WebServlet("/demo")
中的路径demo
刷新后查看
IDEA
:
运行成功!
-