Servlet的两种部署方法

news2024/10/2 16:23:53

Servlet是实现动态页面的技术,是tomcat给Java提供的原生的进行web开发的api

第一个Servlet程序

写一个servlet程序,部署到tomcat上,通过浏览器访问,得到hello world字符串

1.创建项目

此处要创建的是maven项目

maven:工程管理工具

作用:规范目录结构、管理依赖、构建、打包、测试

观察项目目录:

2.引入依赖

servlet对应的jar包

<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>
<dependencies>标签是自己写上去的,这个标签是project顶级标签的子标签,如果有多个依赖,都往这个标签里依次粘贴即可。

进行到这里,另外一种创建的方式

同样的引入依赖的方法也会变化,这次可以直接在重新新创建的项目中找到<dependencies>

在里面添加我们的关于servlet-api的<dependency>

3.创建目录结构

(1)在main目录下(和Java并列)创建一个webapp目录

(2)在webapp下创建一个WEB-INF目录

(3)在WEB-INF目录下创建web.xml文件

(4)给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>

粘贴进去固定的这串代码后发现URI未识别

把报红部分添加进去即可

这段内容是固定的,直接复制粘贴即可。

4.编写代码

一个servlet类对应一个路径

这里的HelloServlet类继承HttpServlet类。在下面的代码中,只需要打出doGet方法,idea会自动生成该方法,自带的第一行super不需要,将其删掉。

这里的注解是Java中特殊的类,Java专门定义了一种“语法糖”,对一个类/方法,进行额外的解释说明。赋予这个类/方法额外的功能/含义。此处的@WebServlet作用是把当前的类和一个HTTP请求的路径关联起来。

5.打包程序

把程序编译好(得到一些.class文件)

在把这些.class文件打印成一个压缩包(比如jar包)

此处打包成war包,war包,war是tomcat专属的用来描述webapp的程序

一个war包就是一个webapp

打包完成后,包会生成在target目录

默认情况是jar包,需要调整成war包。

6.部署程序

把打包好的war拷贝到tomcat的webapps目录中即可

7.验证

打开浏览器,输入url,访问写好的代码。

总结:

在浏览器地址栏输入url后,浏览器就构造了一个HTTP GET请求,发送给了tomcat,tomcat根据一级路径确定具体的webapp,根据二级路径,确定了调用哪个类。GET/POST方法确定调用HelloServlet的哪个方法。

用Smart tomcat部署程序

上述过程可以简化(打包和部署程序的过程),使用idea的tomcat插件自动打包部署。

插件:对现有功能进行扩展

下载插件

配置插件

运行

再次点击运行,运行成功:

浏览器访问,结果和上面手动打包得到的结果一样。

工作原理:smart tomcat没有自动打包war包、拷贝war包、解压缩war包,而是指定了另一个特定的webapp目录,tomcat去加载这个webapp运行。(注意:smart tomcat部署直接访问到当前要访问的项目路径,所以看不见欢迎页面;手动war包的方式部署,路径是war包名)

可能出现的问题

404:找不到页面/未被允许访问页面

原因:路径写错;webapp部署错误(文件名、路径、位置错误,web.xml内容错误)

405:方法没有实现

原因:方法写错、没写;super代码没有删干净

500:代码抛出异常,日志中会显示哪行代码出错

出现空白页:代码里面没有写resp.getWriter.write()

无法访问此网站:tomcat未启动

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

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

相关文章

重磅官宣 | 第二届 OpenHarmony 技术峰会,邀您共启智联未来

"下一个技术未来在哪里&#xff1f;" 11 月 4 日 技术大咖齐聚北京为你解答 一场主论坛八大开源领域分论坛 探究终端操作系统十大技术挑战方向 与全球开源操作系统技术领袖、实践专家、一线导师携手 共绘 OpenHarmony 开源生态璀璨星图&#xff01; 点击链接&…

解决:无法打开Zotero数据库

在实验室电脑上面下载了Zotero和坚果云&#xff0c;一系列操作下来&#xff0c;我的笔记本上无法打开Zotero数据库了&#xff01;显示下面的界面&#xff1a; 于是网上找解决方法 1.https://www.zhihu.com/question/519740718 2.https://devpress.csdn.net/awstech/64e7311b…

Vue ref属性

Vue中的ref属性可以用来对HTML元素或者是对组件进行唯一标识。 一、设置ref属性 只需要在元素或者是组件后跟上如下语法即可&#xff1a; ref"标识名" 二、获取元素或对象 我们可以用如下方法获取我们设置ref的元素或组件&#xff1a; this.$refs.标识名 第一个输…

对批改网禁止复制粘贴问题的破解

首先进入到作文页面 右击鼠标显示弹窗选择检查 点击左上角图标 之后鼠标点击作文框&#xff0c;检查框会跳转到文本 点击鼠标右键选择文本&#xff0c;并选择编辑为HTML 在文本内写入内容点击空白处退出即可

JAVA设计模式全解(独家AI解析)

JAVA设计模式全解&#xff08;独家AI解析&#xff09; 一、JAVA介绍二、JAVA设计模式六大原则三、JAVA设计模式介绍四、JAVA设计模式详解4.1 单例模式4.1.1 懒汉式&#xff08;Lazy Initialization&#xff09;4.1.2 饿汉式&#xff08;Lazy Initialization&#xff09; 4.2 代…

Java中获取异常栈中的底层异常信息-分析Java异常栈

Java中获取异常栈中的底层异常信息-分析Java异常栈 首先&#xff0c;我们准备好一个多层异常栈堆叠的示例代码&#xff1a; public class ExceptionUtils {public static void main(String[] args) {try {buildMultiLayerExceptionStack();} catch (Exception e) {e.printSt…

