【Java】Tomcat、Maven以及Servlet的基本使用

news2024/11/19 1:37:54

  • Tomcat
    • 什么是Tomcat
    • Tomcat的目录结构
    • 启动Tomcat
  • Maven
    • Maven依赖管理流程
    • 配置镜像源
  • Servlet
    • 主要工作
    • 实现Servlet
      • 添加依赖
      • 实现
      • 打包
      • 分析
    • 配置插件

Tomcat

什么是Tomcat

Tomcat 是一个 HTTP 服务器。前面我们已经学习了 HTTP 协议, 知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式。HTTP 服务器可以通过 Java Socket 来实现,而 Tomcat 就是基于 Java 实现的一个开源免费, 也是被广泛使用的 HTTP 服务器。

Tomcat的目录结构

在这里插入图片描述
其中最关注的目录就是 webapps 目录。web applications 的简称, 意思是用来存放 web 应用的文件夹。 "web 应用"就是一个具有独立完整功能的 “网站”, 我们就可以称为一个 “web 应用”。
例如搜狗搜索实现了独立完整的 “搜索引擎功能”, 淘宝网 实现了独立完整的 “电商功能” 。
一个 Tomcat 服务器上是可以同时部署多个这样的 web 应用的。这些 web 应用以目录的形式被放到 webapps 目录中。

启动Tomcat

在 bin 目录中, 双击 startup.bat 即可启动 Tomcat 服务器。然后在浏览器中输入 127.0.0.1:8080 即可看到 Tomcat 的默认欢迎页面。
在这里插入图片描述

Maven

什么是Maven?
Maven 是一个项目构建工具,创建的项目只要遵循 Maven 规范 (称为Maven项目),即可使用Maven 来进行: 管理 jar 包、编译项目,打包项目等功能。
为什么学习 Servlet 之前要学 Maven?
因为 Servlet 是框架,要使用 Maven 进行iar 包管理和项目打包和发布。

Maven依赖管理流程

在这里插入图片描述

配置镜像源

在配置Maven的settings文件时,主要是需要配置国内镜像源。
在这里插入图片描述

Servlet

Servlet 是 Tomcat 这个 HTTP 服务器提供给 Java 的一组 API, 来完成构建动态页面这个任务。

主要工作

1.建立连接:客户端和程序的连接(当用户输入了请求URL之后,程序能够感知到用户的请求);
2.获取用户请求参数:处理request对象
3.将服务器处理结果返回给客户端:返回response对象

实现Servlet

添加依赖

新建空项目之后,在pom.xml中添加Servlet依赖。

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

其中,groupId表示组织Id,artifactId表示项目Id,version表示版本号,scope表示作用域。
作用域的类型:
compile: 默认作用域,在编译、运行、测试时均有效
provided: 在编译、测试时有效,但是在运行时无效。意味着打包的时候可以不用包进去,别的设施(WebContainer)会提供。
runtime: 在运行、测试时有效,但是在编译代码时无效。
test: 只在测试时有效,包括测试代码的编译,执行。例如: JUnit.
system: 在编译、测试时有效,但是在运行时无效。
这里的作用域是provided,也就是在运行时无效,此时用的是Tomcat内置的一套Servlet Api
blog.csdnimg.cn/df81764ea1174a64b049576c2f0cd708.png#pic_center)

实现

1.创建webapp目录。在 main 目录下, 和 java 目录并列, 创建一个 webapp 目录 (注意, 不是 webapps)
2.创建 web.xml。然后在 webapp 目录内部创建一个 WEB-INF 目录, 并创建一个 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 中的动态资源。

代码实现:

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取前端对象
        String name = req.getParameter("name");
        //将结果返回给前端
        resp.getWriter().println("name=" + name);
    }
}

• 创建一个类 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 写回给浏览器。

打包

将程序打包放在Tomcat中运行。
使用 maven 进行打包。 打开 maven 窗口 (一般在 IDEA 右侧就可以看到 Maven 窗口) ,然后展开 Lifecycle , 双击 package 即可进行打包,得到一个.jar后缀的包。
在这里插入图片描述
在这里插入图片描述

但此时这样的 jar 包并不是我们需要的, Tomcat 需要识别的是另外一种 war 包格式,而且这个包的名字太复杂。此时需要在pom.xml文件中在新增一个 packing 标签, 表示打包的方式是打一个 war 包。还可以再新增一个 build 标签, 内置一个 finalName 标签, 表示打出的 war 包的名字是ServletHelloWorld。

    <packaging>war</packaging>
    <build>
        <finalName>ServletHelloWorld</finalName>
    </build>

在这里插入图片描述

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

将打包好的Servlet项目放在前面提到的Tomcat的webapps的根目录下才能正常运行。
在这里插入图片描述
此时双击Tomcat的bin目录下的statup.bat文件启动Tomcat,在浏览器中输入localhost:8080/ServletHelloWorld/hello,这样就简单实现了一个Servlet项目。注意,这里必须要输入完整的地址,ServletHelloWorld表示content-path,这里我以war包的名字命名,hello表示代码中的注解地址。

