Servlet的基本使用

news2025/8/7 9:24:12

目录

一、Servlet是什么

二、Servlet的基本使用

1、创建项目

2、引入依赖

3、创建目录

4、编写代码

5、打包程序

6、部署程序

7、验证程序

三、优化部署方式

1、安装Smart Tomcat

2、使用Smart Tomcat

四、使用Servlet时常见的错误

1、404 

2、405

3、500

4、无法访问页面

5、出现空白页面

一、Servlet是什么

Servlet是Tomcat提供给Java程序猿的一组API,用来帮助程序猿简单高效的开发webapp,构建动态页面

静态页面:内容始终固定的页面,即使访问用户不同/访问时间不同/输入的参数不同,页面的内容也不会发生变化,例如Tomcat的欢迎页面:

动态页面:和静态页面相对的页面,当访问的用户不同/访问的时间不同/输入的参数不同时,页面的内容会发生变化,例如B站的主页:

二、Servlet的基本使用

使用Servlet写一个简单的“hello world”代码需要分为以下七个步骤:

(本文以Idea2021.3.2版本为例,新版的Idea可能有所不同)

1、创建项目

(1) 打开Idea创建一个Maven项目:

(2) 选择项目要存放的目录:

(3) 项目创建成功的样子:

Maven是Idea内置的一个构建工具,可以用来编译代码、打包程序、管理依赖…… 

2、引入依赖

Servlet并不是Java标准库自带的,我们需要在刚才创建的项目中生成的pom.xml文件中引入Servlet依赖的jar包。

(1) 在Java中央仓库:Maven Repository: servlet (mvnrepository.com)搜索servlet,选择第一个结果:

(2) 选择3.1.0版本

Servlet的版本要和Tomcat的版本匹配,如果Tomcat是8.5版本,那么就需要使用Servlet3.1.0版本。

查询版本对应关系:Apache Tomcat® - Which Version Do I Want?

(3) 在pom.xml文件中创建一个<dependencies>标签:

 (4) 把中央仓库的Maven里的内容复制到<dependencies>标签中: 

修改后的pom.xml文件:

注意:如果是第一次使用maven,那么这里面的部分代码会变成红色的,maven会根据代码的内容,自动下载项目依赖的jar包到本地,下载完成后刷新一下就好了。

如果下载好之后代码还是标红,那么就需要根据报错的信息在网上搜索解决的方案。

3、创建目录

当项目创建好之后,Idea会自动生成一些目录:

其中:

src:表示源代码所在的目录;

main/java:表示业务代码的根目录,后续创建的.java文件就放在这个目录中;

main/resources:表示项目的一些资源文件所在的目录;

test/java:表示测试代码的根目录;

pom.xml:表示项目中的“阵眼”,全局配置文件,存放项目相关的配置属性。

但这些目录还不够,还需要创建一个符合Tomcat要求的目录结构:

(1) 在main目录下,创建一个webapp目录:

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

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

注意:不要把文件名写错,Tomcat要识别web.xml这个文件。

(4) 编写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、编写代码

(1) 在main/java目录下创建一个类,并继承HttpServlet类:

HttpServlet类来自于刚才通过maven下载的Servlet的jar包,如果这里的HttpServlet类标红,手动刷新一下就好了~ 

(2) 重写父类的doGet方法:

req对象是HTTP请求报文,被Tomcat解析成了一个对象;

resp对象则是Tomcat构造的一个空的对象,doGet方法会根据req里的一些数据和具体的业务逻辑来构造生成一个完整的resp对象(所以resp相当于一个“输出型参数”),然后Tomcat再把resp对象转换成HTTP响应报文。

(3) 加上@WebServlet注解

加上注解后,表示Tomcat在收到的GET请求中,找到路径为/hello的请求时才会调用Hello类中的toGet方法。

5、打包程序

我们当前写的代码中是没有main方法的,要想让代码跑起来,需要把当前代码打包起来放到Tomcat中就可以跑起来了~

(1) 点击Idea右侧的Maven按钮,展开Lifecycle,找到package选项:

(2) 双击package选项,出现BUILD SUCESS表示打包成功了:

此时左侧会生成一个target目录,里面会包含一个jar包:

