首页 > 编程语言 >JavaWeb中的Tomcat,Servlet详解

JavaWeb中的Tomcat,Servlet详解

时间:2024-08-06 21:40:01浏览次数:11  
标签:JavaWeb Tomcat GET 方法 服务器 POST Servlet 请求

JavaWeb

JavaWeb技术主要包括服务器技术(后端),如Tomcat,Servlet,JSP等待,以及客户端技术(前端)如HTML,CSS,JavaScript等等

Web服务器

Web服务器主要负责处理客户端发出的HTTP请求,并做出相应回应

  • Web服务器:安装了服务器软件的计算机,只用于复杂处理请求,发出相应
  • Web服务器软件:接受客户端的请求,处理请求做出响应
  • 在Web服务器中可以部署web项目,让浏览器作为媒介就行访问

Web服务器软件

服务器软件是部署在服务器中的程序,主要有以下几种,我们主要学习Tomcat的使用

  1. weblogic:oracle公司,大型的javaEE服务器,支持所有的JavaEE规范,收费的。
  2. websphere:IBM公司,大型的javaEE服务器,支持所有的ovaTE规范,收费的。
  3. JBOSS:JBOSS公司,大型的javaEE服务器,支持所有的JavaIL规范,收费的。
  4. Tomcat:Apache基金组织,中小型的javaEE服务器,开源的,免费的。

Tomcat

Tomcat是一个免费开源的Java Servlet(Server Applet,服务程序)容器,主要用于部署和运行基于Java的Web应用程序,是由Apache基金组织成立,属于轻量级服务器.

Tomcat主要特点

  • Servlet容器:Tomcat实现一个Servlet规范的容器,可以用来部署Servlet和JSP的Web应用程序.JSP(JavaServer Pages)是一种动态web内容技术,其允许开发者将Java代码和特点的JS嵌入到HTML页面中
  • 轻量级:Tomcat是一个轻量级的服务器,相比其他商业服务器启动速度快,资源消耗少
  • 易配置:Tomcat的配置文件简单明了,易于理解修改

Tomcat的架构

  • Connector(连接器):用于接收客户端HTTP的请求并将其转发至相应的Servlet,并提供SocketRequestResponse相关的转化;
  • Container(容器):ContainerTomcat处理Servlet的核心部件,其包括Engine(引擎),Host(主机),Context(上下文),Wrapper(包装器)

Tomcat中只有一个Server; 一个Server中可以包含多个Service; 一个Service只能包含一个Container 但可以包含多个Connector 因为一个服务可以有多个连接;示意图如下:

多个Connector和一个Container就可以构成一个Sevrice,有了Service就可以对外提供,但还需一个运行环境,Server提供了一个运行环境,其关系可以在Tomcatconf目录下的sever.xml配置文件中查看

Connector与Container的关系

由上诉内容可知,一个请求发送给Tomcat时,会经过Service,然后转交到我们的Connector

  • Connector用于接收请求并将请求封装成RequestResponse来具体处理,RequestResponse封装完之后再交由Container进行处理,Container处理完请求之后再返回给Connector,最后Connector通过Socket将处理的结果放回给客户端

Servlet

Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上数据库和应用程序的中间层,其本质上是用java语言编写的一个接口

Servlet的优势

  • 良好的性能
  • Servlet在Web服务器的地址空间执行,因此就不用再创建一个单独的进程来处理每个客户端的请求
  • Servlet是独立与平台的,因为它用Java开发语言编写

Servlet架构

下图展示了Servlet在Web应用程序中的位置:

Servlet任务

  • 读取客户端(浏览器)发送的显示数据.在包括网页上的HTML表单,或者也可以是来自applet或自定义的HTTP客户端的表单
  • 读取客户端(浏览器)发送的隐式HTTP请求数据,包括cookies,媒体类型和浏览器能理解的压缩格式等等
  • 处理数据并生成结果,这个过程可能需要访问数据库,执行RMI或CORBA调用,调用Web服务,或者直接计算得出对应响应
  • 发送显式的数据(即文档)到客户端(浏览器).该文档格式可以是多种多样的,包括文本文件(HTML或XML),二进制文件(GIF图像)
  • 发送隐式HTTP响应到客户端

Servlet生命周期

*Servlet的生命周期可以理解为从创建到被销毁的过程*

  • Servlet初始化后调用init()方法
  • Servlet调用service()方法来处理客户端请求
  • Servlet销毁前调用destroy()方法
  • 最后,Servlet是由JVM的垃圾回收器进行垃圾回收的

现在我们开始详细讲解Servlet的生命周期方法

init()方法

init()方法被设计成只能调用一次.它在第一次创建Servlet时被调用,在后续每次用户请求时不再调用.因此其是用于一次性初始

  • Servlet创建于用户第一次调用对应于该Servlet的URL时,但也可以指定Servlet在服务器第一次启动时被加载
  • 当一个用户调用一个Servlet时,就会创建一个Servlet实例,每一个用户请求都会产生一个新的线程.
  • init()方法只要用途是简单第创建或加载一些数据,这些数据被用户Servlet的整个周期

