我的第一个Servlet程序,并理解浏览器和代码如何关联在一起

news2024/11/28 0:40:42

目录

Servlet

第一个Servlet程序

1.创建项目

maven是什么

如何创建maven项目

2.引入Servlet依赖

找到库中maven代码

3.创建目录结构

4.编写代码

理解注解@Webserlet

5.打包程序

生成war包

6.部署程序

7.验证程序

二.理解浏览器发的请求是怎么和自己写的代码建立联系的

1.匹配Context path的第一级路径

2.匹配Servlet Path第二级路径

3.匹配http方法


1.静态页面 vs动态页面

静态页面 直接拷贝到webapps就行

动态页面:基于servlet api进行代码实现了

Servlet

Servlet 是一组 Tomcat 提供的 API, 让程序猿自己写的代码能很好的和 Tomcat 配合起来, 从
而更简单的实现一个 web app.
 

第一个Servlet程序

写一个Servlet的 hello world(和jdbc差不多,都是固定的套路)

7个步骤:

1.创建项目

需要创建的是一个meven项目

maven是什么

 maven实际上就是一个构造工具

包括不限于,编译,打包,部署功能....

实际上程序都有很多模块,模块之前都有相互依赖关系,你想编译运行a,就得先b,想b就c,一个一个写就比较麻烦

构建工具就是解决这个问题,使我们在开发比较复杂的项目的时候,也是可以比较方便进行打包

和编译工作的

如何创建maven项目

咱们使用mavem主要就是借助 maven 进行编译,打包,管理依赖

2.引入Servlet依赖

Servlet 不是 java 标准库自带的,要想使用, 就需要额外的下载安装,并引入到项目中,maven的一个核心功能,就是能够自动的管理依赖,就会把咱们使用的库里依赖的东西,自动从中央仓库里下载下来

找到库中maven代码

 中央仓库地址https://mvnrepository.com​​​​​​​​​​​

 搜索Servlet并选择maven

复制下列代码引入到idea中,并加入depencies

复制完成后,代码爆红,这时候要点击maven自动下载依赖

(maven的一个核心功能,就是能够自动的管理依赖)

 

3.创建目录结构

虽然maven已经帮我们创建出一些目录了,但是还不够,咱们需要搞的是一个符合tomcat要求的目录

 注意这里的位置,名字层次都必须严格一致,在web.xml写如下代码

然后 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>

4.编写代码

@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");
        resp.getWriter().write("hello");
    }
}

doget表示Tomcat在收到某些get请求时,调用doget方法(根据请求计算响应),俩个参数分别是请求和响应,响应是输出型参数,再进一步tomcat就把resp通过doget生成的对象,转换成一个http请求报文(把响应结果返回给客户端)

理解注解@Webserlet

 

5.打包程序

把写好的代码通过Servlet打包 + 部署,在Tomcat上运行(Servlet比作火车车节,箱,Tomcat就是火车头带动跑,需要格式一致)

生成war包

在pom.xml中输入下列代码

 <packaging>war</packaging>
    <build>
        <finalName>servletHelloWorld</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.3.1</version>
                </plugin>
            </plugins>
    </build>

6.部署程序

把war包 拷贝到tomcat的webapp中

 红色就是拷贝过来的程序,在经过tmocat部署生成servletHelloWorld文件

7.验证程序

通过浏览器构造一个HTTP请求来验证

 

二.理解浏览器发的请求是怎么和自己写的代码建立联系的

1.匹配Context path的第一级路径

 

获取到 url 中的第一级路径,servletHelloWorld,也就是我们new project内容,确定一个webapp

2.匹配Servlet Path第二级路径

TomCat找到servletHelloWorld 目录之后,就会加载里面的类,尤其是重点去识别 @WebServlet注解修饰的类

就会取出 url的第二级路径 /hello 这个也叫做Servlet path

