JavaWeb~Servlet~Tomcat介绍/安装/部署静态页面/Servlet介绍/执行的功能/工作原理/使用方法/关联请求/打包部署

Tomcat介绍

前面我们已经了解了HTTP协议,知道了HTTP协议就是服务器和客户端之间交互数据的一种约定格式。同时介绍了几种从客户端构造请求的方式,如ajax,Java中的socket关键字,直接输入URL,form表单等等.
这里的socket不仅可以实现请求,也可以实现http服务器对请求的响应,而 Tomcat就是基于Java实现的一个开源免费,也是被广泛使用的HTTP服务器

Tomcat由Apache、Sun和其他一些公司合作开发而成。
Tomcat服务器是一个免费开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不多的情况下,被普遍使用,是开发和调试JSP程序(Java Servlet 应用程序的用户界面)的首选。

Tomcat下载

官网下载链接:
https://tomcat.apache.org/
Tomcat下载之前需要安装Java的JDK,如果没有安装JDK,请先安装JDK.配置好相关的环境变量。

选择好要下载的版本,点击对应的zip压缩包即可。
在这里插入图片描述

Tomcat文件目录

  • bin:binary的缩写,一般表示一些二进制的可执行文件(启动文件startup.bat、关闭文件shutdown.bat)
  • conf:config的缩写,用xml格式表示的配置文件(修改端口号:server.xml,建议将server.xml备份)
  • lib:依赖的jar包
  • log:日志文件(记录出错等信息),调试程序时经常用到
  • temp:临时文件
  • webapps:可执行的项目。默认作为存放开发项目的目录
  • work:存放由jsp翻译成的.java源文件,以及编译的.class字节码文件(jsp ->java ->class)
    其他文件

其中最重要的就是webapps文件,是web applications的简称,用来存放web应用的文件夹。

像一个能够进行响应的网站,就可以称为一个“web应用”。

如何用Tomcat部署代码

Tomcat启动
bin目录下,有startup的两个启动脚本,双击这两个脚本中的任何一个都可以启动Tomcat,只不过startup.bat是在Windows环境中,startup.sh是Linux Shell ,是在Linux/Mac环境中使用。
在这里插入图片描述
双击后出现如下界面,当出现startup中的提示时,就表示启动成功。

在这里插入图片描述
启动成功后,在浏览器中输入127.0.0.1:8080,就可以访问Tomcat页面

127.0.0.1 环回IP,表示当前主机。而8080是Tomcat默认绑定的端口号,可以通过配置文件来修改。

扫描二维码关注公众号,回复: 13822846 查看本文章

Tomcat 也支持HTTPs,默认没有开启,
如果开启了HTTPs,默认的端口是8443

在这里插入图片描述

Tomcat作用

使用Tomcat主要的目的就是为了能够部署一个webapp(网站)
一个网站中的内容类型,基本上可以分为两类,一个是静态页面,一个是动态页面。

静态页面:只有前端代码运行,不需要服务器生成数据,内容始终固定,即使用户、时间、输入的参数等发生变化,页面内容也没有变化(除非修改源代码)
动态页面:有前后端代码,需要服务器生成数据,用户、时间、输入参数、事件等不同时页面内容都有不同的变化。
像bilibili网站,点击就能播放视频,是动态的,而前面博客中写过的HTML文件形成的网页,都是静态的,不能实现交互。

部署静态页面

部署静态页面到Tomcat上。只需要把页面文件放到webapps目录中即可。
部署到Tomcat后,就可以通过网络来访问页面内容,别人部署在Tomcat中的HTML之类的静态文件也可以访问,如果是直接部署到云服务器上,那所有的人都可以访问。

举例:部署一个HTML文件
将下面的代码部署到Tomcat中,并通过网络进行访问。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, 
maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>hello</title>
</head>
<body>
    <div>hello</div>
</body>
</html>

将文件复制到webapps中目录中或者ROOT目录中。
在这里插入图片描述
然后在浏览器中输入127.0.0.1:8080/hello.html即可成功访问。
在这里插入图片描述
其他的部署一些前端文件,JS,或者css,或者带有一些图片等或者一个比较复杂的页面,都与上面的例子类似,当代码量过大,文件类型过多时,可以单独放到一个文件夹中,与ROOT目录并列即可,然后在浏览器中URL输入对应的路径即可。

Servlet

Servlet是什么

Servlet (Server Applet,服务应用程序),全称是Java Servlet,是用Java编写的服务器程序,主要的功能是交互式的浏览和修改数据,动态的生成Web页面内容,是一种实现动态页面的技术.

狭义的Servlet是指Java语言实现的一个借口,广义的Servlet是指任何实现了这个接口的类。 大多数情况下,Servlet指的是后者。

Servlet可以理解为Tomcat服务器提供给开发真的一组api,供程序员使用。

Servlet执行的功能

  • 读取客户端(浏览器)发送的显式数据,包括网页上的HTML表单,或者也可以是来自applet或者自定义的HTTP请求表单
  • 读取客户端(浏览器)发送的隐式的HTTP请求数据。这包括cookies、媒体类型、浏览器能解释的压缩格式文件等
  • 处理数据并生成结果。在此过程中,可能会访问数据库,执行RMI或者CORBA调用、调用一些Web服务、或者直接计算出响应结果
  • 发送显式数据到客户端,显式数据 的格式不限,可以是文本文件(HTML/XML)、二进制文件、Excel等等。