init()方法的定义如下:

public void init(ServletConfig servletConfig) throws ServletException {
      //初始化代码  
    }

service()方法

service()方法是执行实际任务的主要方法.

  • 每次服务器接收到一个Servlet请求时,服务器就会产生一个新的线程并调用服务.
  • service()方法检查HTTP请求类型(GET,POST,PUT,DELETE) 并在适当时候调用doGet.doPost.doPut.doDelete等方法

下面是其方法代码

  public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

service()方法由容器调用,service方法在适当的时候调用doGet.doPost.doPut.doDelete ,因此你不用对service()方法进行任何操作,你只需根据用户不同请求类型来重写doGet()doPost()方法即可

doGet()方法

  • GET请求来自于一个URL的正常请求,或者来自于一个未指定的METHODHTML表单,它由doGet()方法进行处理
public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

doPost方法

  • POST请求来自于一个特别指定了METHDOPOSTHTML表单,它由doPost()方法处理
public void doPost(HttpServletRequest request,            HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

destroy()方法

  • destory()方法和init()方法一样也只能调用一次,在Servlet生命周期结束时被调用
  • destroy()方法可以让你的Servlet关闭数据库连接,停止后台线程,把Cookie列表或点击计数器写入磁盘,
  • 在调用了destroy()方法之后,servlet对象就被标记为垃圾回收

destory()方法定义如下:

 public void destroy() {
    // 终止化代码...
  }

架构图如下

Web.xml配置

  • <web-app> :web.xml的根元素,用于声明XML的版本.编码格式以及Web应用的模式文件(XSD)的位置

  • <servlet><servlet-mapping>

    <servlet> 用于定义一个Servlet的类信息,包括它的名称和实现类

    • <servlet-name> :设置Servlet实例的名字
    • <servlet-class> :配置类的路径,创建之前要确保有相对应的类

    <servlet-mapping> :用于指定一个或多个URL模式于前面定义的Servlet之间的映射

    • <servlet-name>:用于绑定servlet标签名字需和<servlet>标签下的<servlet-name>一致
    • <url-patter> :配置请求路径,客户端按该路径请求,可触发对应的Servlet实例中的servlet方法

    <load-on-startup> :第一次访问时创建Servlet对象,将中间的值设为负数

    <load-on-startup> :服务器启动后创建,将中间值设为大于大于0的数

    E.g

    <?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_4_0.xsd"
             version="4.0">
      <servlet>
          <servlet-name>servlet01</servlet-name>
          <servlet-class>com.mashang.web.MyServlet01</servlet-class>
          <load-on-startup>0</load-on-startup>
      </servlet>
        <servlet-mapping>
            <servlet-name>servlet01</servlet-name>
            <url-pattern>/a</url-pattern>
        </servlet-mapping>
    </web-app>
    

Servlet注释

使用注解可以避免在web.xml 文件中进行显性配置,从而减少配置文件的复杂性和提高开发效率

@WebServlet

  • 作用:标签用于直接在Servlet类上定义其URL映射和其他配置
  • 属性:
    • valueurlPatterns :指定一个或多个URL模式,用于匹配HTTP请求并将其分发给Servlet
    • name:为Servlet配置一个名称
    • loadOnStartup:指定Servlet在服务器启动时是否加载以及加载顺序
    • asyncSupported :指示Servlet是否支持异步处理
    • initParams :初始化参数列表
  • urlPatterns配置方法:

配置多种属性时要写上其属性名

@WebServlet({"/demo1","/demo2",...})//配置多个请求路径对应一个Servlet
@WebServlet("/user/demo1")//配置多级路径
@WebServlet("/user/*")//匹配以user开头形式的请求
@WebServlet("/*")//匹配所有的请求
@WebServlet("/*.do")//匹配do结尾的请求

HttpServlet

HttpServletServlet的一个实现类,是一个抽象类.其在源有的Servlet 接口上添加了一些关于Http协议的处理方法,其功能比Servlet功能强大,在实际开发中,实现接口服务通常会继承这个类,而避免直接继承Servlet

GET请求和POST请求

GET请求

GET请求是一种HTTP方法,用于从服务器请求资源.当客户端(通常是指浏览器),向服务器发起请求时,它是在请求特定的资源

  • GET请求的参数
    • GET请求的参数通常会附加在URL后面,使用?号分隔URL和参数
    • 参数之间使用&分隔
    • 例如:https://example.com/resource?param1=value1&param2=value2
  • GET请求的安全性
    • GET请求中的所有参数都会暴露在URL中,因此可能会被记录在浏览器的历史记录或日志文件中,安全性较低
    • 因此GET请求不能用来传递敏感信息,例如密码等等
  • 缓存速度
    • 浏览器和其他中间部件会缓存GET请求的结果,因此会导致GET请求的速度较快,提高性能
  • GET的限制
    • 由于GET请求是通过URL发送的,而URL本身长度有限制,因此GET的长度是有限制的
  • GET的一般使用场景
    • GET请求通常用于检索信息,如查询数据库或获取静态资源

POST请求

和GET请求一致的是POST请求也是一个HTTP方法,用于向服务器发送数据.当客户端(浏览器)使用POST方法向服务器发送请求时,它是在提交数据交给服务器进行处理

  • POST的请求体

    • POST请求通常不会放置在URL中,而是放置在请求体中
    • 意味着数据不会显示在URL中,于GET请求相比更具有安全性和隐式性
  • 安全性

    • 由于数据不会显示在URL中,POST更适合传送更适合传输敏感信息
    • POST请求中的数据通常使用编码格式来组织
  • POST限制

    • POST长度不会受到限制,因此可以传输大量数据
    • 但服务器仍有自己的最大限制
  • POST一般使用场景

    • POST请求通常用于提交数据,如登入表单,注册表单

doGet()和doPost()

doGet()

doGet()方法是HttpServlet 类中的一个方法

  • 请求类型
    • doGet()方法是专门用于处理HTTP GET请求的方法

doPost()

doPost()方法是HttpServlet类中的一个方法

  • 请求类型
    • doPost()方法是专门处理HTTP POST请求的方法

E.g:

@WebServlet("/login")
public class MyHttpServlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行GET请求业务逻辑");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("执行POST请求业务逻辑");
    }
}

