Servlet(2)

文章目录

  • 更方便的部署方式
    • 安装 Smart Tomcat 插件
    • 配置 Smart Tomcat 插件
  • 访问出错怎么办
    • 出现 404
    • 出现 405
    • 出现 500
    • 出现 "空白页面"
    • 出现 "无法访问此网站"
  • 小结

更方便的部署方式

手动拷贝 war 包到 Tomcat 的过程比较麻烦. 我们还有更方便的办法.
此处我们使用 IDEA 中的 Smart 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 默认填写的值是项目名称.在这里插入图片描述这会影响到后面咱们的访问页面.

  1. 点击 OK 之后, 右上角变成了
    在这里插入图片描述
    点击绿色的三角号, IDEA 就会自动进行编译, 部署, 启动 Tomcat 的过程
    在这里插入图片描述
    此时 Tomcat 日志就会输出在 IDEA 的控制台中, 可以看到现在就不再乱码了.

  2. 访问页面.
    在浏览器中使用 http://127.0.0.1:8080/ServletHelloWorld/hello 访问页面.
    在这里插入图片描述

注意路径的对应关系
在这里插入图片描述
使用 Smart Tomcat 部署的时候, 我们发现 Tomcat 的 webapps 内部并没有被拷贝一个 war 包,也没有看到解压缩的内容.
Smart Tomcat 相当于是在 Tomcat 启动的时候直接引用了项目中的 webapp 和 target 目录.
在这里插入图片描述

访问出错怎么办

出现 404

404 表示用户访问的资源不存在. 大概率是 URL 的路径写的不正确.
错误实例1: 少写了 Context Path
通过 /hello 访问服务器
在这里插入图片描述
错误实例2: 少写了 Servlet Path
通过 /ServletHelloWorld 访问服务器
在这里插入图片描述
错误实例3: Servlet Path 写的和 URL 不匹配
修改 @WebServlet 注解的路径
在这里插入图片描述
重启 Tomcat 服务器.
URL 中的路径写作 “/hello” , 而代码中写作的 Servlet Path 为 “/helloServlet”, 两者不匹配.
在这里插入图片描述
错误实例4: web.xml 写错了
清除 web.xml 中的内容
在这里插入图片描述
重启 Tomcat 服务器.
通过浏览器访问 URL, 可以看到:
在这里插入图片描述

出现 405

405 表示对应的 HTTP 请求方法没有实现.
错误实例: 没有实现 doGet 方法.

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
}

重启 Tomcat 服务器.
在浏览器中访问, 可以看到
在这里插入图片描述
在浏览器地址栏直接输入 URL , 会发送一个 HTTP GET 请求.
此时就会根据 /ServletHelloWorld/hello 这个路径找到 HelloServlet 这个类. 并且尝试调用HelloServlet 的 doGet 方法.
但是如果没有实现 doGet 方法, 就会出现上述现象

出现 500

往往是 Servlet 代码中抛出异常导致的.
错误实例:
修改代码

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String s = null;
resp.getWriter().write(s.length());
}
}

重启 Tomcat 服务器.
重新访问页面, 可以看到:
在这里插入图片描述
在页面上已经有具体的异常调用栈.

异常信息里已经提示了出现异常的代码是 HelloServlet.java 的第 13 行.
resp.getWriter().write(s.length());
仔细检查这里的代码就可以看到空指针异常.

出现 “空白页面”

错误实例:
修改代码, 去掉 resp.getWritter().write() 操作

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("hello");
}
}

重启服务器,
访问服务器, 可以看到一个空白页面
在这里插入图片描述
抓包可以看到, 响应 body 中的内容就是 “空数据”

出现 “无法访问此网站”

一般是 Tomcat 启动就失败了.
错误实例: Servlet Path 写错了
在这里插入图片描述
应该写作 “/hello”, Tomcat 在启动的时候已经提示了相关的错误.
Tomcat 启动的日志里面报错信息可能比较多, 需要耐心观察, 找到关键的提示

看到的现象
在这里插入图片描述

小结

