Servlet(1)

文章目录

  • 什么是Servlet
    • Servlet 主要做的工作
  • 第一个Servlet程序
    • 1.创建项目
    • 2. 引入依赖
    • 3. 创建目录
      • 1) 创建 webapp 目录
      • 2) 创建 web.xml
      • 3) 编写 web.xml
    • 4. 编写代码
    • 5. 打包程序
    • 7. 验证程序

什么是Servlet

Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app

Servlet 主要做的工作

  1. 允许程序猿注册一个类, 在 Tomcat 收到某个特定的 HTTP 请求的时候, 执行这个类中的一些代码.
  2. 帮助程序猿解析 HTTP 请求, 把 HTTP 请求从一个字符串解析成一个 HttpRequest 对象.
  3. 帮助程序猿构造 HTTP 响应. 程序猿只要给指定的 HttpResponse 对象填写一些属性字段, Servlet就会自动的安装 HTTP 协议的方式构造出一个 HTTP 响应字符串, 并通过 Socket 写回给客户端

第一个Servlet程序

1.创建项目

使用 IDEA 创建一个 Maven 项目.

  1. 菜单 -> 文件 -> 新建项目 -> Maven
    在这里插入图片描述
  2. 选择项目要存放的目录
    在这里插入图片描述
  3. 项目创建完毕后, 一般右下角会弹出以下对话框. 选择 Enable Auto-Import
    在这里插入图片描述
    如果第一次进入Maven,可能会出现Cannot resolve plugin org.apache.maven.pluginsXXX,可能是网络原因导致下载出现问题
    可以参考https://blog.csdn.net/lyg9966/article/details/105904175

2. 引入依赖

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

  1. 在中央仓库 https://mvnrepository.com/ 中搜索 “servlet”, 一般第一个结果就是.
    在这里插入图片描述
  2. 选择版本. 一般我们使用 3.1.0 版本

在这里插入图片描述
注意:

Servlet 的版本要和 Tomcat 匹配.
如果我们使用 Tomcat 8.5, 那么就需要使用 Servlet 3.1.0 可以在
http://tomcat.apache.org/whichversion.html 查询版本对应关系

在这里插入图片描述
3. 把中央仓库中提供的 xml 复制到项目的 pom.xml 中

在这里插入图片描述
修改后的 pom.xml 形如

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>ServletHelloWorld</artifactId>
<version>1.0-SNAPSHOT</version>
<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>
</project>

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

3. 创建目录

当项目创建好了之后, IDEA 会帮我们自动创建出一些目录. 形如
在这里插入图片描述
这些目录中:

  1. src 表示源代码所在的目录
  2. main/java 表示源代码的根目录. 后续创建 .java 文件就放到这个目录中.
  3. main/resources 表示项目的一些资源文件所在的目录. 此处暂时不关注.
  4. test/java 表示测试代码的根目录. 此处暂时不关注.

1) 创建 webapp 目录

在 main 目录下, 和 java 目录并列, 创建一个 webapp 目录 (注意, 不是 webapps).

在这里插入图片描述

2) 创建 web.xml

然后在 webapp 目录内部创建一个 WEB-INF 目录, 并创建一个 web.xml 文件
在这里插入图片描述

3) 编写 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. 编写代码

在 java 目录中创建一个类 HelloServlet, 代码如下:

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {System.out.println("hello");resp.getWriter().write("hello");}
}
  1. 创建一个类 HelloServlet , 继承自 HttpServlet
  2. 在这个类上方加上 @WebServlet(“/hello”) 注解, 表示 Tomcat 收到的请求中, 路径为 /hello的请求才会调用 HelloServlet 这个类的代码. (这个路径未包含 Context Path)
  3. 重写 doGet 方法. doGet 的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应. 这个方法会在 Tomcat 收到 GET 请求时触发
  4. HttpServletRequest 表示 HTTP 请求. Tomcat 按照 HTTP 请求的格式把 字符串 格式的请求转成了一个 HttpServletRequest 对象. 后续想获取请求中的信息(方法, url, header, body 等) 都是通过这个对象来获取.
  5. HttpServletResponse 表示 HTTP 响应. 代码中把响应对象构造好(构造响应的状态码, header,body 等)
  6. resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览器

5. 打包程序

使用 maven 进行打包. 打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口, 如果看不到的话,
可以通过 菜单 -> View -> Tool Window -> Maven 打开)
然后展开 Lifecycle , 双击 package 即可进行打包.
在这里插入图片描述
如果比较顺利的话, 能够看到 SUCCESS 这样的字样
在这里插入图片描述
打包成功后, 可以看到在 target 目录下, 生成了一个 jar 包.
在这里插入图片描述
这样的 jar 包并不是我们需要的, Tomcat 需要识别的是另外一种 war 包格式.
另外这个 jar 包的名字太复杂了, 我们也希望这个名字能更简单一点

war 包和 jar 包的区别
jar 包是普通的 java 程序打包的结果. 里面会包含一些 .class 文件.
war 包是 java web 的程序, 里面除了会包含 .class 文件之外, 还会包含 HTML, CSS, JavaScript, 图片, 以及其他的 jar 包. 打成 war 包格式才能被 Tomcat 识别.

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