在这里插入图片描述

在这里可以发现,整个代码不是通过 main 方法作为入口了。main 方法已经被包含在 Tomcat 里, 我们写的代码会被Tomcat 在合适的时机调用起来。此时写的代码并不是一个完整的程序, 而是 Tomcat 这个程序的一小部分逻辑。
那随便写个类都能被 Tomcat 调用嘛? 满足啥样条件才能被调用呢?
主要满足三个条件:
a) 创建的类需要继承自 HttpServlet
b) 这个类需要使用 @WebServlet 注解关联上一个 HTTP 的路径
c) 这个类需要实现 doXXX 方法.
当这三个条件都满足之后, Tomcat 就可以找到这个类, 并且在合适的时机进行调用。

分析

通过开发者工具,可以看见通过浏览器访问的时候默认的是GET请求。
在这里插入图片描述
此时不能发送POST请求。我们使用postman发送POST请求来模拟接口。
Postman的使用:
在这里插入图片描述
当发送GET请求时:
在这里插入图片描述

而当发送post请求时,出现错误。
在这里插入图片描述
进而说明通过浏览器(URL)时默认GET请求。那如何让他支持post该怎么做呢?继续重写doPost方法。然后打包新程序,停止之前的Tomcat服务,将新程序的war包放到tomcat的webapps下,再启动tomcat服务

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取前端对象
        String name = req.getParameter("name");
        //将结果返回给前端
        resp.getWriter().println("name=" + name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //将请求转发到doGet方法中。
        this.doGet(req,resp);
    }
}

在这里插入图片描述

配置插件

上述整个流程中,每次更改程序之后都要重新打包,然后将其放在tomcat的目录下,非常不方便,我们需要一种方便的部署方式。可以通过下载smart Tomcat插件并重启IDEA(专业版忽略)。
在这里插入图片描述

设置好配置信息
在这里插入图片描述
将运行出的链接粘贴到浏览器并指定自己的注解即可。
在这里插入图片描述


继续加油~
在这里插入图片描述

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

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

相关文章

Storage、正则表达式

1 LocalStorage 2 SessionStorage 3 正则表达式的使用 4 正则表达式常见规则 5 正则练习-歌词解析 6 正则练习-日期格式化 Storage-Storage的基本操作 // storage基本使用// 1.token的操作let token localStorage.getItem("token")if (!token) {console.log(&q…

海洋水质参数提取

目录 1数据预处理 2 水色参数反演 第一步整理采样点 第二步获取采样星上数据 第三步模型参数反演 第四步叶绿素反演 1数据预处理 第一步安装自定义扩展工具。本节中使用两个自定义扩展工具&#xff1a;ENⅥ_HJ1A1B_Tools.sav&#xff0c;用于环境一号卫星数据读取、辐射定标和波…

《数学模型(第五版)》学习笔记(2)第3章 简单的优化模型 第4章 数学规划模型

第3章 简单的优化模型 关键词&#xff1a;简单优化 微分法 建模思想 本章与第4章连续两章都是优化、规划的问题&#xff0c;可以看成一类问题——内容上也是由简单到复杂。在第3章中&#xff0c;主要是几个简单的优化模型&#xff0c;可以归结到函数极值问题来求解&#xff0…

MySql 数据空洞

大家在使用MySQL数据库的时候经常会发现新建的数据库及表用起来非常的流畅&#xff0c;但是当数据库使用一段时间后&#xff0c;随着数据量的增大再进行数据操作时经常会出现卡顿的现象&#xff0c;哪怕你的表中只有几十条数据也会出现查询时间过长的问题。 下图就是对一张表的…

如何修改电脑中图片的分辨率及DPI提高方法?

​当我们需要上传电子证件照到一些网上报名考试平台时&#xff0c;可能会发现这些平台对于电子证件照的分辨率有一定的限制&#xff0c;那么怎么改图片分辨率&#xff08;https://www.yasuotu.com/dpi&#xff09;呢&#xff1f;想要提高图片dpi可以使用压缩图的修改图片分辨率…

CocosCreator 之翻页容器(PageView)和滚动容器(ScrollView)的触摸冲突处理

来自博客 在开发的时候,我们需要一个既能翻页又能上下滑动的界面,这时候就会遇到翻页容器和滚动容器触摸冲突的情况。以下是博主这里的解决方法。 ScrollView和PageView层级关系如下: 在不做任何处理前,在ScrollView区域(上图白色区域)滑动,ScrollView可以正常上下滑动…

成功解决wget下载报错 : wget HTTP request sent, awaiting response... 403 Forbidden

成功解决wget下载报错 : wget HTTP request sent, awaiting response... 403 Forbidden 问题描述解决方案原理什么是User Agent解决 问题描述 –2023-07-15 02:32:57-- https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.03-Linux-x86_64.sh Resolving mi…

设计模式——状态模式