但是Tomcat需要识别的是war包格式,所以我们需要重新打包出一个war包:

jar包和war包的区别:

jar包是普通的java程序打包的结果,里面会包含一些.class文件;

war包是java web的程序,除了包含.class文件外,还会包含HTML,CSS,JS,图片以及其他的jar包,打包成war包才能被Tomcat识别。

(3) 在pom.xml中新增一个<packaging>标签,表示打包的方式是war包格式:

    <packaging>war</packaging>

(4) 在pom.xml中新增一个<build>标签,内置一个<finalName>标签,表示打包出的war包名字:

    <build>
        <finalName>HelloServlet</finalName>
    </build>

完整的pom.xml文件:

(5) 重新使用maven的package打包就会生成一个war包:

6、部署程序

(1) 把刚才打包的war包拷贝到Tomcat的webapps目录下:

(2) 启动Tomcat,把war包解压缩,此时会生成一个新的目录:

7、验证程序

此时,在浏览器地址栏中输入:127.0.0.1:8080/HelloServlet/hello时就可以看到结果了:

在上面的URL中,/HelloServlet目录又称为ContextPath,/hello目录又称为ServletPath

(1) Tomcat通过ContextPath可以确定一个webapp,然后就会加载该目录下所有的类,重点识别出被@WebServlet注解的类;

(2) 然后根据ServletPath找到注解为/hello的类,找到类之后,就会创建一个类的实例(只会创建一次,如果之前创建过了,就会复用之前的实例);

(3) Tomcat再解析出HTTP请求的方法“GET”,根据HTTP请求的方法来调用类中对应的toGet方法。

GET请求调用toGer方法;POST请求调用toPost方法;PUT请求调用toPut方法……

三、优化部署方式

上述第5步和第6步操作比较繁琐,并且只要代码中有一点改动,都需要重新执行打包程序和部署程序的操作,我们可以在IDEA上安装一个Smart Tomcat插件来优化这些操作:

1、安装Smart Tomcat

(1) 打开IDEM,依次点击左上角的File、Settings:

(2) 在Settings对话框中选择Plugins、Marketplace,然后搜索smart tomcat,最后点击Install即可。

2、使用Smart Tomcat

(1) 点击右上角的Add Configurations:

(2) 在弹出的对话框中点击左上角的+号,然后选择刚才下载的Smart Tomcat:

(3) 在弹出的对话框中进行如下设置(红色框中的内容是需要修改的,其余部分不变):

(4) 点击OK之后,右上角就生成了一个运行配置:

(5) 点击右上角绿色的三角符号,就可以一键式完成打包部署操作(让IDEA调用tomcat,并加载刚才写的Servlet程序):

出现这样的页面就说明操作成功了,此时就可以打开浏览器查看程序运行结果:

 

注意:使用Smart Tomcat进行一键式打包部署操作时,需要关闭控制台的Tomcat,否则会出现下面这种错误情况:

因为控制台中运行的Tomcat已经占用了8080(业务端口)和8005(管理端口)端口号,由于同一个端口号不能被多个程序绑定,所以当我们使用Smart Tomcat调用Tomcat时就会绑定端口失败。

四、使用Servlet时常见的错误

1、404

404表示用户访问的资源不存在,如果出现404,很可能是URL写错了。

(1) 首先检查一下URL是否写错:

① 检查URL中是否写了Context Path;

 

注意:Context Path有两种情况:

(a) 如果是使用startup.bat的方式启动Tomcat(即控制台的方式),此时Context Path指的是webapps中的webapp目录名(即一开始打包的war包名)。 

(b) 如果是使用Smart Tomcat的方式启动Tomcat,此时Context Path指的是配置Smart Tomcat时手动填写的。

② 检查URL中是否写了Servlet Path;

 

③ 检查Servlet Path和@WebServlet注解中的路径是否一致;

(2) 查看web.xml文件中的内容是否写错。

如果web.xml中的内容写错了,也会出现404错误。

2、405

如果出现405,则表示对应的HTTP请求方法没有实现。

例如HTTP请求的方法是GET,但是代码中没有doGet方法:

 

(在浏览器地址栏中直接输入一个URL,就会发送一个GET请求) 

3、500

如果出现500,一般是Servlet代码中抛出了异常。

