JavaWeb---tomcat容器

本文深入讲解Tomcat服务器的工作原理,包括其如何支持Socket通信、管理Servlet生命周期、处理多线程请求及安全性配置。同时,详细介绍了Tomcat安装目录结构、常见问题解决方法,以及如何在Maven项目中手动开发Servlet。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tomcat

底层支持Socket之间的通信进行数据共享是通过内部web服务器软件(容器:将servet/jsp进行对象的创建,将jsp翻译为java文件,ide将java文件编译为class文件)实现,tomcat 虽然不完全支持javaEE(不支持EJB),但是也是一款能支持web服务器的免费软件

容器的功能:

1.通信支持:
利用容器提供的方法,能够轻松让Servlet与Web服务器对话,无需自己建立ServerSocket,监听端口,创建 流等操作。
2.生命周期管理
它会负责加载类,实例化和初始化Servlet,调用Servlet的方法,并使Servlet实 例能够被垃圾回收。
3.多线程处理
容器会自动地为它接收到的每个Servlet请求创建一个新的Java线程。
4.具有安全性:
使用XML部署描述文件来配置安全性(Servlet 3.0开始可以使用注解描述),而不必将其硬编 码写到Servlet或者其它类中

tomcat 安装目录下文件夹:

bin:tomcat的可执行目录

  • startup.bat/startup.sh(linux)
  • shutdown.bat/shutdown.sh(linux)

conf:tomcat的配置目录

  • web.xml:定义全局参数,网站信息的配置
  • server.xml服务器的配置

lib:tomcat支持的jar包(本身已经包含了serlvet和jsp包)

为了防止版本冲突,因此当需要在maven项目中提供依赖时需要指定依赖范围为provide
依赖范围:
compile:编译
test:测试
provide:仅仅是当前提供者

logs:日志记录文件
temp:存储临时文件
webapp:存放网站信息(一个网站可以看成是一个文件夹),默认访问root(tomcat_home)
work:存放jsp文件(hello.jsp–>hello_jsp.java–>class文件)
WEB-INF:网站的配置信息,web.xml(配置servet/初始化参数)

  • classes:存放字节码文件
  • lib:存放jar包
启动tomcat经常会出现的问题:

闪屏
原因:tomcat启动时从bin目录的start.bat启动,会找java环境变量(JAVA_HOME)
解决:配置JAVA_HOME,添加tomcat的安装目录
启动失败
原因:一个电脑上有多个tomcat,配置了catalina_HOME
解决:不要配置catalina_HOME,只保留一个tomcat

tomcat启动后(http://localhost:8080),tomcat会发送一个请求,携带当前当问数据类型支持的语言

tomcat默认端口:8080
qq:5555
mysql:3306

servlet:针对服务器应用程序开发
其实就是一个单实例多线程的普通java类,能够被web应用服务器解析的一类
通过它的源码是否变化来区分动态资源还是静态资源:
静态资源:Html/css/js/.jpg/gif
动态资源:Servlet

在maven的web工程中,提交一个uri请求,会现在web.xml文件中查询动态资源地址,如果没有,在当前根目录下查询静态资源

利用容器手动开发Servlet:

Servler是一个接收客户端的请求,处理后回应数据给客户端的(接收客户端的请求,回应服务器的响应)
创建一个maven工程(目录符合web工程结构)
1.在pom.xml下打war包
2.补全目录结构

src
	Man
		java
		Resource
		Webapp
			WEB-INF
				Web.xml

3.创建一个Servlet(必须在pom文件中导入依赖导入javax.servlet-api),配置pom.xml文件

<?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>

    <packaging>war</packaging>
    <groupId>com.github.sweeeeeet</groupId>
    <artifactId>tomcat-http</artifactId>
    <version>1.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
</project>

4.创建类继承HttpServlet,覆盖doGet():执行get方法提交;覆盖doPost():使用post方法提交

package com.github.sweeeeeet.tomcat;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Author:sweet
 * Created:2019/4/25
 * 开发者不new MyFirstServlet(),由tomcat服务器创建对象
 */
public class MyFirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码
        resp.setContentType("text/html;charset=utf-8");
        //向浏览器输出内容
        resp.getWriter().write("hello,这是我的第一个Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

5.配置web.xml文件

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!--配置网站信息-->
    <!--配置一个Servlet-->
    <servlet>
        <!--相当于在tomcat中穿梭的标识-->
        <servlet-name>MyFirstServlet</servlet-name>
        <!--Servlet类名,必须为全限定名-->
        <servlet-class>com.github.sweeeeeet.tomcat.MyFirstServlet</servlet-class>
    </servlet>
    <!--配置Servlet的映射信息-->
    <servlet-mapping>
        <servlet-name>MyFirstServlet</servlet-name>
        <!--映射路径-->
        <url-pattern>/myFirstServlet</url-pattern>
    </servlet-mapping>
     <!--配置另一个Servlet的映射信息-->
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.github.sweeeeeet.tomcat.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>
</web-app>

6.使用maven打成war包,放入tomcat程序中

请求的流程:
1.tomcat 服务器启动–创建Servlet对象
2.将request对象封装到HttpServlet中,成为HttpServletRequest
3.解析HttpServlet中的一些内置方法并初始化

在maven的web工程中,提交一个uri请求,tomcat会优先在web.xml文件中查询动态资源地址,如果没有,在当前根目录下查询静态资源。

映射路径的写法
  1. 精确匹配
    /文件名;在浏览器请求的uri为:http://localhost:8080/文件名
  2. 模糊匹配
    a./* ;*表示任意路径
    b.*.action;以指定后缀名结尾

在映射路径中不能以精确匹配加模糊匹配的方式出现
精确匹配的优先级高于模糊匹配
以指定后缀名结尾的后缀名模糊匹配的优先级最低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值