【Java EE】-Servlet(一) 创建Maven下的webapp项目

news2024/11/23 1:53:35

作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏:【JavaEE】
分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》

主要内容:创建一个基于maven的web项目,1> 创建目录 2> 引入依赖 3> 创建目录结构 4> 编写代码 5> 打包程序 6> 部署程序 7> 验证。引入maven依赖的详细步骤、使用Smart Tomcat插件在idea内部内置Tomcat,省去打包和部署的操作!

在这里插入图片描述

文章目录

    • 1、创建目录 maven(pom.xml)
    • 2、引入依赖(servlet api jar包)
    • 3、创建目录结构
    • 4、编写代码
    • 5、打包程序
    • 6、部署程序
    • 7、验证
    • 8、总结:

1、创建目录 maven(pom.xml)

此处创建一个maven项目,用于管理工程
注意:首次创建maven项目时,需要从中央仓库加载一些 maven依赖(在页面下方读条),这个过程需要联网,由于maven仓库在国外,网络不稳定,所以可能会耗很长时间。但后续创建就好了,不会再像首次创建一样耗费很长时间。

maven是一个工程管理工具,可以:
1.规范目录结构 2.管理依赖(使用第三方库) 3.打包 4.测试…
这里这个简单例子需要用到2,3功能

在这里插入图片描述

2、引入依赖(servlet api jar包)

法一:1.直接使用本地tomcat的lib下的servlet api(在groupId标签中输入javax.servlet,然后点击提示,其它内容会自动补充)
法二:2.关于maven的文件下载地址:maven相关api下载。进入网页后搜索servlet,然后选择tomcat对应的servlet版本,然后直接复制maven的代码;然后在pom.xml中创建<dependencies>标签,在标签内粘贴 复制好的内容。

	<dependencies>
        <!--
            1.直接使用本地tomcat的lib下的servlet api
            2.servlet的jar包下载地址:https://mvnrepository.com/,可以直接粘贴出现的页面框中的内容到下面中
        -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

3、创建目录结构

在main中创建webapp目录,在webapp中创建WEB-INF目录,在WEB-INF目录中创建web.xml文件。

在这里插入图片描述

IDEA中基于maven-webapp骨架创建的web工程,默认的web.xml看下面代码,web.xml的作用是让Tomcat识别当前的 项目是webapp,并进行加载。

<!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、编写代码

写一个类继承HttpServlet,重写doGet方法,使用注解定位到该类。

理解:

  • doGet方法是由Tomcat服务器自动调用的,Tomcat收到一个get请求,就会触发doGet方法。
  • req是将TCP Socket读出来得到一个字符串,再由这个字符串按照HTTP协议解析得到的 java对象 。这个req对象的属性 和http请求报文的 格式和内容是相对应的。
  • resp是一个空的对象,程序员需要在doGet中,根据req,结合业务逻辑,往resp对象中填充内容构造出 resp对象。resp是一个输出型参数,resp构造完成后,由调用者Tomcat服务器把resp转换成字符串,再根据HTTP协议写入TCP Socket中,进行响应。

在这里插入图片描述

servlet类的doGet方法中:
1> 把内容写到服务器的控制台中:

System.out.println("hello World!");

2> 把内容写浏览器页面上:
下面代码中
第一行:在响应报文的header中标注使用text/html解析,字符集使用utf-8防止乱码。
第二行:getWriter获取一个Writer对象,这个Writer属于resp,此时执行write()方法操作是对reap的body部分进行写入,等resp整个构造完成了,Tomcat再把resp转成http报文格式,然后写入Socket中。

resp.setContentType("text/html; charset=utf-8");  
resp.getWriter().write("hello World!!!");

5、打包程序

第一步:为了打包成war包,在pom.xml文件中添加下面代码;因为默认是打包成jar包

<!--描述了打包是jar包还是war包-->
    <packaging>war</packaging>
    <build>
        <!--描述了打包的war包的名字-->
        <finalName>hello_servlet</finalName>
    </build>

第二步:点击右侧的maven,展开项目,展开LifeCycle,双击package

在这里插入图片描述

在这里插入图片描述

6、部署程序

找到war包的路径:
在这里插入图片描述

复制上述的war包,粘贴到Tomcat的webapps目录下,然后重新启动Tomcat服务器(在Tomcat的bin目录下的 startup.bat是Windows版本,startup.sh是Linux版本)

7、验证

