认识Servlet---1

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 认识Servlet---1

hi ,大家好,今天为大家带来Servlet相关的知识,并且实现第一个程序

🎉1.什么是Servlet

🎉2.使用Servlet写一个hello程序


🌻🌻🌻1.创建项目

🌻🌻🌻2.引入依赖

🌻🌻🌻3.创建目录

🌻🌻🌻4.编写代码

🌻🌻🌻5.打包程序

🌻🌻🌻6.部署程序

🌻🌻🌻7.验证程序

==================================================


1.什么是Servlet


Servlet是Tomcat提供给我们使用的一系列API,让我们在程序中直接调用,比如我想获取请求的query string的某个key ,我可以直接调用api,不用手动解析,比如我要给浏览器设置cookie,不用构造响应报文,直接调用api


Tomcat作为http服务器,根据http协议解析请求报文,构造响应报文,那么我们在写代码的时候就只关注业务逻辑就行,业务逻辑就是写的程序是实现啥功能的

Servlet是Tomcat的原生API,在工作中不常用,但是我们依然要学习它,因为它比较底层,需要我们重点掌握


2.使用Servlet写一个hello程序


我们现在使用Servlet来写一个hello程序

需要经过七个步骤

🍐1.创建Maven项目

483efb3ec1844e4e881fdb45634eb1c8.png

maven是一个构建工具,帮助程序员去构建,测试,打包一个项目


以前编写运行程序,由于程序简单,直接点运行,但是当项目变复杂,可能会涉及多个模块,可能会有依赖关系,因此,maven就来解决这个问题


b884ed0bbfe7488bbd28387da36f7940.png


创建好项目,会得到这个页面

一个maven项目,首先会有一个pom.xml配置文件,这个文件描述了maven项目各个方面的内容

97306a289e0541ba88db1f9bd1c508a5.png创建好项目,会得到这个页面

一个maven项目,首先会有一个pom.xml配置文件,这个文件描述了maven项目各个方面的内容

不同的maven 项目要有不同的坐标

如果要把写的程序发布到maven中央仓库,就需要保证坐标唯一

🥝pom.xml的目录结构:

6ebb1085b2bf422fbfa5e870c3873af4.png


蓝色的Java中写业务代码

绿色的Java写测试代码

resources:放程序依赖的资源,比如图片,图标,音频,视屏等资源


🍐2.引入依赖

Servlet是Tomcat提供的api,不是标准库提供的,不是内置的,所以需要额外下载安装


Tomcat安装好了,是在运行时使用的,现在是开发阶段,需要额外安装Servlet的jar包,从中央仓库下载安装

49d88c0814e74ad8b7bdc11d3af0f513.png


选择这个,3.1.0和Tomcat8系列匹配,不能乱选哦~~~


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

给pom.xml中新增一个标签,把这段代码拷贝到pom.xml中,IEDA就会自动调用maven,从中央仓库下载该jar包

这里可以放多个dependency,可以用来引入多个第三方依赖

🍐3.创建目录

在main下创建的

390e733e24f44886b0b0652ddbe3fb4c.png

web.xml是给tomcat看的,Tomcat从webapps目录加载webapp,就是以web.xml为依据的

这是一个模板,直接粘贴


<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

0f16f67bba2f48c79168477ac732db36.png


然后点击蓝色的Java创建class文件

🍐4.编写代码


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;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WHY
 * Date: 2023-05-25
 * Time: 20:51
 */
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
        System.out.println("hello world");
        resp.getWriter().write("hello world");
    }
      }

67092f2292f64c08b36b20344669ce9b.png

一个服务器程序的基本工作流程:
1.读取请求并解析
2.根据请求计算响应
3.把响应写回给客户端

1和3Tomcat已经完成了,我们只需要关注2


dc331e835021484fb7cc2199c4243d0e.png


输出型参数就是说根据请求,计算响应

Tomcat工作大致流程:

1.客户端先发出一个请求,Tomcat根据http协议解析请求成字符串,然后Tomcat再创建一个空的响应对象,

2.然后调用咱们写的doGet方法,生成一个有属性的响应返回给Tomcat,然后Tomcat再把resp按照http协议,转为字符串,

