如何创建一个Servlet项目(Maven)?

news2024/11/18 15:43:34

系列文章目录

Tomcat下载、安装及使用介绍_crazy_xieyi的博客-CSDN博客


文章目录

  • 前言
  • 一、创建Servlet项目(Maven)的步骤
    • 1.创建Maven项目
    • 2.引入依赖
    • 3.创建目录
    • 4.编写代码
    • 5.打包程序
    • 6.部署程序
    • 7.验证程序
  • 二、总结(使用smart tomcat插件来打包部署

前言

Servlet 是一种实现动态页面的技术,是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app。
Servlet 主要做的工作
允许程序猿注册一个类, 在 Tomcat 收到某个特定的 HTTP 请求的时候, 执行这个类中的一些代码。
帮助程序猿解析 HTTP 请求,把 HTTP 请求从一个字符串解析成一个 HttpRequest 对象。
帮助程序猿构造 HTTP 响应,程序猿只要给指定的 HttpResponse 对象填写一些属性字段, Servlet 就会自动的按照 HTTP 协议的方式构造出一个 HTTP 响应字符串, 并通过 Socket 写回给客户端。
 
简而言之, Servlet 是一组 Tomcat 提供的 API, 让程序猿自己写的代码能很好的和 Tomcat 配合起来, 从 而更简单的实现一个 web app。而不必关注 Socket, HTTP协议格式, 多线程并发等技术细节, 降低了 web app 的开发门槛, 提高了开发效率。 我们只需要关注生成响应的这个过程。
 
一、创建Servlet项目(Maven)的步骤

1.创建Maven项目

使用 IDEA 创建一个 Maven 项目:菜单 -> 文件 -> 新建项目 -> Maven
 
2.引入依赖
 
Maven 项目创建完毕后, 会自动生成一个 pom.xml 文件:
736f125ce681426688208fa509293448.png

 我们需要在 pom.xml 中引入 Servlet API 依赖的 jar 包。

1) 在中央仓库 https://mvnrepository.com/ 中搜索 "servlet":

929e6b01fe0a4a4794d41093e4934487.png

2) 选择版本,一般我们使用 3.1.0 版本 

2bdeec1c08b2442c96437fb9e38ce7b2.png

注意:Servlet 的版本要和 Tomcat 匹配.

如果我们使用 Tomcat 8, 那么就需要使用 Servlet 3.1.0
可以在 http://tomcat.apache.org/whichversion.html 查询版本对应关系
 
3) 把中央仓库中提供的 xml 复制到项目的 pom.xml 中
3012ae7620f843a4b0eaf2ce580c7dda.png

 

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

029d117371f844b48de6371b0702944f.png

3.创建目录

当项目创建好了之后, IDEA 会帮我们自动创建出一些目录:
59a91efd179d41a5a35e0b77248281ea.png

 

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

我们还需要创建一些新的目录/文件:
 
1) 创建 webapp 目录
在 main 目录下, 和 java 目录并列, 创建一个 webapp 目录 (注意, 不是 webapps)
769ffda07d5247d886c4bb30fb91fa65.png
2) 创建 web.xml
然后在 webapp 目录内部创建一个 WEB-INF 目录, 并创建一个 web.xml 文件

 6447d6e782e54a73a360ea3535fdcf37.png

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>
Tomcat 找到这个文件才能正确处理 webapp 中的动态资源。

 

 

4.编写代码

以下代码只是示例:

在 java 目录中创建一个类 HelloServlet, 代码如下:
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("hello");
    }
}
注意:
创建一个类 HelloServlet , 继承自 HttpServlet。
在这个类上方加上 @WebServlet("/hello") 注解, 表示 Tomcat 收到的请求中, 路径为 /hello
的请求才会调用 HelloServlet 这个类的代码(这个路径未包含 Context Path)。
重写 doGet 方法. doGet 的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应, 这个
方法会在 Tomcat 收到 GET 请求时触发。
HttpServletRequest 表示 HTTP 请求。Tomcat 按照 HTTP 请求的格式把 字符串 格式的请求转
成了一个 HttpServletRequest 对象。后续想获取请求中的信息(方法, url, header, body 等) 都是
通过这个对象来获取。
HttpServletResponse 表示 HTTP 响应。 代码中把响应对象构造好(构造响应的状态码, header,
body 等)。
resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被
构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览
器。
 
现在的代码不是通过 main 方法作为入口了。 main 方法已经被包含在 Tomcat 里, 我们写的代码会被 Tomcat 在合适的时机调用起来。
写的类满足什么条件才能被 Tomcat 调用呢?
a) 创建的类需要继承自 HttpServlet
b) 这个类需要使用 @WebServlet 注解关联上一个 HTTP 的路径
c) 这个类需要实现 doXXX 方法.
当这三个条件都满足之后, Tomcat 就可以找到这个类, 并且在合适的时机进行调用。
 

5.打包程序

