七个步骤, 编写一个 Servlet 的 HelloWorld 程序

news2024/11/13 12:43:28

目录

1.创建项目

2.引入依赖 

①直接粘贴仓库目标地址代码

② 下载jar包, 然后导入jar包

3.创建目录

4.编写代码

5.打包代码

6. 部署程序

①使用IDEA打成war包

         ②更方便的部署方式

7.验证程序 


1.创建项目

        使用IDEA创建一个maven项目

 

2.引入依赖 

        引入依赖的方式两种 

①直接粘贴仓库目标地址代码

        Maven项目创建完毕之后, 会自动生成一个pom.xml文件, 我们需要在pom.xml中引入Servlet API依赖的jar包.

1.在中央仓库中

https://mvnrepository.com/icon-default.png?t=N6B9https://mvnrepository.com/搜索servlet:

选择合适的版本 

 这里以3.1.0为例子

 版本是如何匹配的如上图,

 

 下方有个依赖自动下载的代码

打开pom.xml文件, 把上述代码粘贴到其中, 但是需要粘贴到dependencies标签中:

 <dependencies> 标签内部放置项目依赖的 jar 包. maven 会自动下载依赖到本地.

② 下载jar包, 然后导入jar包

        下载jar包 

         然后在Maven项目里面创建一个文件夹, 将此jar包直接拖到这个文件夹里面:

         将创建的用来存放jar包的文件夹设置为 library:

 然后就可以使用这个jar包了

3.创建目录

        maven项目创建好之后, IDEA会帮我们自动创建出一些目录. 形如:

 这些目录中:

  • src : 表示源代码所在的目录
  • main / java 表示源代码的根目录, 后续创建.java文件就是放在这个目录
  • main / resources 表示项目的一些资源文件所在的目录
  • test / java 表示测试代码的根目录

这些目录远远不够, 我们还需要创建一些新的目录/文件

①创建webapp 目录

②创建web.xml

        然后在webapp目录内创建一个WEB-INF目录, 并创建一个web.xml文件:

 

 

③编写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>

        webapp 目录就是未来部署到Tomcat中一个重要的目录, 当前我们可以往webapp中放一些静态资源, 比如html, css等.

        在这个目录中还有一个重要的文件web.xml.  tomcat找到这个文件才能正确处理webapp中的动态资源.

4.编写代码

        在src / java目录中创建一个类HelloServlet , 然后让子类继承HttpServlet:

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;

@WebServlet("hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello");
        resp.getWriter().write("hello");
    }
}
  • 创建的HelloServlet类, 继承了依赖中的HttpServlet类
  • 这个主类需要加上 @WebServlet("hello") 的注解, 表示 tomcat请求的路径为 /hello的请求才能调用HelloServlet这个类里面的代码
  • 重写doGet方法, doget有两个参数,  一个是req, 表示请求, 一个是 resp, 表示响应. 这个方法会在tomcat收到get请求时触发
  • req和resp两个参数, 是把一个http请求, 抽象为一个类, 然后类里面包含了一个http请求的字段信息
  • HttpServletRequest 表示http请求, tomcat会按照http请求的格式, 把字符串格式的http请求转化为一个HttpServletRequest对象, 后续想要获取请求中的信息, 方法, url, header, body等, 都是通过这个对象来获取
  • HttpServletResponse 表示Http响应, 代码中把响应对象构造好(状态码, header,body等)
  • resp.getWriter() 会获取一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据就会被构造成一个HTTP响应的body部分, Tomcat会把种鸽响应转成字符串, 通过socket歇会给浏览器. 

这几行代码只有寥寥几行, 但是包含的信息量巨大.

1.我们的代码不是通过main方法作为入口, main方法已经包含在tomcat中了, 我们写的代码会被tomcat在核实的机会调用起来

2. 我们随便写个类都会都能被tomcat调用吗, 满足什么条件才能被调用?

        ①创建的类需要继承HttpServlet

        ②这个类需要创建一个注解, @WebServlet, 然后关联上一个HTTP路径

        ③需要实现doXxx方法

        ④还需要合适的时机

5.打包代码

        使用 maven 进行打包. 打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口, 如果看不到的话,可以通过 菜单 -> View -> Tool Window -> Maven 打开). 然后展开 Lifecycle , 双击 package 即可进行打包

 

 双击package

 如果比较顺利的话, 能够看到 SUCCESS 这样的字样:

如果代码/配置/环境存在问题, 可能会提示 BUILD FAILED, 可以根据具体提示的错误信息具体解决.

打包成功后, 可以看到在 target 目录下, 生成了一个 jar 包
 

 生成了一个名为Test2-1.0-SNAPSHOT的jar包.

但是jar包并不是我们需要的, tomcat需要识别的是war包格式, 此外这个jar名字太复杂了我们需要换个名字, 换一个更简单的