例如,修改当前doGet方法:

 重新访问页面:

页面中会提示当前代码中抛出了什么异常,以及是在哪一行抛的异常。 

4、无法访问页面

这种情况一般是Tomcat启动失败。

例如在没有运行Tomcat的情况下访问页面:

5、出现空白页面

如果出现空白页面,说明响应为空。

例如,注释掉 resp.getWriter().write("hello") 这行代码:

重新访问页面:

 

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

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

相关文章

Linux文件目录之查看篇【cat、more、less、head、tail、>、>>】【简直不要太详细】

目录cat 查看文件内容morelessecho&#xff1a;将输入内容到控制台>指令和>>指令&#xff1a; >输出重定向 &#xff0c;>>追加head:tailcat 查看文件内容 cat【选项】 【要查看的文件】 -n 显示行号 注意&#xff1a;cat只能浏览文件&#xff0c;并不能修…

第二章--应用层

2.1应用层协议原理 研发网络应用程序的核心是写出能够运行在不同的端系统和同构网络彼此通信的程序&#xff0c;将应用软件限制在端系统&#xff0c;从而促进大量的网络应用程序的迅速研发和部署。 2.1.1网络应用程序体系结构 应用程序的体系不同于网络的体系结构&#xff0c…

实验(二):单片机数据区传送程序设计

一、实验目的与任务 实验目的&#xff1a; 1. 掌握单片机C语言程序设计和调试方法&#xff1b; 2. 了解单片机RAM中的数据操作。 任务&#xff1a; 1.根据要求编写程序&#xff0c;并写出原理性注释&#xff1b; 2. 检查程序运行的结果&#xff0c;分析一下是否正确&#xff1…

leetcode 42.接雨水,leetcode 503. 下一个更大元素Ⅱ

“即使到不了远方&#xff0c;心中也要有远方的模样。” 文章目录1.leetcode 503. 下一个更大元素Ⅱ1.1 详细思路及步骤1.2 java版代码示例2.leetcode 42.接雨水2.1 详细思路及步骤2.2 java版代码示例1.leetcode 503. 下一个更大元素Ⅱ 1.1 详细思路及步骤 这题基本上和昨天总结…

GoWeb从无到有(读取配置文件、gin、gorm)

GoWeb从无到有 – 读取配置文件、gin、gorm 创建go项目&#xff0c;结构如下 1. golang读取配置文件 引入包 go get -u gopkg.in/ini.v1在main.go的同级目录创建config文件夹&#xff0c;在文件夹中创建配置文件 config.ini # 项目配置 [app] Port8010 # mysql配置 [mysql] …

C++初阶 Stack和Queue的介绍和使用

作者&#xff1a;小萌新 专栏&#xff1a;C初阶 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客介绍&#xff1a;本篇博客会简单的介绍STL中的栈和队列 本章目标 复习下栈这种数据结构特点知道怎么使用STL中的栈复习下队列这种数据结构的特点知道怎么使用STL中…

多功能螯合剂FAPI-04-NH2,FAPI04-氨基,含有DOTA配体显示出良好的药代动力学

NH2-FAPI-04产品描述&#xff1a; FAPI是FAP的特异性抑制剂。在这些FAPI中&#xff0c;含有DOTA配体(FAPI-04)的[68Ga]Ga-DOTA-FAPI-04 PET/CT能显示出良好的体内药代动力学&#xff0c;导致快速kidney​清除和注射后10分钟至3小时的低背景活性。不久之后&#xff0c;[68Ga]Ga-…

Mybatis+Mybatis-plus+SpringBoot整合(完整版)

文章目录一、Mybatis&#xff08;一&#xff09;Mybatis简介1、Mybatis历史2、Mybatis特性3、Mybatis下载4、和其它持久化层技术对比&#xff08;二&#xff09;搭建Mybatis1、MySQL不同版本的注意事项2、创建Maven工程1、引入依赖3、创建MyBatis的核心配置文件3.1、核心配置文…

SpringMVC学习笔记

目录 SpringMVC 为什么出现了SpringMVC? 什么是SpringMVC? 简单使用 SpringMVC工作流程 设置bean加载控制 在服务器启动时加载SpringConfig 后台接受五种类型参数传递 REST风格 描述 RESTful入门 新建以下目录 实体类 控制器 统一异常处理 新建Code类用于记…