<packaging>war</packaging>

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

<build>
<finalName>ServletHelloWorld</finalName>
</build>

完整的 pom.xml 形如

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>ServletHelloWorld</artifactId>
<version>1.0-SNAPSHOT</version>
<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>
<packaging>war</packaging>
<build>
<finalName>ServletHelloWorld</finalName>
</build>
</project>

重新使用 maven 打包, 可以看到生成的新的 war 包的结果
在这里插入图片描述
6. 部署程序
把 war 包拷贝到 Tomcat 的 webapps 目录下.
启动 Tomcat , Tomcat 就会自动把 war 包解压缩
在这里插入图片描述
看到这个日志说明 Tomcat 已经正确识别了 ServletHelloWorld 这个 webapp.

7. 验证程序

此时通过浏览器访问 http://127.0.0.1:8080/ServletHelloWorld/hello
就可以看到结果了.
在这里插入图片描述
注意: URL 中的 PATH 分成两个部分, 其中 HelloServlet 为 Context Path, hello 为 Servlet Path
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

投标文件模版的制作以及使用

投标文件中&#xff0c;不能每次都是设置文档&#xff0c;制作好一个模版就是一只使用 步骤1&#xff1a;找到一个调试好的投标文件&#xff0c;把所有内容都是删除&#xff0c;保留空的内容&#xff0c;如下 步骤2&#xff1a;指定到我的文档--自定义office模版--选择word文档…

基于深度学习的红肉新鲜过期判决系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 系统构成与流程 4.2 模型训练与优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...............................................…

Vue状态管理库-Pinia

一、Pinia是什么&#xff1f; Pinia 是 Vue 的专属状态管理库&#xff0c;它允许支持跨组件或页面共享状态&#xff0c;即共享数据&#xff0c;他的初始设计目的是设计一个支持组合式API的 Vue 状态管理库&#xff08;因为vue3一个很大的改变就是组合式API&#xff09;,当然这…

DBeaver使用遇到的问题汇总

文章目录 1、Dbeaver一次性执行多条sql语句2、执行外部sql文件3、sql编辑器显示行号 1、Dbeaver一次性执行多条sql语句 右键连接&#xff0c;编辑连接&#xff0c;将连接设置中、驱动属性中allowMultiQueries从 默认的false改为true就行。 参考博客&#xff1a;使用DBeaver一…

基于springboot+vue的高校学科竞赛系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

黑色金属冶炼5G智能工厂数字孪生可视化管控系统,推进金属冶炼行业数字化转型

黑色金属冶炼5G智能工厂数字孪生可视化管控系统&#xff0c;推进金属冶炼行业数字化转型。随着科技的不断发展&#xff0c;数字化转型已经成为各行各业发展的必然趋势。金属冶炼行业作为传统工业的重要组成部分&#xff0c;也面临着数字化转型的挑战和机遇。为了推进金属冶炼行…

初阶数据结构之---顺序表和链表(C语言)

引言-线性表 线性表&#xff1a; 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构。线性表在逻辑上是线性结构&#xff0c;也就是说是连续的一条直线。但在物理上并不一定是连续的。线性表在物理上…

[法规规划|方案实操]财政部会计司《企业数据资源入表专题培训》内容要点及实例解析

财政部会计司《企业数据资源相关会计处理暂行规定》专题线上培训 一。制定背景 随着大数据等信息技术、互联网等基础设施的不断演进&#xff0c;数字经济和产业得到飞速发展&#xff0c;并持续推动生产方式、生活方式和社会治理方式的深入变革&#xff0c;数字产业化和产业数字…

程序员是否应该让电脑保持24小时开启:效率与能耗的权衡之争**

链接&#xff1a;华为OD机考原题附代码 程序员为什么不喜欢关电脑&#xff1f; 你是否注意到&#xff0c;程序员们似乎从不关电脑&#xff1f;别以为他们是电脑上瘾&#xff0c;实则是有他们自己的原因&#xff01;让我们一起揭秘背后的原因&#xff0c;看看程序员们真正的“…

React 模态框的设计(一)拖动组件的设计

春节终结束了&#xff0c;忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果&#xff1a; 这是一个简单的组件设计&#xff0c;如果用原生的js设计就很简单&#xff0c;但在React中有些事件必须要多考虑一些。这是一个系列的文章&#xff0c;…

边缘计算物联网关在生产场景中的应用-天拓四方分享

随着物联网技术的飞速发展&#xff0c;边缘计算物联网关在生产场景中的应用越来越广泛。边缘计算物联网关作为连接物理世界与数字世界的桥梁&#xff0c;能够将传感器、执行器等设备产生的海量数据实时传输到云端进行处理&#xff0c;从而实现生产过程的智能化和自动化。 在生…

UE蓝图 返回结果(FunctionResult)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 文章目录 系列文章目录一、FunctionResult节点功能二、FunctionResult节点…