war包和jar包的区别:

        jar包是普通的java程序打包的结果, 里面会包含一些.class文件

        war包是java web程序, 里面除了会包含一些.class文件之外, 还会包含html, css和js,图片等, 以及其他的jar包, 打成war包格式, 才能被tomcat识别

Test2-1.0-SNAPSHOT.jar  这个包名字的由来:

在 pom.xml 中新增一个 packing 标签, 表示打包的方式是打一个 war 包<packaging>war</packaging>

 

 修改打包的名称:

在 pom.xml 中再新增一个 build 标签, 内置一个 finalName 标签, 表示打出的 war 包的名字是
HelloServlet

<build>
<finalName>HelloServlet</finalName>
</build>

 然后重新点击maven菜单里面的package

 进行打包:

6. 部署程序

①使用IDEA打成war包

        把war包拷贝到tomcat/webapps里面, 如下:

 然后启动tomcat, tomcat就会自动把war包解压:

启动tomcat

 

②更方便的部署方式

手动拷贝 war 包到 Tomcat 的过程比较麻烦. 我们还有更方便的办法
 此处我们使用 IDEA 中的 Smart Tomcat 插件完成这个工作

打开setting

 选中plugins

 然后点击MarketPlace并搜索Smart tomcat, 然后安装并应用:

 插件就是对程序的一些特定场景, 做出一些特定的功能的扩展.

重启IDEA

配置smart tomcat:

添加tomcat:

 

 

 添加tomcat版本

 选中下载tomcat的目录

 设置Context path:

设置端口号:

 

其中 Context Path 默认填写的值是项目名称
 

ok之后右上角就变成了:
 

点击绿色的三角号, IDEA 就会自动进行编译, 部署, 启动 Tomcat 的过程

 

        使用 Smart Tomcat 部署的时候, 我们发现 Tomcat 的 webapps 内部并没有被拷贝一个 war 包,也没有看到解压缩的内容.Smart Tomcat 相当于是在 Tomcat 启动的时候直接引用了项目中的 webapp 和 target 目录

         所以不需要进行解压缩

7.验证程序 

         使用浏览器访问: http://127.0.0.1:8080/HelloServlet/hello

注意: URL中的path分为两部分, 其中HelloServlet为Context Path, hello 为Servlet path

 





此次内容结束:

 

 

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

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

相关文章

selenium-web自动化测试

一、selenium环境部署 1.准备chrome浏览器&#xff08;其他浏览器也行&#xff09; 2.准备chrome驱动包 步骤一&#xff1a;查看自己的谷歌浏览器版本(浏览器版本和驱动版本一定要对应) 步骤二&#xff1a;下载对应的驱动包, 下载路径 : ChromeDriver - WebDriver for Chrom…

环境搭建的上手指南

前言 测试环境是QA开展测试工作的前置条件。稳定和可控的测试环境&#xff0c;可以使测试人员在执行测试用例时无需花费额外的时间去维护。 有些公司运维或者研发部门会帮忙准备好测试环境&#xff0c;但是QA如果一味依赖其他部门&#xff0c;会局限测试工作的开展。 一、什…

OSPF随记

邻居状态机&#xff1a;进度条 工作原理&#xff1a; 1.发送hello报文&#xff0c;建立邻居关系 down&#xff1a;没有发送报文之前 init:开始发送hello报文&#xff0c;自己收到的hello报文中没有自己的route-id 2way:收到的hello报文中有自己的route-id&#xff08;在2w…

selenium如何打开浏览器,等待用户输入完成后,再运行

selenium如何打开浏览器&#xff0c;等待用户输入完成后&#xff0c;再运行 一、在脚本中&#xff0c;等待用户输入 在使用 Selenium 打开浏览器后等待用户输入完成&#xff0c;可以使用 Python 编写一个简单的脚本来实现。首先&#xff0c;确保你已经安装了 Selenium 和对应的…

这 4 个系统可靠性评估指标,可能比 MTTR 更靠谱!

如果要评选研发效能管理中最重要的 10 个度量指标&#xff0c;相信 MTTR&#xff08;Mean Time to Recover&#xff0c;平均恢复时间&#xff09;一定榜上有名。 MTTR 代表一定周期内可修复系统不可用状态的平均持续时长&#xff0c;可以帮助企业更好地理解技术团队与研发工作…

GPU显卡驱动安装

查看GPU版本 lspci | grep -i nvidia从下面的网址ThePCI ID Repository中输入ID查看对应的GPU版本 官网NVIDIA下载对应的驱动 安装下载的文件 sudo sh ./NVIDIA-Linux-x86_64-535.86.05.run 检验是否安装成功 nvidia-smi

机器学习-Regression

机器学习(Regression:Case Study) 前言&#xff1a; 学习资料 videopptblog Example Application 建立一个model&#xff0c;将宝可梦的一些数据作为输入&#xff0c;然后输出宝可梦进化以后的战斗力CP值&#xff0c;这个model的建立尤为重要&#xff0c;但是这个模型的建立…