c#反序列化json

语句&#xff1a;JsonConvert.DeserializeObject(json); json字符串&#xff1a; [ { "id": "130000", "cityList": [ { "cityList": [ { …

Linux root用户忘记密码的恢复方法

日常运维工作中可能会遇到服务器忘记root密码的问题&#xff0c;本次以红帽8为例&#xff0c;讲解在忘记root密码后如何绕过密码登录然后重新设置密码的办法 目录 准备工作 问题复现 启动并进入引导 进入修复模式 修改用户密码文件 重置密码 准备工作 下载与系统匹配的…

Python编程 元组的创建

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.元组知识点 二.元组(tuple) 1.元组介绍(掌握) 2.元组创建(掌握) 3.…

第十四届蓝桥杯校模拟赛-编程大题详解+代码(二)

前言&#xff1a;这几天有不少小伙伴催促我尽快更新后五道编程题题解&#xff0c;然鄙人实在水平有限&#xff0c;实事求是&#xff0c;能力不足&#xff0c;不堪众望。思索良久&#xff0c;第九题有解题思路且已完成部分解题&#xff0c;但未完全完成&#xff0c;第十题尚未有…

python 数据挖掘与机器学习核心技术

近年来&#xff0c;Python编程语言受到越来越多科研人员的喜爱&#xff0c;在多个编程语言排行榜中持续夺冠。同时&#xff0c;伴随着深度学习的快速发展&#xff0c;人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础&#xff0c;因此&#xff0c;掌握常用…

《FFmpeg Basics》中文版-11-格式之间转换

正文 ffmpeg工具的最常见用法是从一种音频或视频格式转换为另一种相关的格式。 格式参数在输出文件之前由-f选项设置&#xff0c;或者在输入文件之前也有原始输入&#xff0c;具体的可用格式信息在[显示帮助和功能]一章中列出来了。 多媒体格式介绍 文件格式 媒体格式是能够…

OpenSSH移植到Linux开发板

OpenSSH移植到Linux开发板 文章目录OpenSSH移植到Linux开发板前言一、移植zlib库二、 移植openssl库三、 移植openssh库1. 在开发板中创建目录2. 将文件拷贝到对应目录下3. 创建对应软连接4. 开发板上生成密钥文件5. 开启SSH前言 在Linux开发中&#xff0c;有时候需要远程登录…

BLE学习(2):广播包报文格式详解

文章目录1 广播通道2 广播包参考手册&#xff1a; BLUETOOTH SPECIFICATION Version 5.0为了能够充分理解蓝牙的广播&#xff0c;我们先了解一下BLE架构的GAP(Generic Access Profile)层。 GAP层提供决定蓝牙设备之间如何交互的框架&#xff0c;包括&#xff1a; 蓝牙设备的角…

PHP 底层的运行机制和工作原理

阅读目录阐述一、PHP的设计理念及特点PHP 为什么没有多线程&#xff1f;1、PHP 与多线程2、PHP是单线程&#xff0c;多进程模型3、 php为什么选择多进程&#xff0c;而不是多线程4、场景二、PHP 四层体系1、上层应用2、Sapi3、Extensions&#xff08;扩展&#xff09;4、Zend 引…

【目标检测】Fast R-CNN论文详细解读

目录&#xff1a;Fast R-CNN论文解读一、前言1. R-CNN的步骤及缺点2. SPP Net的步骤二、Fast R-CNN1. R-CNN的缺点2. SPPNet的缺点3. Fast R-CNN的优点4. Fast R-CNN的模型结构和训练流程5. 初始化预训练网络结构6. 微调7. 多任务损失函数8. ROI层的反向传播9. SGD超参数选择10…

Java后端面试到底要如何准备?

我把面试准备拆成以下几个步骤&#xff1a; 1.写简历 2.整理好自己最熟悉的项目&#xff0c;相对有代表性的项目。 3.整理自己的技术栈 4.收拾好自己的自我介绍 5.被八股文 6.模拟面试 7.针对模拟面试表现出来的问题进行改进 8.开始投投简历 本人 10 年开发经验&#…