然后就在@WebServlet 注解中,找到名字为/hello的类,找到类之后,创建实例(只会创造一次,如果之前创建过了,就会复用上次的实例

3.匹配http方法

再解析出Http请求方法get,取出get之后,就可以根据http方法来调用对应的servlet中的方法

get请求使用doget方法

post请求使用 dopost方法

put请求调用doput方法

delete使用dodelete方法

......

同时Tomcat还会构造出HttpServletRequest对象和HttpServletResponse对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

景联文智能标注平台将数据处理效率提升十倍以上!数据精准度最高可达99%

目前主流的机器学习方式是以有监督的深度学习方式为主&#xff0c;这对标注数据有着强较依赖性需求&#xff0c;未经标注处理过的原始数据多以非结构化数据为主&#xff0c;这些数据难以被机器识别和学习。这就需要标注员借助数据标注工具对数据进行标注。 使用高效率的标注工具…

如何知道你的Linux内核占用的内存大小?

如何知道你的Linux内核占用的内存大小&#xff1f;1、代码段等2、kernel heap2.1、kmalloc2.2、vmalloc3、进程的页表4、内核占用内存大小总和1、代码段等 内核所需的代码段、bss段&#xff0c;内核栈等。 / # dmesg | grep Memory Memory policy: Data cache writealloc M…

springboot使用mybatis

springboot使用mybatis 本文目录springboot使用mybatis引入maven依赖新增数据库配置创建数据库表实体类编写mapper接口层通过xml文件mapper中直接使用注解编写mapper.xmlIDEA创建mybatis的xml文件parameterType启动类controller调用引入maven依赖 <dependency><groupI…

视频转音频怎么转?来试试这三个方法

如今我们可以看到有一些人会把电影/电视变成听电影/电视&#xff0c;相信大家都会感觉很不可思议吧&#xff01;电影/电视不是用来看的吗&#xff1f;听就没办法享受到那种视觉上的震撼了&#xff0c;其实不然&#xff0c;听电影/电视也是一种别样的享受&#xff0c;特别是对有…

看完这篇还不懂MySQL的MVCC机制算我输

前言 MySQL中大名鼎鼎的MVCC机制想必大家都有所耳闻吧&#xff0c;虽然在平时MySQL使用过程中基本上用不到&#xff0c;但是面试中出场率十分高&#xff0c;而且作为架构师的你也是需要知道它的工作机制。那么你对MVCC机制了解多少呢&#xff1f;MVCC机制是用来干嘛的呢&#…

使用 Clion (cmake) 开发FreeRTOS

这里使用的是 f4071. 先用STM32CubeMX 建立一个可以运行的stm32项目&#xff0c;toolchain选择 SW4STM322. 官网下载源码www.freertos.org我这里下载的是FreeRTOSv202112.00.zip 解压缩后得到需要以下几个文件夹或档案FreeRTOS/Source下的所有的 .c 档案FreeRTOS/Source/includ…

m基于GA遗传优化的GRNN广义回归神经网络销售数据预测算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着市场经济的发展和全球化&#xff0c;国内外企业面临着越来越残酷的市场竞争&#xff0c;要想赢得竞争&#xff0c;赢得市场&#xff0c;从事商品销售的单位必须在短时间内&#xff0c;以最低…

【图多预警】Pandas绘图函数总结

文章目录简介条形图折线图箱线图直方图饼图散点图和六边形分箱图简介 pandas中提供了plot函数用以绘图&#xff0c;并通过kind参数选择具体的图像类型。 method绘图类别method绘图类别line折线图[默认使用]area堆叠面积图bar纵向条形图barh横向条形图kde概率分布图density概率…

企企通:数字化浪潮下,企业如何利用间接采购策略,实现降本增效?

01、什么是间接采购&#xff1f; 通常&#xff0c;我们将采购分为直接物料和间接物料。 直接采购&#xff1a;用于产品生产及销售的物料与服务的购买&#xff0c;服务于外部客户&#xff0c;也叫生产性采购。如原材料、产品包装、物流服务等。直接采购无论是生产所需的原材料、…

backup (攻防世界)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 进入网址 解题工具: 浏览器? 问题解析: X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; 先说一下备份文件 科普时间叕到 网站备份 分…

怎样录屏没有外界杂音?3个十分好用的方法,码住收藏!

在互联网时代&#xff0c;使用电脑娱乐、工作逐渐成为了日常生活的一部分。而其中&#xff0c;电脑录屏是经常使用的功能之一。不过对于电脑录屏领域不熟悉的小伙伴就会问了&#xff1a;“为什么录制的视频会有杂音&#xff0c;怎样录屏没有外界杂音&#xff1f;”别着急&#…

对于xshell连接不上虚拟机的一些解答

如果你发现你可以在虚拟机内ping通 之后&#xff0c;在你电脑dos下也可以ping通。 然而&#xff0c;还是发现你的xshell连接不上虚拟机。 这里使用ifconfig 我发现这个地址是在变化的&#xff0c;之前是129&#xff0c;现在是131&#xff0c;所以这样再到xshell&#xff0c;…

【Java面试】谈谈你对HashMap的理解(Map接口)

文章目录说一下 HashMap 的实现原理&#xff1f;HashMap在JDK1.7和JDK1.8中有哪些不同&#xff1f;HashMap的底层实现&#xff1f;HashMap的put方法的具体流程&#xff1f;HashMap的扩容操作是怎么实现的&#xff1f;HashMap是怎么解决哈希冲突的&#xff1f;能否使用任何类作为…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: rbegin

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/rbegin/ 公有成员函数 <deque> std::deque::rbegin C98 reverse_iterator rbegin(); const_reverse_iterator rbegin() const; C11 reverse_iterator rbegin() noexcept; const_reverse_iterato…

类加载机制和类加载器

文章目录类加载机制为什么需要类加载类加载的时机主动使用——会触发类的初始化被动使用的例子关于接口的初始化类加载详细过程加载链接初始化类加载器类与类加载器,类的实例的关系回顾类的卸载类加载的基本特征类加载器的分类Java虚拟机自带的类加载器用户自定义类加载器Class…

web前端期末大作业 在线电影网页设计与制作 HTML+CSS+JavaScript仿叮当电影网页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

【Elasticsearch】kibana 操作es文档详细总结

前言 在上一篇&#xff0c;分享了使用kibana如何对索引进行增删改查等操作&#xff0c;事实上在日常开发与运维中&#xff0c;操作索引毕竟是比较谨慎的事情&#xff0c;但是对于索引中文档的增删查改却是随处可见的&#xff0c;es对文档的操作不仅频繁&#xff0c;而且涉及到…

HTML+CSS一个简单的电影网页制作作业,学生个人html静态网页制作成品代码, html电影速递网

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

细说react源码中的合成事件

&#x1f495; 温馨提示: 下边是对React合成事件的源码阅读&#xff0c;全文有点长&#xff0c;但是&#xff01;如果你真的想知道这不为人知的背后内幕&#xff0c;那一定要耐心看下去&#xff01; 最近在做一个功能&#xff0c;然后不小心踩到了 React 合成事件 的坑&#xf…

【 web网页设计期末课程大作业】基于HTML+CSS+JavaScript智慧路灯综合管理系统

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…