MyHttpServlet01类是HttpServlet 的继承类,重写了其中的doGet()doPost()方法,我们在Postman软件可以分别去测试其GET请求和POST请求

标签:JavaWeb,Tomcat,GET,方法,服务器,POST,Servlet,请求
From: https://www.cnblogs.com/ihave2carryon/p/18346032

相关文章

  • (javaweb)Http协议
    目录一.http概述二.Http-请求协议三.Http响应协议四.Http协议解析一.http概述---复制这个位置会自动前面有http浏览器给服务器发送请求携带请求数据,服务器解析数据,服务器前提需要知道具体格式等等--约定服务器处理完请求,需要给客户端一个响应。返回给客户端浏览器......
  • Tomcat 使用和配置文件(详解)
    一.tomcat介绍1.tomcat概述自从JSP发布之后,推出了各式各样的JSP引擎。ApacheGroup在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet,这样Tomcat就诞生了。Tomcat是jakarta项目中的一个重要的子项目,其......
  • Tomcat高可用集群(实例详解)
    一.环境准备虚拟机的版本:VMware-workstation-full-15.5.6-16341506.exe系统镜像版本:CentOS-6.10-x86_64-bin-DVD1.iso,全新安装,桌面版,可上网系统内存大小:1GB系统硬盘大小:20GB连接工具版本:SecureCRTSecureFX_HH_x64_7.0.0.326.zip二.集群概述由于单台Tomcat的承载能力是有限的......
  • Tomcat与Nginx的区别详解
    目录引言Tomcat概述Tomcat的历史Tomcat的架构Tomcat的功能Nginx概述Nginx的历史Nginx的架构Nginx的功能Tomcat与Nginx的区别架构上的区别......
  • tomcat10 springboot项目部署成功但springboot没有启动日志问题
    问题描述项目在tomcat8可以启动成功,请求也可以正常处理,在tomcat10上只有部署成功信息比如:deployWARDeploymentofwebapplicationarchive[/data1/WWW/webapps/XXX.war]hasfinishedin[127]ms,但是没有springboot启动的信息。该问题不属于springboot打包为war包不成......
  • 如何在linux系统上安装tomcat应用程序?
    1)首先查看安装包信息yuminfotomcatyuminfotomcat2)安装yum-yinstalltomcatyum-yinstalltomcat3)查看安装是否成功rpm-qtomcatrpm-qtomcat4)如果输出一下内容则代表安装成功tomcat-7.0.76-16.el7_9.noarch5)执行vi/etc/profile添加下列内容vi/etc......
  • JavaWeb中Servlet过滤器的应用即防跳墙的添加
    原理:在Servlet和mybatis的基础环境上使用过滤器(对上篇学生管理系统的进一步完善)也是使用session进行判断和控制页面的跳转一、过滤器的基本概念: Servlet过滤器:  从字面上的字意理解为经过一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求......
  • JavaWeb之servlet关于Ajax实现前后端分离
    一、什么是Ajax:AJAX=AsynchronousJavaScriptandXML(异步的JavaScript和XML)。AJAX不是新的编程语言,而是一种使用现有标准的新方法。AJAX最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。AJAX不需要任何浏览器插件,但需要用户允......
  • (Javaweb)Ajax,Axios,Vue
    目录一.Ajax 二.Axios 三.前端工程化四.接口文档的管理平台YAPI五.Vue项目六.Vue项目开发流程一.Ajax 1.通过Ajax从服务器端获取数据Ajax---JavaScript(网页行为)+XML(标记语言--用来存储数据) 客户端--浏览器 服务端在处理逻辑的时候,客户端处于等待状态等......
  • 57_2设置Servlet模板、Servlet线程安全问题、跳转
    设置Servlet模板再创建类就有了模板代码#if(${PACKAGE_NAME}&&${PACKAGE_NAME}!="")package${PACKAGE_NAME};#end#parse("FileHeader.java")importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servl......