RHCE---shell 条件测试

文章目录 目录 文章目录 前言 一.条件测试 概述&#xff1a; 文件测试 整数测试&#xff1a; 总结 前言 当我们完成某一命令的编写时&#xff0c;除了观察输出的内容&#xff0c;我们又如何得知命令是否执行成功呢&#xff1f; 这里&#xff0c;我们需要用到条件测试 一.条…

SEO内链优化的8个终极策略

网站SEO优化主要分为两个大类&#xff0c;一类是站外优化&#xff0c;另一类是站内优化。站内优化的内链建设优化是SEO优化工作的重中之重&#xff0c;可以视为网站内部的内功修炼之一。本文将介绍什么是内链以及如何通过内链优化来提升SEO排名。 什么是内链&#xff1f; 内链…

ArrayList与List的层级关系及ArrayList解析

List与ArrayList的关系 List List是一个接口&#xff0c;不能直接实例化。如果要使用必须去实例化List的实现类——ArrayList和LinkedList站在数据结构的角度看&#xff0c;List就是一个线性表。常见的线性表&#xff1a;顺序表、链表、栈、队列等 线性表 线性表是n个具有相…

解决SpringBoot整合Activiti引用JPA:缺少javax.persistence.EntityManagerFactory

系统接入工作流Activiti的时候&#xff0c;发现activiti初始化表&#xff0c;操作数据库使用的是jpa,我们这里解决办法就是引入spring-data-jpa-starter自动配置EntityManagerFactory。 首先把工作流sql文件执行 基础依赖jar引入 这里忽略Activiti的基础依赖&#xff0c;以下…

什么是云原生?土生土长?

“云原生”&#xff08;Cloud Native&#xff09;是一种构建和运行应用程序的方法&#xff0c;这种方法充分利用了云计算的优势。云原生应用程序是为云环境设计的&#xff0c;通常是在容器中运行&#xff0c;并被设计为在微服务架构中运行&#xff0c;这使得它们能够快速扩展和…

进公司第二天:绿盾+TFS拉取代码

1.配置绿盾 绿盾&#xff1a;一种安全软件 遇到的问题 TFS端口号&#xff1a;192.168.3.231 服务端口号&#xff1a;默认&#xff08;千万别瞎写啥的&#xff09; 2.配置TFS拉取代码 TFS利用插件 &#xff0c;输入公司给你的信息你的各种信息 拉取代码就行。 3.查看代码 —…

系统架构师备考倒计时12天(每日知识点)

1. 基于架构的软件设计&#xff08;ABSD) (ABSD方法是架构驱动&#xff0c;即强调由业务【商业】、质量和功能需求的组合驱动架构设计。ABSD方法有三个基础。第一个基础是功能的分解。在功能分解中&#xff0c;ABSD方法使用已有的基于模块的内聚和耦合技术&#xff1b;第二个基…

上位机通过Modbus转Profinet网关与变频器Modbus通讯配置案例

上位机与变频器Modbus通讯是通过Modbus转Profinet网关来实现的。这个网关可以理解为一个通信翻译器&#xff0c;负责将上位机通过Modbus协议发送的数据转换为Profinet协议&#xff0c;再通过Profinet网络与变频器进行通信。 上位机通过Modbus转Profinet网关与变频器Modbus通讯&…

一些基本图像预处理---将一个文件中的所有图片进行尺度归一化、查看每个像素的RGB值,将指定颜色切换为白色、将文件中所有图片从png到jpg的切换

目录 1.将一个文件中的所有图片进行尺度归一化 2. 查看一张图片的每个像素的RGB值 3.将指定颜色切换成其他颜色&#xff08;代码中将红色切换为白色&#xff09; 4.将一个文件中所有图片从png到jpg的切换 5.将一个文件夹中的所有图像重命名从1开始 1.将一个文件中的所有图…

java--switch语句

1.switch语句 是通过比较值来决定执行那条分支。 2.switch分支的执行流程 ①先执行表达式的值&#xff0c;再拿着这个值去与case后的值进行匹配。 ②与那个case后的值匹配为true就执行那个case块的代码&#xff0c;遇到break就跳出switch分支。 ③如果全部case后的值与之匹…

睿趣科技:抖音小店申请流程

随着移动互联网的发展&#xff0c;越来越多的人开始尝试通过开设网店来创业。抖音作为国内最受欢迎的短视频平台之一&#xff0c;也推出了自己的电商功能——抖音小店。那么&#xff0c;如何申请抖音小店呢?下面就为大家详细介绍一下抖音小店的申请流程。 首先&#xff0c;打开…

powerdesigner下载安装教程

1、什么是PowerDesigner PowerDesigner是Sybase公司的CASE工具集&#xff0c;使用它可以方便地对管理信息系统进行分析设计&#xff0c;它几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型&#xff08;ConceptualDataModel&#xff09;、…

从语言层面了解线程(std::thread)使用的里里外外

从语言层面了解线程(std::thread)使用的里里外外 使用 C标准库提供的 std::thread&#xff0c;配合 std::mutex、std::condition_variable 等工具可以很方便地编写并发程序。C标准库针对不同的操作系统中并发编程相关的系统调用做了很好的封装&#xff0c;提供了非常简洁易用的…

html iframe 框架有哪些优缺点?

目录 前言&#xff1a; 用法&#xff1a; 理解&#xff1a; 优点&#xff1a; 嵌套外部内容&#xff1a; 独立性&#xff1a; 分离安全性&#xff1a; 跨平台兼容性&#xff1a; 方便维护&#xff1a; 缺点&#xff1a; 性能开销&#xff1a; 用户体验问题&#xf…