Servlet工作原理

  • 客服端先发送请求到服务器
  • 服务器启动并开始调用Servlet,Sercvlet根据客户端的请求生成响应内容并将其传给服务器
  • 服务器将响应返回给客户端

Servlet使用方法

类似于之前写的TCP服务器的步骤:
1.首先初始化
2.然后进入循环
读取请求
根据请求计算响应
把响应返回

在使用Servlet开发时,要做的事情也是这样
1.首先初始化,允许开发者注册一个类到Tomcat中,让这个类和HTTP中的一个特定 的请求相关联
2.然后进入循环(循环的处理很多很多的请求)
读取HTTP请求,Servelet解析这个请求字符串,然后生成一个HttpServletRequest对象
根据请求对象生成一个HttpServletResponse对象(表示响应),根据请求生成响应,这个过程,就是初始化阶段注册的类里面的代码完成的。
把HttpServletResponse对象转换成HTTP响应,返回给服务器

(开发者只需要关注上面的黑体字的环节,剩下的环节Tomcat/Servlet已经帮我们实现好了)

代码举例

创建一个Servlet的项目(在idea 中直接使用Maven即可)
1.创建一个Maven 项目
2.引入依赖,引入Servlet api 的jar包。

  <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        
    </dependencies>

上面的scope标签表示当前的jar包只是在开发阶段使用,而不需要打包到最终的发布包中
Tomcat中里面已经内置了Servlet,我们不需要把自己代码中的Servlet再重复部署到Tomcat中。

public class HelloServlet extends HttpServlet {
    
    
    //创建的代码 需要继承自HttpSevlet 类~然后才能让这个类被Tomcat调用


   //重写doGet方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        super.doGet(req, resp);
    }
}

doGet方法 是HttpServlet这个父类的方法。
此方法的参数有两个,分别是HttpServletRequestHttpServletResponse
,即HTTP请求和HTTP响应。doGet方法里要做的事情,就是根据请求来生成响应。

我们上面在使用时,重写了doGet方法,这样就不需要手动调用doGet,而是由Tomcat自动来调用。也不需要手动创建HelloServlet 实例,也是由Tomcat自动的创建实例。

doGet方法中自带的super.doGet(req, resp)是直接构造了一个错误响应(状态码为405的响应),重写时注释掉。

下面构造一个简单的响应

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

public class HelloServlet extends HttpServlet {
    
    
    //创建的代码 需要继承自HttpSevlet 类~然后才能让这个类被Tomcat调用

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        
        //super.doGet(req, resp);
        resp.getWriter().write("hello world");
    }
}

resp是HttpServletResponse响应对象, 调用给对象的getWriter方法,在响应报文的body中写入一个“hello world”字符串。

关联请求

在构建好了HelloServlet类的代码后,我们需要将这个类和特定的HTTP请求关联起来。

即收到特定的请求时,执行这个类的代码

关联方式:
在类的上方写入以下代码:

@WebServlet("/hello")

在这里插入图片描述
这里的@WebServlet是Servlet中提供的注解,其功能就是 把类和HTTP特定的请求进行关联。根据HTTP请求URL的路径来进行关联。

后面的/hello的作用是,如果Tomcat收到了路径为 /hello 的请求,就会调用HelloServlet类中的代码。
如果这个请求是GET请求,就会执行HelloServlet类中的doGet方法。
如果这个请求是POST请求,就会调用到HelloServlet类中的doPost方法。

打包程序

使用 maven 进行打包. 打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口, 如果看不到的话,
可以通过 菜单 -> View -> Tool Window -> Maven 打开)
然后展开 Lifecycle , 双击 package 即可进行打包.
在这里插入图片描述
在运行窗口中出现以下字样,说明打包成功。
在这里插入图片描述
打包成功后可以在左边看到对应的jar包。
在这里插入图片描述
虽然打包成功,但Tomcat并不能识别jar格式的包,只能识别另一种格式的包war包。

war包和jar包的区别

jar包是普通的java程序打包的结果,里面会包含一些.class文件。
war包是java web的程序,里面除了会包含.class 文件,里面不仅包含.class文件,还会包含HTML,CSS,JavaScript文件、图片等。

部署程序

将上面压缩好的war包复制到webapps目录下,然后当我们启动Tomcat时,Tomcat会自动解压缩这个war包。
在这里插入图片描述
然后在浏览器中输入对应的URL,就可以看到对应的效果。

输入url时可以按照以下格式:

http://服务器的ip:8080/ContextPath/[WebServlet注解中描述的路径]

在这里插入图片描述

文章参考:
https://blog.csdn.net/qq_38490457/article/details/108440922?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164751130316782094879244%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164751130316782094879244&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-108440922.142v2pc_search_result_cache,143v4register&utm_term=tomcat&spm=1018.2226.3001.4187

猜你喜欢

转载自blog.csdn.net/Merciful_Lion/article/details/123507134
今日推荐