在浏览器地址栏输入:127.0.0.1:8080/项目根路径/servlet路径(注解的内容)
项目根路径也称为第一级路径,也叫 context path/applaction path,servlet路径为第二级路径,也叫做servlet path路径。

在这里插入图片描述

8、总结:

  • 省略步骤3:使用项目模板后,后续不再需要手动创建目录结构了,但是容易出错。

  • 省略步骤5,6:打包程序和部署程序 IDEA的 Tomcat插件(Smart Tomcat),把Tomcat集成到 IDEA中,省去手动打包和部署的过程,只需运行就可自动打包和部署。
    怎么集成?File->Settings -> 查询plugins -> Smart Tomcat下载,然后重新启动服务器即可。
    怎么加到项目中?Add Configuration -> + -> Smart Tomcat,然后进行下图操作:只是首次使用需要手动配置Tomcat所在路径,以后都不需要再配路径了,只需添加即可。
    Smart Tomcat工作原理? 手动指定一个特定的webapp目录,idea直接调用Tomcat,让Tomcat加载单个webapp运行,所以没有打war包,也没有部署项目到webapps下。因为是指定单个webapp项目,所以在这里启动后,只能访问当前的webapp,而不能访问Tomcat目录下wabapps下的其它webapp。
    在这里插入图片描述

  • Address already in use: JVM_Bind错误处理:这个错误是指ip和端口被占用,因为ip都是回环ip 127.0.0.0,端口相同时,即是ip和端口相同。处理 只需将占用这个端口的进程关闭即可,具体操作如下:
    1> 打开cmd -> 输入netstat -ano | findstr 8080查找占用Tomcat默认端口8080的进程,如图进程id 10164的进程占用了 8080端口。
    在这里插入图片描述
    2> 打开任务管理器,根据进程id 10164找到占用8080端口的进程,结束该进程。再次启动服务器,错误就消失了。
    在这里插入图片描述

  • 注意点:
    404容易出现的点:1> 路径错误URL、context path、servlet path。2>部署错误 web.xml、文件名错、文件路径错误…
    405出错点:1> 没有写请求对应的方法,比如客户端发送get请求,但是服务器这边没有doGet方法。2> 默认生成的super.doGet(),没有去掉。
    500错误:抛出异常,注意看日志(相对应的启动Tomcat时,可以查看Tomcat的日志)。

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

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

相关文章

【云计算•云原生】5.云原生之初识OpenStack

文章目录 OpenStack起源OpenStack基本组件HorizonNovaSwiftCinderKeystoneNeutronGlanceCeilometerTroveHeat OpenStack简单框架模型 OpenStack起源 OpenStack是一个由NASA和Rackspace合作研发并发起的&#xff0c;以Aapache许可证授权的自由软件和开放源代码项目。为公有云及…

JS 实现区块链分布式网络

JS 实现区块链分布式网络 这里主要 JS 实现区块链 实现的部分继续下去&#xff0c;对 Blockchain 这个对象有一些修改&#xff0c;如果使用 TS 的话可能要修改对应的 interface&#xff0c;但是如果是 JS 的话就无所谓了。 需要安装的依赖有&#xff1a; express body-parse…

字节跳动ByteHouse与亚马逊云科技携手打造新一代云数仓服务

随着全球化的发展&#xff0c;越来越多的中国企业开始涉足海外市场&#xff0c;开展跨境业务。在这个过程中&#xff0c;强大的数据分析能力是出海企业不可或缺的重要一环。通过有效的数据分析&#xff0c;能帮助企业更好地了解全球市场对产品的需求便于调整产品战略&#xff0…

微服务---RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署)

RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署) 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见…

Python每日一练(20230506) 存在重复元素I、II、III

目录 1. 存在重复元素 Contains Duplicate I 2. 存在重复元素 Contains Duplicate II 3. 存在重复元素 Contains Duplicate III &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 存在重…

项目管理-数据管理能力DCMM模型

DCMM 数据管理能力成熟度评估模型简介 DCMM&#xff08;Data Management Capability Maturity Assessment Model&#xff0c;数据管理能力成熟度评估模型&#xff09;是我国首个数据管理领域国家标准&#xff0c;将组织内部数据能力划分为八个重要组成部分&#xff0c;描述了每…

重新定义座舱智能化的下半场?谁能抓住弯道超车的窗口期

2020年&#xff0c;高通8155上车之前&#xff0c;行业的定义更多是4G联网互联网生态&#xff08;智能手机的复刻&#xff09;&#xff0c;以斑马智行为代表&#xff1b;而随着集成异构计算、高性能AI引擎&#xff08;8TOPS算力&#xff09;的高通8155密集上车&#xff0c;驱动行…