目标检测中 anchor base和anchor free

目标检测中两种不同anchor的生成 趋势&#xff1a;anchor free越来越受到实时性检测的青睐&#xff0c;&#xff0c;&#xff0c;

redis 高级篇 redis 源码的读取分析

一 redis源码分析 1.1 源码分析 1每一个kv键值对应有一个dictEntry。 2.底层数据结构

《QDebug 2023年7月》

一、Qt Widgets 问题交流 1.QPainter旋转角度绘制线条的一点问题 QPainter 旋转角度&#xff0c;等距绘制若干线条&#xff0c;会出现绘制不均匀的情况&#xff1a; 但是在测试 QML Canvas 绘制时&#xff0c;发现效果是正常的&#xff0c;原来是因为 Canvas 默认的 capStyle…

正则表达式的应用及示例解析

正则表达式&#xff08;Regular Expression&#xff0c;简称Regex&#xff09;是由特殊字符组成的模式字符串&#xff0c;用于匹配和搜索文本中的特定模式。它在数据处理、文本搜索和替换等方面广泛应用。本文将介绍正则表达式的基本语法&#xff0c;并提供常见的正则表达式示例…

Linux系统增加新用户

使用adduser命令&#xff0c;不使用useradd命令。 登录root用户&#xff0c;或者有sudo权限的用户创建。 sudo adduser test修改文件目录的权限 sudo chmod -R 777 /opt/登录新创建的用户创建文件 mkdir test删除用户 userdel -r test增加网络映射&#xff0c;安装samba sudo…

RBAC三级树状菜单实现(从前端到后端)未完待续

1、表格设计 RBAC 2、前端路由 根据不同的用户id显示不同的菜单。 根据路由 3、多级菜单 展示所有权限&#xff0c;并且根据当前用户id展示它所属的角色的所有菜单。 前端树状展示 思路&#xff1a; 后端&#xff1a;传给前端map&#xff0c;map里1个是所有菜单&am…

汽车过户时,怎么选到理想的好车牌?

在汽车过户的过程中&#xff0c;选到一副理想的好车牌就像买彩票中大奖一样令人兴奋。但是&#xff0c;怎样找到这样一块车牌呢&#xff1f;这就是本文要探讨的问题。 首先&#xff0c;我们来聊聊选车牌的技巧。很多人喜欢选择有特别数字的车牌&#xff0c;如“8888”、“6666”…

太狠了,Spring 全家桶笔记, 一站式通关全攻略, 已入职某厂涨薪 18K

Spring 早已成为 Java 后端开发事实上的行业标准&#xff0c;无数的公司选择 Spring 作为基础的开发框架&#xff0c;大部分 Java 后端程序员在日常工作中也会接触到 Spring &#xff0c;因此&#xff0c;如何用好 Spring &#xff0c;也就成为 Java 程序员的必修课之一。 为了…

解决方案之执行gradle报错--org.codehaus.groovy.runtime.InvokerHelper

这里写自定义目录标题 报错解决方案 报错 在执行./gradlew clean时报错如下&#xff1a; FAILURE: Build failed with an exception.* What went wrong: Could not initialize class org.codehaus.groovy.runtime.InvokerHelper > Exception java.lang.NoClassDefFoundErr…

自动callback

using UnityEngine;public class AsyncCallbackScript : MonoBehaviour {public delegate void fun(string msg);void Start(){fun test AAA;//test.BeginInvoke("天王盖地虎", asyncCallback > BBB(), null);test.BeginInvoke("天王盖地虎 宝塔镇河妖"…

Java实现简单小画板

Java制作简单画板&#xff0c;包括两个类&#xff0c;一个主要画板类Drawpad&#xff0c;一个画板监听器DrawListener类。 1、Drawpad类&#xff0c;包括画板&#xff0c;画板功能设计&#xff0c;保存图片等 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2…

Boost开发指南-3.6weak_ptr

weak_ptr weak_ptr是为配合shared_ptr而引入的一种智能指针&#xff0c;它更像是shared_ptr的一个助手而不是智能指针&#xff0c;因为它不具有普通指针的行为&#xff0c;没有重载 operator*和->。它的最大作用在于协助shared_ptr工作&#xff0c;像旁观者那样观测资源的使…

伴伴加速“搭子社交”:确认过眼神,是一起玩游戏的人

最近在年轻人中风靡起了一种新型的社交方式——“搭子”社交。例如饭搭子、学习搭子、游戏搭子、减肥搭子......在搭子社交流行的当下&#xff0c;伴伴抓住了这一点&#xff0c;为年轻人提供了一个线上社交平台&#xff0c;让他们能够找到与自己兴趣相投的搭子。 什么是搭子社…