Tomcat 和 Servlet
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1. web 相关概念
- 软件架构
-
C/S客户端/服务器端
-
B/S浏览器/服务器端
-
资源分类
-
静态资源所有用户访问后得到的结果都是一样的称为静态资源.静态资源可以直接被浏览器解析
* 如html,css,JavaScript
-
动态资源每个用户访问相同资源后得到的结果可能不一样。称为动态资源。动态资源被访问后需要先转换为静态资源在返回给浏览器
* 如servlet/jsp,php,asp....
-
网络通信三要素
-
IP
电子设备(计算机)在网络中的唯一标识 -
端口应用程序在计算机中的唯一标识
0~65536
-
传输协议规定了数据传输的规则
-
基础协议
tcp
安全协议三次握手速度稍慢udp
不安全协议速度快
-
2. 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
开源的免费
3. Tomcat Windows 安装
1、下载安装
找个目录解压缩就行
2、启动
bin/startup.bat
双击运行即可访问http://localhost:8080/
3、关闭
bin/shutdown.bat
双击运行ctrl + c
- 强制关闭直接关掉窗口
4、卸载
直接删除安装目录即可
启动时可能出现的问题
- 黑窗口一闪而过没有正确配置
JAVA_HOME
- 启动报错一般是端口被占用修改端口号
conf/server.xml
或强制杀掉占用端口的程序
4. Tomcat 部署项目
Tomcat
部署项目有三种方式
1、直接将项目放到 webapps
目录下即可
- 访问地址
http://localhost:8080/项目名称
- 简化部署将项目打成一个
war
包再将war
包放置到webapps
目录下war
包会自动解压缩
2、配置 conf/server.xml
文件
<!--在<Host>标签体中配置-->
<Context docBase="D:\hello" path="/hehe" />
* docBase:项目存放的路径
* path虚拟目录
3、在 conf\Catalina\localhost
创建任意名称的 xml
文件在文件中编写
<!-- 浏览器访问路径 http://localhost:8080/xml文件名称 -->
<Context docBase="D:\hello" />
5. IDEA 集成 Tomcat
java
动态项目的目录结构
-- 项目的根目录
-- src/
-- web/
-- WEB-INF/
-- web.xmlweb项目的核心配置文件
-- index.jsp
-- classes目录放置字节码文件的目录
-- lib目录放置依赖的jar包
注意
IDEA 2021
创建javaweb
时没有对javaee
的支持需要Ctrl + Shift + Alt + /
然后勾选javaee.legacy.project.wizard
可参考
6. servlet
servlet
是 server applet
的简写
- 概念运行在服务器端的小程序
- 狭义
Servlet
就是一个接口implements
定义了Java
类被浏览器访问到(tomcat
识别)的规则 - 广义用
Java
编写的服务端程序具有独立于平台和协议的特性主要功能在于交互式地浏览和生成数据生成动态Web
内容 - 将来我们自定义一个类实现
Servlet
接口复写方法
- 狭义
6.1 快速入门
步骤
- 创建
JavaEE
项目 - 定义类实现
Servlet
接口public class ServletDemo1 implements Servlet
- 实现
Servlet
的五个抽象方法init、getServletConfig、service、getServletInfo、destroy
- 配置
Servlet
- 启动
Tomcat
ServletDemo1.java
import javax.servlet.*;
import java.io.IOException;
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 {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
web.xml
主要配置映射和全类名
<!--配置Servlet -->
<servlet>
<servlet-name>demo1</servlet-name> <!-- 名称自定义 -->
<servlet-class>com.jun.servlet_learn.ServletDemo1</servlet-class> <!-- 全类名 -->
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>
执行原理
- 当服务器接受到客户端浏览器的请求后会解析请求URL路径获取访问的
Servlet
的资源路径 - 查找
web.xml
文件是否有对应的<url-pattern>
标签体内容。 - 如果有则在找到对应的
<servlet-class>
全类名 tomcat
会将字节码文件加载进内存并且创建其对象- 调用其方法
6.2 Servlet 生命周期
Servlet
生命周期从创建到销毁的整个过程涉及的三个抽象方式
init()
只执行一次Servlet
被创建时执行一般用于加载资源service()
每次访问Servlet
时Service
方法都会被调用一次即每次请求时都会触发destory()
只执行一次Servlet
被销毁时执行销毁之前只有服务器正常关闭才会执行一般用于释放资源
Servlet 什么时候被创建
默认第一次访问时就会被创建也可以自定义其创建时机修改 web.xml
<!-- load-on-startup 是负数Servlet 在第一次访问时创建当是 0 或正整数时则在服务器启动时创建默认为负数-->
<servlet>
<servlet-name>demo1</servlet-name>
<servlet-class>com.jun.servlet_learn.ServletDemo1</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
注意
Servlet
是单例的多个用户同时访问可能存在线程安全因此尽量不要在Servlet
中定义成员变量即使要定义也最好不要修改而是只访问可以定义局部变量
6.3 Servlet 注解
Servlet 3.x
以上的版本支持注解注解的好吃就是当有多个 Servlet
时不需要每个都在 web.xml
中配置直接在类上方添加注解即可
步骤
- 创建
JavaEE
项目选择Servlet
的版本3.0以上可以不创建web.xml
- 定义一个类实现
Servlet
接口 - 复写方法
- 在类上使用
@WebServlet
注解进行配置@WebServlet("资源路径")
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet(urlPatterns = "/demo1")
public class ServletDemo1 implements Servlet {}
// 简写
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {}
7. Servlet相关配置
1. urlpartten:Servlet访问路径
1. 一个Servlet可以定义多个访问路径 @WebServlet({"/d4","/dd4","/ddd4"})
2. 路径定义规则
1. /xxx路径匹配
2. /xxx/xxx:多层路径目录结构
3. *.do扩展名匹配
WebServlet 之 urlpartten 配置
-
一个
Servlet
可以定义多个访问路径如@WebServlet({"/d4","/dd4","/ddd4"})
-
路径定义规则
/xxx
路径匹配如@WebServlet("/ddd4")
/xxx/xxx
多层路径目录结构如@WebServlet("/ddd4/aaa")
*.do
扩展名匹配如@WebServlet("*.do")
其中 * 表示通配符可匹配任意字符
IDEA 与 Tomcat 相关配置
-
IDEA
会为每一个tomcat
部署的项目单独建立一份配置文件默认C:\Users\用户名\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat
查看idea
控制台的logUsing CATALINA_BASE
-
Tomcat
采用的真正部署方式其实是在conf/Catalina
给每个Servlet
新建一个xml
配置文件使其能够定位到具体的Web
项目 -
WEB-INF
目录下的资源不能被浏览器直接访问
7. Servlet 继承体系
Servlet -- // 接口
|
GenericServlet -- // 抽象类
|
HttpServlet -- 抽象类
GenericServlet
将Servlet
接口中其他的方法做了默认空实现只将service()
方法作为抽象HttpServlet
对http
协议的一种封装简化操作使用时继承并覆写http
的相关方法即可如doGet()/doPost()
分别对应处理get/post
请求一般开发中推荐使用这种方式
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("/demo2")
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("http servlet!");
}
}