Tomcat的安装与Maven依赖Servlet的使用(下)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Tomcat的安装与Maven依赖Servlet的使用(下)

🍉四.编写代码


点击Java创建一个类


a4c186d7ee89409ebcbc6bad311298dd.png

创建一个类 HelloServlet , 继承自 HttpServletAlt+Enter导入import javax.servlet.http.HttpServlet包

1e11a90fd1f248ac993a136caa93213f.png

●在这个类上方加上 @WebServlet(“/hello”) 注解, 表示 Tomcat 收到的请求中, 路径为 /hello的请求才会调用 HelloServlet 这个类的代码. (这个路径未包含 Context Path)


●重写 doGet 方法. doGet 的参数有两个, 分别表示收到的 HTTP 请求 和要构造的 HTTP 响应. 这个方法会在 Tomcat 收到 GET 请求时触发


●HttpServletRequest 表示 HTTP 请求. Tomcat 按照 HTTP 请求的格式把 字符串 格式的请求转成了一个 HttpServletRequest 对象. 后续想获取请求中的信息(方法, url, header, body 等) 都是通过这个对象来获取.


●HttpServletResponse 表示 HTTP 响应. 代码中把响应对象构造好(构造响应的状态码, header,body 等)


●resp.getWriter() 会获取到一个流对象, 通过这个流对象就可以写入一些数据, 写入的数据会被构造成一个 HTTP 响应的 body 部分, Tomcat 会把整个响应转成字符串, 通过 socket 写回给浏览器.

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * Created with InteliJ IDEA.
 * /Description:
 * User:PANJIAPENG
 * Date:2022-11-09
 * Time:19:32
 */
@WebServlet("/hello")
public class ServletHello extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello servlet");
        resp.getWriter().write("hello Servlet");
    }
}


这个代码虽然只有寥寥几行, 但是包含的信息量是巨大的

(1) 我们的代码不是通过 main 方法作为入口了. main 方法已经被包含在 Tomcat 里, 我们写的代码会被Tomcat 在合适的时机调用起来.

此时我们写的代码并不是一个完整的程序, 而是 Tomcat 这个程序的一小部分逻辑.


(2) 我们随便写个类都能被 Tomcat 调用嘛? 满足啥样条件才能被调用呢?

主要满足三个条件:

● 创建的类需要继承自 HTTP Servlet

● 这个类需要使用 @WebServlet 注解关联上一个 HTTP 的路径

● 这个类需要实现 doXXX 方法


当这三个条件都满足之后, Tomcat 就可以找到这个类, 并且在合适的时机进行调用


🍉五.打包/部署/运行


打包:

war 包和 jar 包的区别

●jar 包是普通的 java 程序打包的结果,也是默认打包格式. 里面会包含一些 .class 文件.

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

f00bf7990c3645b5b0c1b73233ccad74.png

点击运行进行打包/部署

99a6d8df7da3403685f0e74b3beef6a1.png

检验程序:

输入127.0.0.1:8080/Servlet/hello

注意:这是根据自己设置的文件路径进行查找的

34ee25354e4a48a4b0e633e9f1145b06.png


🍒2.3 Servlet程序运行常见错误


出现 404

404 表示用户访问的资源不存在. 大概率是 URL 的路径写的不正确


●错误实例1: 少写了 Context Path

通过 /hello 访问服务器


●错误实例2: 少写了 Servlet Path

通过 /Servlet 访问服务器


●错误实例3: Servlet Path 写的和 URL 不匹配

修改 @WebServlet 注解的路径


●错误实例4: web.xml 写错了

清除 web.xml 中的内容


e67385d37bdd4558a92dff82ddfe9c10.png


出现405

405 表示对应的 HTTP 请求方法没有实现.

错误实例: 没有实现 doGet 方法.


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


81381e7d5f064a3f96d89c2db2cc017f.png


7fbf5a14e03240a98b4e7aa29587282a.png


9b6b5665bc0949a488cc3a6c7dc06b09.png



出现 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());
  }
}