使用 maven 进行打包:菜单 -> View -> Tool Window -> Maven 打开

然后展开 Lifecycle , 双击 package 即可进行打包。

这里有一个重要的点需要注意:如果我们直接这样打包,会自动生成一个jar包,这不是我们所需要的。Tomcat 需要识别的是另外一种 war 包格式。jar 包是普通的 java 程序打包的结果,里面会包含一些 .class 文件。war 包是 java web 的程序, 里面除了会包含 .class 文件之外, 还会包含 HTML, CSS, JavaScript, 图片, 以及其他的 jar 包. 打成 war 包格式才能被 Tomcat 识别。

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

ee46e26d065543fbab3325c783325b22.png

3fc544dad7bc48019a5969a40094283e.png

6.部署程序

把 war 包拷贝到 Tomcat 的 webapps 目录下;启动 Tomcat , Tomcat 就会自动把 war 包解压缩。
 

7.验证程序

 

此时通过浏览器访问 http://127.0.0.1:8080/ServletHelloWorld/hello ,就可以看到结果了。
245342986c7c4499be68191ecca3bfb2.png

总结

在这个部署环节,还有更简单的办法,可以使用IDEA中的smart tomcat插件来简化打包(打包和部署一体了)。因为IDEA社区版是没有自带Tomcat的部署功能的,这就需要使用smart tomcat插件来完成。

安装步骤如下:

1) 菜单 -> 文件 -> Settings

2) 选择 Plugins, 选择 Marketplace, 搜索 "tomcat", 点击 "Install"
 
3) 安装完毕之后, 会提示 "重启 IDEA"
 

配置 Smart Tomcat 插件:

1) 点击右上角的 "Add Configuration"
2) 选择左侧的 "Smart Tomcat"
3) 在 Name 这一栏填写一个名字(可以随便写) ,在 Tomcat Server 这一栏选择 Tomcat 所在的目录,其他的选项不必做出修改,其中 Context Path 默认填写的值是项目名称。
4) 点击 OK 。然后右上角就变成了现在这个样子:
fa3927d8dd5a4813935cffebaae70fe8.png

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

注意:

Tomcat并不是IDEA的一部分或者说,它并不是IDEA的一个功能。在IDEA中,一点击就能运行,并且显示Tomcat的日志,这个过程其实是IDEA这个进程调用了Tomcat进程(进程创建+程序替换),IDEA把Tomcat的输出内容重定向到自己的终端窗口里面的。

c76f6546a82949aa8ca55a256f31ab42.png

 

 

 

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

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

相关文章

微信小程序开发前端基础知识

文章目录一、简介1、是什么2、为什么二、准备工作1、环境准备1.1、注册账号1.2、获取APPID1.3、开发工具2、创建微信小程序三、组件1、目录及其作用介绍2、页面操作3、view 块级元素4、<navigator>导航跳转5、scroll-view滚动6、text 行标签7、swiper 轮播8、常用表单组件…

Vue语法与标签的使用

前言&#xff1a;最近两周一直在忙于公司业务的学习&#xff0c;一直没有时间进行总结&#xff0c;作为后端开发人员来说&#xff0c;需要了解一些前端的知识&#xff0c;因此今天把最近复习的Vue的知识总结了一下&#xff0c;希望能加深总结的印象以及帮助到各位大佬。 如果有…

React 入门(超详细)

目录前言&#xff1a;一、React 简介1. 什么是 React2. React 的特点3. React 高效的原因4. React 官网5. React的主要原理6. Facebook为什么要建造React?二、React 的基本使用1. 基础代码2. 效果3. 相关 js 库4. 创建虚拟DOM的两种方式5. 虚拟DOM与真实DOM6. 虚拟DOM与真实DO…

Chrome谷歌浏览器安装与配置教程

谷歌浏览器&#xff0c;界面简洁明了、浏览速度相当快&#xff0c;浏览器中的霸主地位 1、在电脑浏览器中打开下载地址https://www.google.cn/chrome/或百度www.baidu.com搜索“chrome”&#xff0c;打开谷歌官方网站 2、进入官网后单击“下载Chrome” 如果下载之后找不到&a…

vue基于element实现动态表格

前言 大家都知道 element 表格组件的表头是静态写死的&#xff0c;我们在渲染数据时只需要将接口返回的数组动态绑定给 data 属性&#xff0c;然后再通过 prop 去对应字段项即可&#xff1b;但是静态的表头并不能满足一些特殊的使用场景&#xff0c;所以我们需要将它变成活的&a…

从0到1构建springboot web应用镜像并使用容器部署

文章目录一、生成镜像的两种方法1.1、使用commit生成镜像1.1.1、拉取Centos基础镜像1.1.2、启动Centos容器并安装Go1.1.3、commit生成新镜像1.1.4、使用新镜像验证Golang环境1.2、使用Dockerfile生成镜像二、基于Dockerfile生成一个springboot镜像2.1、准备springboot应用jar包…