3.Tomcat把这个字符串写入到socket,返回给客户端


2a65581023ba486c8144991944a18bb7.png

调用父类的doGet方法是一定要注释掉的,我们跳转到源码可以发现直接返回405错误了

注意:resp.getWriter()得到了resp内部持有的Writer对象,Writer对象是字符流

最后加上注解


这个代码不需要main方法,因为它插入到了Tomcat里面去调用的,Tomcat是有main方法的

这个注解里面的内容起啥名都行


咱们写的doGet是其中的一个环节,大部分都是现成的,这样的编写方式就是框架,今天学习的Servlet就是一个框架!


🍐5.打包程序


我们的程序不能直接独立运行,必须部署到Tomcat上运行,部署的前提是先打包

如果一个项目很复杂,那就有很多.Java文件,就是很多.class文件,所以把这些.class文件打包成一个压缩包,再拷贝,比较科学


在Java中,使用的压缩包是.jar .war


.jar就是普通的Java程序打的包,.war就是部署给tomcat的程序打出来的包


他们没有区别其实,都是把一堆.class文件打包,但是war包属于Tomcat专用的,里面有特定的目录结构和文件,比如web.xml,tomcat根据这些内容,加载webapp


双击maven面板的package,就打包完成了,为了变成war包,我们在pom.xml里还要写一个这样的代码

a1b9d58c2f494799978410d0a3a74fa4.png


使用project标签,说明打出来的包是war包

还可以使用build标签修改打出来包的名字,我们写成hello_servlet

我们来双击看看结果


左侧有target这样的表示,这就表示打包成功了
而且不用我们使用winrar手动解压缩,Tomcat会我们解压缩


🍐6.部署

把打好的war包,拷贝到tomcat的webapps里面

拷贝完成

现在我们启动Tomcat

出现这个就是部署成功了的意思,不过为啥会出现乱码呢,因为编码方式不一样!

Tomcat是采用utf-8编码的,而Windows 的cmd采用gbk编码


🍐7.验证程序

不是 说Tomcat一启动,我们写的代码就能立即执行了.
前提是请求的URL路径得匹配

6d8f1afeaf9a4c6fb06afe3ee63a45bd.png


路径分两级


1.hello_servlet,称作Context Path/Application Path,作用是标识了一个webapp(也就是webapp的目录名或者war包名)

2.hello,叫做Servlet Path,标识当前这个页面要调用哪个Servlet类的doGet方法


注意:


1.一个Tomcat可以有很多个webapp

2.一个webapp中,可以有很多个Servlet,对应在代码里就是点击蓝色的Java文件创建的类有几个,Servlet就有几个,doGet就有几个~~~

今天的讲解就到这里,我们下期再见~~

相关文章
|
6月前
|
设计模式 前端开发 Java
从0开始回顾SpringMVC---系列一
SpringMVC 1、什么是SpringMVC? SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的及部分,简化开发,减少出错,方便组内开发人员之间的配合。 MVC ● Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao)和服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能
|
6月前
|
存储 Java 应用服务中间件
JavaWeb----Servlet技术
JavaWeb----Servlet技术
361 0
|
Java 应用服务中间件 API
|
开发框架 小程序 Java
|
设计模式 SQL 存储
Springboot之---强大的Servlet(七)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
98 0
|
消息中间件 SQL 缓存
Springboot之---强大的Servlet(十)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
144 0
|
安全 Java 应用服务中间件
Springboot之---强大的Servlet(五)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
88 0
|
Java Spring 容器
Springboot之---强大的Servlet(二)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
83 0
|
SQL Java 应用服务中间件
Springboot之---强大的Servlet(四)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
122 0
|
消息中间件 负载均衡 Java
Springboot之---强大的Servlet(十 一)
如今回头看下Servlet不仅如此强大,还具有很强烈的参考意义,能在现如今流行的大部分框架中找到它的影子。下面文章不止与探索Servlet,可能在其中穿插其他的关联知识点,旨在能从此次的学习中获取更多的知识点参考资料总结,转化为自己的理解输出,在文中我尽量以截图+复制全限定类名的方式记录,以便感兴趣的再次查找。
114 0