8d618d43e73e4b86ac09020c8d41ab61.png



出现 “空白页面”


错误实例:

修改代码, 去掉 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");
   }
}

出现 “无法访问此网站”


一般是 Tomcat 启动就失败了.

错误实例: Servlet Path 写错了又肯没有加"/"

5816258bfcfc46fdb52adbb2e05363e7.png

090376a5a3f04a3b9ba67587fcd6b861.png


🍒2.4总结


初学 Servlet, 遇到的这类问题会非常多. 我们不光要学习 Servlet 代码的基本写法, 也要学习排查错误的思路.

程序猿调试 BUG 如同医生诊病.

一个有经验的程序猿和一个新手程序猿相比, 最大的优势往往不是代码写的多好, 而是调试效率有多高. 同一个问题可能新手花了几天都无法解决的, 但是有经验的程序猿可能几分钟就搞定了.

你还觉得 “程序猿是吃青春饭” 嘛?


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

●4xx 的状态码表示路径不存在, 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及Servlet Path 是否一致.

●5xx 的状态码表示服务器出现错误,或者代码写错, 往往需要观察页面提示的内容和 Tomcat 自身的日志, 观察是否存在报错.

●出现连接失败往往意味着 Tomcat 没有正确启动, 也需要观察 Tomcat 的自身日志是否有错误提示.

●空白页面这种情况则需要我们使用抓包工具来分析 HTTP 请求响应的具体交互过程.

●观察日志是调试程序的重要途径. Tomcat 的日志往往很多, 需要同学们耐心阅读, 经常阅读, 熟练了就能更快速的找到问题了.


舞台在大,你不登场,永远都是观众.平台再好,你不参加永远都是局外人.能力再大,你若不行动,没人能看到你的成功.我们一起加油屏幕前的陌生人!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
XML 前端开发 Java
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
这篇文章是SpringMVC框架的入门教程,详细指导了如何在IDEA中使用Maven和Tomcat创建SpringMVC工程,包括添加依赖、配置web.xml、编写控制器、创建配置文件、配置Tomcat服务器以及进行基本的测试,展示了一个简单的Hello SpringMVC示例。
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
|
9天前
|
NoSQL 关系型数据库 应用服务中间件
docker基础篇:安装tomcat
docker基础篇:安装tomcat
121 64
|
3天前
|
存储 Java Linux
【Maven】——基础入门,插件安装、配置和简单使用,Maven如何设置国内源
Maven插件安装,Maven项目构建,依赖管理,Haven Help插件,Maven仓库,Maven如何设置国内源
|
4月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
66 1
|
2月前
|
Java Shell 应用服务中间件
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
这篇文章介绍了如何在Mac系统下配置Java JDK、Maven和Tomcat的环境变量,包括配置文件的选择、解决环境变量在zsh shell中无效的问题、查看和设置系统环境变量的方法,以及JDK和Maven的下载、配置和测试步骤。
1621 1
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
|
2月前
|
Java 程序员 Linux
Maven的基本安装与使用
Maven的基本安装与使用
|
2月前
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
138 3
|
2月前
|
Java 应用服务中间件 Maven
idea+maven+tomcat+spring 创建一个jsp项目
这篇文章介绍了如何在IntelliJ IDEA中使用Maven和Tomcat创建一个JSP项目,包括配置Maven依赖、设置Tomcat服务器、编写JSP页面、创建控制器和配置文件,以及项目的运行结果。
249 0
idea+maven+tomcat+spring 创建一个jsp项目
|
4月前
|
Oracle Java 关系型数据库
2022 年超详细过程步骤讲解 CentOS 7 安装Maven。以及Mavne配置文件的修改
这篇文章提供了在CentOS 7上安装Maven的详细步骤,包括从官网下载Maven、创建文件夹、上传和解压Maven安装包、配置环境变量、设置Maven源为阿里云、指定jar包仓库位置、配置JDK版本,并验证安装是否成功。
2022 年超详细过程步骤讲解 CentOS 7 安装Maven。以及Mavne配置文件的修改
|
4月前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器