车载多屏互动联动动画版本同屏幕大小情况方案设计--众筹项目

hi&#xff0c;粉丝朋友们&#xff1a; 背景及成果展示 本节带大家来开始学习多屏幕互动的动画版本设计&#xff0c;回忆一下我们已经在之前blog和wms课程中学习了多屏互动的非动画版本如下&#xff1a; 再来看看今天我们想要实现有动画版本的成果&#xff1a; 是不是相比之…

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 多维时序 …

全景环视搭载率突破30%,本土供应商在细分市场突围而出

随着行泊一体、AVP等功能成为智能驾驶赛道新周期的主角&#xff0c;背后支撑落地的全景环视&#xff08;也称为360环视&#xff09;方案也不再是传统功能定义场景&#xff08;为驾驶员提供泊车及盲区辅助&#xff09;下的应用&#xff0c;同时&#xff0c;环视与周视的硬件复用…

【Mybatis-Plus笔记01】整合Springboot实现基础配置和增删改查案例

【Mybatis-Plus笔记01】整合Springboot实现基础配置和增删改查案例 【一】Mybatis-Plus的简单介绍【1】MP的特特性有哪些【2】MP的框架结构 【二】MP的使用案例&#xff08;1&#xff09;准备开发环境&#xff08;2&#xff09;添加pom依赖&#xff08;3&#xff09;编写yml配置…

基于SpringBoot+Vue实现的体检录入系统

【简介】 本体检信息录入系统采用前端&#xff1a;vue&#xff1b;后端&#xff1a;springbootmybatis-plusredismysql技术架构开发&#xff0c;前后端分离&#xff0c;容易上手。除了基本的体检结果查询、录入及导出外&#xff0c;在录入中还能对录入信息进行智能计算。 【功…

LeetCode:20. 有效的括号

20. 有效的括号 1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果 1&#xff09;题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1…

Multi-Head self-Attention结构细节

先验知识&#xff1a; Self-Attention结构细节及计算过程https://blog.csdn.net/weixin_54039182/article/details/130515594?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22130515594%22%2C%22source%22%3A%22weixin_54039182…

分布式夺命12连问

分布式理论 1. 说说CAP原则&#xff1f; CAP原则又称CAP定理&#xff0c;指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、 Availability&#xff08;可用性&#xff09;、Partition tolerance&#xff08;分区容错性&#xff09;这3个基本…

Zotero 抓取知网文献失败解决办法梳理(针对问题:更新Translator无效,更新茉莉花插件无效,卸载Zotero无效,使用学校VPN访问知网)

Zotero 抓取知网文献失败解决办法梳理&#xff08;针对问题&#xff1a;更新Translator无效&#xff0c;更新茉莉花插件无效&#xff0c;卸载Zotero无效&#xff0c;使用学校VPN访问知网&#xff09; 问题背景解决方案一解决方案二解决方案三 说在前面&#xff1a;解决方案一和…

idea 远程debug阿里云服务器springboot项目

文章目录 前言意见和建议技术要点小试牛刀通信端口放行Idea增加remote启动项服务端JAR增加参数并启动本地项目启动远程debugpostman测试debug 前言 在实际的生产中不免会出现系统问题&#xff0c;有的在测试环境发现&#xff0c;有的在预发布环境发现&#xff0c;更有甚者在生…

播放卡顿分析

看下这个M3U8请求&#xff0c;时间间隔超过duration的时长。ts的duration是11S M3U8内容更新慢&#xff1f;

JavaScript:二叉树(前序遍历,中序遍历,后序遍历,递归法,统一迭代法)

文章目录 二叉树递归法迭代法 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09;二叉树的递归遍历递归法作图分析代码和思路分析 二叉树的迭代遍历前序遍历迭代分析代码及思路分析 94. 二叉树的中序遍历递归法作图举例递归流程 迭代法代码 145. 二叉树的后序遍历 …

虹科分享|便携式数据包捕获解决方案的发展

有人说&#xff0c;未来就在眼前。如果我们看看过去十年中开发出的物联网技术&#xff0c;我们的确没发反驳他们。21世纪的技术繁荣改变了我们的生活&#xff0c;和彼此之间的交流方式。 比如说我们正在研究的MAREA项目&#xff0c;我们甚至可以说我们正在见证历史。 这是一个…