Vue父子组件传值

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、Vue父子传值的方法二、方法详解1.props / $emit2.$parent / children3.$ref总结前言 例如&#xff1a;Vue的学习是路阻且艰的&#xff0c;这是一个系列文章…

微信小程序 | 人脸识别的最终解决方案

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --(这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; &…

Cookie 和 Session的区别

文章目录时间&#xff1a;2023年3月23日第一&#xff1a;什么是 Cookie 和 Session ?什么是 Cookie什么是 Session第二&#xff1a;Cookie 和 Session 有什么不同&#xff1f;第三&#xff1a;为什么需要 Cookie 和 Session&#xff0c;他们有什么关联&#xff1f;第四&#x…

【Java基础】一个Java文件可以有多个类(外部类、内部类)

目录一、在一个Java文件中定义多个类&#xff08;外部类&#xff09;1.问题描述及解答2.总结二、在一个Java文件定义多个类&#xff08;内部类&#xff09;1.成员内部类和匿名内部类1.1 成员内部类1.2 匿名内部类2.深入理解内部类3.内部类的使用场景和好处一、在一个Java文件中…

小米商城官网(登录页,首页,详情页,我的购物车页,我的订单页,确认订单页)HTML+CSS+JS

文章目录前言一、登录页二、首页三、我的购物车页四、我的订单页五、确认订单页六、详情页七、整体结构和效果图总结前言 仿小米商城官网项目是本人实训内容&#xff0c;实训老师带着做的首页和登录页&#xff0c;本人在此基础上加入了我的购物车页&#xff0c;我的订单页&…

vue兼容ie11(@babel/polyfill、core-js@3两种方式)

Babel介绍&#xff1a; Babel是一个JavaScript编译器&#xff0c;主要用于将ECMAScript 2015代码转换为当前和旧浏览器或环境中向后兼容的JavaScript版本。要是通过核心依赖core-js2&#xff0c;主要是通过核心依赖core-js2来完成对应浏览器不支持的新的全局和实例api的添加 …

Vue2 实现图片的拖拽、缩放、旋转

本文是基于vue2 实现图片的拖拽、旋转、鼠标滚动放大缩小等功能。 效果图 分步骤实现 在这里看下 拖拽、旋转、缩放的几个方法 1.获取图片的实际宽高 getImgSize(url) {return new Promise((resolve, reject) > {let imgObj new Image();imgObj.src url;imgObj.onload…

插槽(slot)的基本使用

插槽&#xff08;slot&#xff09;的基本使用 一、插槽的作用 在开发中&#xff0c;我们会经常封装一个个可复用的组件&#xff1a; 前面我们会通过props传递给组件一些数据&#xff0c;让组件来进行展示&#xff1b; 但是为了让这个组件具备更强的通用性&#xff0c;我们不能…

Ubuntu搭建web站点并发布公网访问【内网穿透】

文章目录前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名前言 网&#xff1a;我们通常说的是互联网&#xff1b;站…

Vue3中使用vant(踩坑日记....)

我照着视频中老师教的方式去使用vant(和官网教程一样)&#xff0c;发现样式根本不起作用&#xff08;想截个图来着&#xff0c;但是vite热更新太厉害了&#xff0c;找不到了哈哈哈&#xff09;&#xff0c;然后又反复看了视频一遍&#xff0c;检查自己插件啥的而又没有安装好&a…

【TypeScript基础】TypeScript之常用类型(上)

前言 博主主页&#x1f449;&#x1f3fb;蜡笔雏田学代码 专栏链接&#x1f449;&#x1f3fb;【TypeScript专栏】 上篇文章大概了解了一下TypeScript&#xff0c;&#x1f449;&#x1f3fb;详细内容请阅读【TypeScript介绍】一文带你初步了解TypeScript 今天开始学习学习Type…

html实现用户注册页面(生日实现年月日的三级联动)

注册页面 期待效果如下&#xff1a; 初始代码实现&#xff1a; <!DOCTYPE html> <html> <head><title>注册页面</title> </head> <body> <!-- 表单&#xff0c;用于提交按钮&#xff0c;隐式提交 --> <form action"…

后台管理系统 - 页面布局设计

前端的中后台管理系统相比于其他普通项目&#xff0c;从开发设计的角度来说有几点比较特殊&#xff1a; 一个是权限设计&#xff0c;具体实现可参考&#xff1a;传送门。一个是页面布局的设计&#xff0c;也是本文要说的。一个好的页面布局设计&#xff0c;无论是对于页面结构…

Java Web实现登录注册(超详细附代码)

Java Web实现登录注册&#xff08;超详细附代码&#xff09; 文章目录Java Web实现登录注册&#xff08;超详细附代码&#xff09;1.前言2.登录注册设计流程3.注册的数据流程4.登录的数据流程5.部分代码的展示5.1注册5.2登录6.总结1.前言 相信刚学Javaweb的小伙伴第一个接触的…