初学 Servlet, 遇到的这类问题会非常多. 我们不光要学习 Servlet 代码的基本写法, 也要学习排查错误的思路.
程序猿调试 BUG 如同医生诊病.
一个有经验的程序猿和一个新手程序猿相比, 最大的优势往往不是代码写的多好, 而是调试效率有多高. 同一个问题可能新手花了几天都无法解决的, 但是有经验的程序猿可能几分钟就搞定了.

熟悉 HTTP 协议能够让我们调试问题事半功倍.

  1. 4xx 的状态码表示路径不存在, 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及Servlet Path 是否一致.
  2. 5xx 的状态码表示服务器出现错误, 往往需要观察页面提示的内容和 Tomcat 自身的日志, 观察是否存在报错.
  3. 出现连接失败往往意味着 Tomcat 没有正确启动, 也需要观察 Tomcat 的自身日志是否有错误提示.
  4. 空白页面这种情况则需要我们使用抓包工具来分析 HTTP 请求响应的具体交互过程.
    观察日志是调试程序的重要途径. Tomcat 的日志往往很多, 需要耐心阅读, 经常阅读, 熟练了就能更快速的找到问题了.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法——排序算法

目录 1、冒泡排序 2、插入排序 3、选择排序 4、归并排序 5、快速排序 6、堆排序 7、计数排序 8、桶排序 9、基数排序 常见的排序算法包括: 冒泡排序(Bubble Sort)插入排序(Insertion Sort)选择排序(Se…

2023年海南房地产经纪机构备案需要具备哪些条件?

房地产业在海南占有非常重要的地位。 同样,海南也有很多房地产中介机构。 那么,2023年海南房产中介登记证如何办理呢? 海南房产中介注册需要什么条件? 办理海南房产中介机构登记需要提交哪些材料? ……今天博宇会计小编…

神经网络系列---归一化

文章目录 归一化批量归一化预测阶段 测试阶段γ和β(注意)举例 层归一化前向传播反向传播 归一化 批量归一化 (Batch Normalization)在训练过程中的数学公式可以概括如下: 给定一个小批量数据 B { x 1 , x 2 , … …

读人工不智能:计算机如何误解世界笔记02_Hello,world

1. Hello,world 1.1. “Hello,world”是布赖恩克尼汉和丹尼斯里奇于1978年出版的经典著作《C程序设计语言》中的第一个编程项目 1.2. 贝尔实验室可以说是现代计算机科学界中的智库,地位好比巧克力界的好时巧克力 1.3. 计算机科学界的大量创…

【大厂AI课学习笔记NO.53】2.3深度学习开发任务实例(6)数据采集

这个系列写了53期了,很多朋友收藏,看来还是觉得有用。 后续我会把相关的内容,再次整理,做成一个人工智能专辑。 今天学习到了数据采集的环节。 这里有个问题,数据准备包括什么,还记得吗? 数…

Linux之ACL权限chmod命令

一. chmod命令 chmod命令来自英文词组change mode的缩写,其功能是改变文件或目录权限的命令。默认只有文件的所有者和管理员可以设置文件权限,普通用户只能管理自己文件的权限属性。 设置权限时可以使用数字法,亦可使用字母表达式&#xff0…

2.5G/5G/10G高速率网络变压器(网络隔离变压器)产品介绍(1)

Hqst华轩盛(石门盈盛)电子导读:高速率/2.5G 的带POE插件(DIP)款千兆双口网络变压器2G54801DP特点 一 ﹑2.5G高速率网络变压器(网络隔离变压器):2G54801DP外观与尺寸 2G54801DP这颗产品尺寸为:长…

Vue.js+SpringBoot开发超市商品管理系统

目录 一、摘要1.1 简介1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 超市区域模块2.3 超市货架模块2.4 商品类型模块2.5 商品档案模块 三、系统设计3.1 用例图3.2 时序图3.3 类图3.4 E-R图 四、系统实现4.1 登录4.2 注册4.3 主页4.4 超市区域管理4.5 超市货架管理4.6 商品类型…

C语言——结构体——(第21篇)

坚持就是胜利 文章目录 一、结构体类型的声明1、结构的基础知识2、结构的声明3、结构成员的类型 二、结构体变量的定义和初始化结构体中包含结构体 三、结构体成员访问问题一:t.name "张三",对吗?问题二:set_Stu(s);应…

【深度学习目标检测】十九、基于深度学习的芒果计数分割系统-含数据集、GUI和源码(python,yolov8)

使用深度学习算法检测芒果具有显著的优势和应用价值。以下是几个主要原因: 特征学习的能力:深度学习,特别是卷积神经网络(CNN),能够从大量的芒果图像中自动学习和提取特征。这些特征可能是传统方法难以手动…

数学建模资料分享

1. 往年各赛题的优秀论文 可以用来参考一下论文是怎么写的。参考论文的结构,格式,思路等等。 链接:https://pan.baidu.com/s/1WG2t4-x9MjtaSgkq4ue5AQ?pwdnlzx 提取码:nlzx --来自百度网盘超级会员V4的分享 2.论文模板 链接&a…

操作系统访问控制机制

使用访问控制技术,可以设置用户对系统资源的访问权限,即限定用户只能访问允许访问的资源。访问控制还可以通过设置文件的属性,来保护文件只能被读而不能被修改,或只允许核准的用户对其进行修改等。 1.1 保护域 把一个进程能对某…

记录一次xpclr检测中报错(“No permission to write in the specified directory: {0}“)

这里写自定义目录标题 报错修正思路:将 -O参数修改成为相对目录加文件名称格式。 报错 看到这个问题,一头雾水,没有写入权限。结果是程序问题。 修正思路:将 -O’参数修改成为相对目录加文件名称格式。 代码:

软件实例,物流货运配货单打印模板软件单据打印查询管理系统软件教程,可以同时打印标签或补打

软件实例,物流货运配货单打印模板软件单据打印查询管理系统软件教程,可以同时打印标签或补打 一、前言 以下软件教程以 佳易王物流单打印查询系统V17.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 这个版本在原来基…

linux之JAVA环境配置Tomcat离线安装与启动

文章目录 一、jdk安装具体步骤二、tomcat安装具体步骤三、MySql具体步骤修改密码登录 四、部署单价项目具体步骤 一、jdk安装具体步骤 1、查询是否有jdk java -version 2、进入opt目录 cd /opt 3.连接服务器工具 进入opt目录,把压缩文件上传 4.等待传好之后&am…

二分算法(c++版)

二分的本质是什么? 很多人会认为单调性是二分的本质,但其实其本质并非单调性,只是说,有单调性的可以进行二分,但是有些题目没有单调性我们也可以进行二分。其本质其实是一个边界问题,给定一个条件&#xf…

【flutter】环境安装

安装flutter sdk 下载sdk flutter sdk就包含dart,所以我们只用安装flutter sdk就可以了。 我们去清华大学开源软件镜像站下载,flutter开发中,版本对不上基本项目就跑步起来,如果是团队协同开发的话,建议统一下载指定版…

【踩坑】PyTorch中指定GPU不生效和GPU编号不一致问题

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 指定GPU不生效问题 解释:就是使用os.environ["CUDA_VISIBLE_DEVICES"] "1"后,后面使用起来仍然是cuda0. 解决:在最开头就使用 import os os.environ[&…

python-mysql协程并发常用操作封装

目录 前言封装代码测试代码参考 前言 协程异步操作MYSQL是常用的,博主这里在GitHub上找了两个包,databases和aiomysql,第一个包除了mysql外还支持其他的数据库,且操作MYSQL时底层也是使用的aiomysql,但文档内容比较少…

【大数据】Flink 内存管理(三):TaskManager 内存分配(理论篇)

Flink 内存管理(三):TaskManager 内存分配 1.配置 Total Memory2.配置 Heap and Managed Memory2.1 Task (Operator) Heap Memory2.2 Managed Memory 3.配置 Off-Heap Memory(Direct or Native)4.详细内存模型5.Framew…
最新文章