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.mzph.cn/news/699253.shtml

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

相关文章

智慧校园的未来已来!AI与数字孪生领航教育新时代

随着科技的飞速发展,人工智能(AI)和数字孪生技术正逐渐渗透到我们生活的方方面面,而在教育领域,它们的结合更是催生出一种全新的智慧校园模式。这种模式的出现,不仅预示着教育管理方式的彻底变革&#xff0…

网络原理 - HTTP/HTTPS(5)

HTTPS HTTPS也是一个应用层协议.在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输的. 这就导致了在传输过程中出现了一些被篡改的情况. 臭名昭著的"运营商劫持" 下载一个天天动听. 未被劫持的效果,点击下载按钮,就会弹出天天动听的…

【linux】常见指令 -通配符,数据管道,重定向,压缩打包...

目录 前言 基本指令 ls命令 常见选项 ​编辑 pwd命令 cd 指令 常见选项 touch指令 mkdir指令 常见选项 rm 指令 常见选项 man指令 cp指令 常用选项: mv指令 常用选项 nano指令 如何写入且执行文件? cat指令 常用选项 more指令…

基于RK3399 Android11适配OV13850 MIPI摄像头

目录 1、原理图分析2、编写和配置设备树3、调试方法4、遇到的问题与解决5、补丁 1、原理图分析 从上图可看出,我们需要关心的,①MIPI数据和时钟接口使用的是MIPI_TX1/RX1 ②I2C使用的是I2C4总线 ③RST复位引脚使用的是GPIO2_D2 ④PWDN使用的是GPIO1_C7 ⑤…

【Python笔记-设计模式】外观模式

一、说明 外观模式是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个统一的接口。 (一) 解决问题 简化复杂系统的接口调用 (二) 使用场景 简化复杂系统:需要一个指向复杂子系统的直接接口, 且该接口的功能有限时重构复杂的代码…

unity ui界面优化

优化一个比较复杂的界面,里面有多个rt和组件。 在初次打开这个界面的时候会发生1s多的卡顿,还是非常严重的。 分析 通过profiler分析 1.打开界面时卡顿。 分析:除了update和dotween相关逻辑,主要在于打开时的lua function调用…

幻兽帕鲁(Palworld 1.4.1)私有服务器搭建(docker版)

文章目录 说明客户端安装服务器部署1Panel安装和配置docker服务初始化设置设置开机自启动设置镜像加速 游戏服务端部署游戏服务端参数可视化配置 Palworld连接服务器问题总结 说明 服务器硬件要求:Linux系统/Window系统(x86架构,armbian架构…

spring boot3登录开发-3(账密登录逻辑实现)

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 前置条件 内容简介 用户登录逻辑实现 创建交互对象 1.创建用户登录DTO 2.创建用户登录VO 创建自定义登录业务异…

如何使用ChatGPT创建一份优质简历

目录 第一步:明确目标和重点 第二步:与ChatGPT建立对话 第三步:整理生成的内容 第四步:注重行文风格 第五步:强调成就和量化结果 第六步:个性化和定制 第七步:反复修改和完善 总结 在现…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测分类效果基本描述程序设计参考资…

【软件测试】定位前后端bug总结+Web/APP测试分析

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Web测试中简单…

k8s-pod的介绍及命令行创建pod

一、 pod介绍 在kubernetes的世界中,k8s并不直接处理容器,而是使用多个容器共存的理念,这组容器就叫做pod。 pod是k8s中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,其他的资源对象…

车载测试面试:题库+项目

车载测试如何面试(面试技巧)https://blog.csdn.net/2301_79031315/article/details/136229809 入职车载测试常见面试题(附答案)https://blog.csdn.net/2301_79031315/article/details/136229946 各大车企面试题汇总(含答案&am…

Megalinter 初体验

简介 MegaLinter 是一个多语言、多工具的集成代码检查工具,它能够通过一个统一的工作流来运行多个静态代码分析工具,从而提供全面的代码质量检查。 官网:https://megalinter.io/latest/ MegaLinter 的特点: 多语言支持&#x…

Arcgis小技巧【17】——如何修改ArcGIS中影像的背景颜色

一、问题分析 在ArcGIS中,有时候会遇到影像有背景色,看上去很不美观。 尤其在多个影像叠加的时候,更是会造成遮挡的问题。 二、解决办法 首先,用【识别】工具在背景色是点击一下,查看弹出的窗口,记住背景…

新型智慧城区建设方案

智慧社区项目以改善基础设施环境为基础,以搭建社区综合服务平台为纽带,通过利用物联网、大数据技术建立覆盖社区居民生活方方面面的综合服务体系,向社区管理机构、服务机构和居民提供智能化服务,保障社区的安全,保障居…

飞行机器人专栏(十三)-- 智能优化算法之粒子群优化算法与多目标优化

一、理论基础 1.1 引言 粒子群优化算法(Particle Swarm Optimization, PSO)自1995年由Eberhart和Kennedy提出以来,已经成为解决优化问题的一种有效且广泛应用的方法。作为一种进化计算技术,PSO受到社会行为模式,特别是…

document.cookie中expires 格式设置问题导致部分iphone safari上登录失效

一、问题描述 设备信息:iPhone 12, iOS 16.3 昨天有个小伙伴发现自己的iPhone safari打开网页登录时,登录页面显示登录成功,但实际进入首页后仍然显示未登录。多次测试,该问题在该设备上属于必现问题。 二、问题排查与解决 经过…

C/C++内存管理学习【new】

文章目录 一、C/C内存分布二、C语言中动态内存管理方式:malloc/calloc/realloc/free三、C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型四、operator new与operator delete函数五、new和delete的实现原理5.1 内置类型 六、定位new表达式(pl…

后端经典面试题合集

目录 1. Java基础1-1. JDK 和 JRE 和 JVM 分别是什么,有什么区别?1-2. 什么是字节码?采用字节码的最大好处是什么? 1. Java基础 1-1. JDK 和 JRE 和 JVM 分别是什么,有什么区别? JDK 是Java开发工具包&am…