状态模式 定义 当一个对象内在的状态改变时&#xff0c;允许其改变行为&#xff0c;这个对象看似改变了其类 状态模式的核心是封装&#xff0c;状态的变更引起行为的变更&#xff0c;从外部看来就好像这个对象对应的类发生了变化一样。 优缺点、应用场景 优点 结构清晰。…

MiniGPT4系列之三模型推理 (Web UI):在RTX-3090 Ubuntu服务器推理

MiniGPT4系列之一部署篇&#xff1a;在RTX-3090 Ubuntu服务器部署步骤详解_seaside2003的博客-CSDN博客 MiniGPT4系列之二推理篇&#xff1a;在RTX-3090 Ubuntu服务器推理详解_seaside2003的博客-CSDN博客 MiniGPT4系列之三模型推理 (Web UI)&#xff1a;在RTX-3090 Ubuntu服…

华为OD机试真题 Java 实现【红黑图】【2023Q1 200分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、补充说明五、解题思路六、Java算法源码七、效果展示1、输入2、输出 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&…

百度留痕是什么方法排名的

百度留痕是什么方法排名的,黑帽seo教学&#xff1a;谷歌外推搜索留痕关键词秒收录排名软件技术培训 #外推留痕 #黑帽seo #黑帽seo培训 今天给大家看一个百度留痕的一个链接&#xff0c;东西也很简单&#xff0c;其实就是前面的一个地址加后面的一个你的联系方式&#xff0c;你…

三菱plc以太网连接电脑步骤

大家好&#xff0c;今天要和大家分享一个在生产管理系统中的常见问题&#xff1a;如何更方便地上位机访问PLC。我们知道&#xff0c;三菱FX系列PLC好多型号常常不带网口&#xff0c;这给上位机访问带来了不小的麻烦。但是&#xff0c;通过一款名为捷米特JM-ETH-FX的转换器&…

全程干货不愧是Alibaba总结的《Java面试权威指南泰山版》。

随着Java这个行业的兴起&#xff0c;薪资成功的吸引了一大批人&#xff0c;不管是在家待业的、对自己现在工作不满意的、大学选错专业的、缺钱的、想自己学的等等这些人绝大部分都是选择了去学习Java&#xff0c;然后就导致现在培训结构大量的流水线化&#xff0c;带着你走完一…

前端性能优化---样式计算

理论 样式计算 第一步&#xff0c;匹配一系列的样式选择器 第二步&#xff0c;取出所有匹配后的样式规则&#xff0c;构造RenderStyle 步骤 我们的解决思路是 减少样式计算的相互作用&#xff0c;即样式重新计算 什么是 Recalculate Style&#xff1f;在浏览器每一帧的渲染流…

详解c++---c++11(下)

目录标题 default关键字delete关键字lambda表达式为什么会有lambda表达式lambda的用法多线程和lambdalambda的底层 可变参数模板emplace包装器为什么会有包装器包装器的使用 bind default关键字 C11可以让你更好的控制要使用的默认函数。假设你要使用某个默认的函数&#xff0…

【搜索引擎】提高Apache Solr 性能

这是一个关于我们如何设法克服搜索和相关性堆栈的稳定性和性能问题的简短故事。 语境 在过去的 10 个月里&#xff0c;我很高兴与个性化和相关性团队合作。我们负责根据排名和机器学习向用户提供“个性化和相关的内容”。我们通过一组提供三个公共端点的微服务来做到这一点&…

【docker】它们之间如何通信和阻止,以及容器的基本概念

此篇文章主要是简单讲解&#xff0c;docker之间的通信方式以及和如何阻止docker之间的通信 目录 1、如何docker通信1.1、网络连接1.2、链接&#xff08;Linking&#xff09;1.3、共享数据卷&#xff08;Shared Volumes&#xff09;1.4、服务发现和负载均衡 2、阻止docker通信2.…

微信公众号搭建内网穿透骨灰级教程

微信公众号是我们日常使用的小工具&#xff0c;很多企业都会去申请微信公众号&#xff0c;但为了及时获取推送消息&#xff0c;需要开发者自己去调用微信公共号接口进行功能扩展和对接&#xff0c; 接下来演示如何使用神卓互联内网穿透服务来生成公网访问地址&#xff0c;以便…

【运维工程师学习五】数据库之MariaDB

【运维工程师学习五】数据库 1、常用的关系型数据库2、C/S结构3、MariaDB图形客户端4、安装MariaDB5、启动MariaDB及验证启动是否成功6、验证启动——端口7、验证启动——进程8、MariaDB配置文件路径主配置文件解读&#xff1a; 9、MariaDB的配置选项10、MariaDB客户端连接1、在…

MWeb Pro for Mac(苹果电脑最好用的Markdown编辑器)安装教程

MWeb Pro是一款专业的Mac平台上的Markdown编辑器&#xff0c;可以帮助用户更加高效地书写和排版文本内容&#xff0c;支持多种文本格式的导入和导出&#xff0c;如HTML、RTF、PDF等&#xff0c;还支持实时预览和代码高亮等功能&#xff0c;为用户提供了非常优秀的Markdown编辑体…