Java EE Servlet之第一个Servlet代码

news/2024/7/7 23:25:03

文章目录

  • 1. Servlet 是什么
  • 2. 第一个Servlet 代码
    • 2.1 创建一个项目
    • 2.2 引入依赖
    • 2.3 创建目录
    • 2.4 编写代码
    • 2.5 打包程序
    • 2.6 部署程序
    • 2.7 验证程序
    • 2.8 更新代码
  • 3. 访问出错了怎么办?
    • 3.1 出现 404
    • 3.2 出现 405
    • 3.3 出现 500
    • 3.4 出现空白界面
    • 3.5 出现“无法访问此网站”

1. Servlet 是什么

Servlet 是一种实现动态页面的技术.,是一组 Tomcat 提供给程序员的 API,帮助程序猿简单高效的开发一个 web app

但是这个是一个比较古老的编写网站的方式

后来 java 中产生了 Spring,Spring 优势针对 Servlet 进行进一步封装

现在使用 java 进行商业开发,基本都是以 Spring 为主

为了以后更好的学习 Spring,这里来学习一下 Servlet


Servlet 主要做的工作
就是让程序员自己写一些类,然后把这些类给加载到 tomcat 中

后续 tomcat 收到 HTTP 请求(来自于浏览器),就会执行到上面所写的代码

从而通过这些代码,完成一定的业务逻辑

2. 第一个Servlet 代码

目标:编写 Servlet 代码,最终在浏览器上,能够展现数 hello world
(大概需要7 哥步骤才嫩完成)


2.1 创建一个项目

此处创建的是一个新的项目,称为 Maven 项目
Maven 是java 世界中一个知名的构建工具,帮助你编译/打包代码
以后工作中设计到的项目,肯呢个会非常复杂,可能会有一系列的依赖关系
Maven 就可以解决上述问题,帮我们把依赖管理好
Maven 的打包功能方便集成到自动化环境中
idea 已经集成了 Maven


1. 创建项目

在这里插入图片描述
Maven 项目在首次创建的时候,会自动的从 Maven 的网站上下载一些依赖的组件

在这里插入图片描述

  • main 中的是业务代码
    (实现业务的代码,解决问题的具体过程就是所谓的“业务”)

  • text 中是测试代码

  • pom.xml 是 Maven项目的入口配置
    在这里插入图片描述
    后面也需要修改这个文件,添加更多的内容,完成一些效果

2.2 引入依赖

1)打开 Maven 重要仓库,找到需要的 servlet 的 jar 包
要下载相对应的版本

2)借助 Maven,自动下载上述的依赖
在这里插入图片描述
在这里插入图片描述

2.3 创建目录

在这里插入图片描述
Tomcat 要求的结构
后面的代码会放到 tomcat 中,所以必须要遵循 tomcat 的要求,否则识别不了,就无法执行

2.4 编写代码

在这里插入图片描述
这里来自于 servelet 的jar 包


重写父类方法

本质目的就是,为了能够在现有的代码流程中,插入自己的逻辑
在这里插入图片描述
doGet 的意思,就是处理 HTTP GET 请求
当 tomcat 收到一个 GET 请求的时候,就有可能执行到这个子类的方法中

写一个服务器,主要的逻辑,其实就三个步骤

  1. 读取请求并解析
    HTTP 请求本身是一个字符串
    此处就是解析 HTTP 请求字符串,构造成 HttpServletRequest 对象

  2. 根据请求计算响应
    doGet 方法要做的事情就是这个
    根据请求 HttpServletRequest 对象,构造生成HttpServletRequest 对象

  3. 把响应返回给客户端
    也是 tomcat 自动完成的
    就会把响应对象组织成 HTTP 格式的字符串

在这里插入图片描述
Tomcat 不是收到所有的 get 请求都调用这个 doGet/方法,而是同时判断

  1. 请求是 get
  2. 请求 url 中的路径是 /hello

2.5 打包程序

打包程序,把我们写好的代码打成 war 包(tomcat 需要有一个 war 包在上面)

Maven 就可以完成大猫操作

1)修改 pom.xml,设置打包的类型和包名字
在这里插入图片描述
默认情况打的是 jar 包,但是 tomcat 要求的是 war 包
(Tomcat 专属的压缩包,war 里面不光有 .class还有一些 tomcat 要求的配置文件(web.xml 等) 还有前端的一些代码(html, css,js))

2)在右侧 maven 面板中,双击 package 这个按钮
在这里插入图片描述
出现这样的字样就说明打包成功了
在这里插入图片描述
在这里插入图片描述

2.6 部署程序

把 wer 拷贝到 webapps 目录中就可以了

启动 tomcat

2.7 验证程序

通过浏览器,访问 tomcat,回去到代码中返回的 hello world
在这里插入图片描述
在这里插入图片描述

2.8 更新代码

如果要手动更新代码,需要进行三步

  1. 修改代码
  2. 重新打包
  3. 重新部署

但是这种方法太麻烦,这里我们就借助 IDEA 的插件,把 tomcat 集成到 IDEA 中
此时,就可以通过 IDEA 一键式的重新打包部署了

使用 Smart Tomcat
在这里插入图片描述


  1. 在这里插入图片描述

  2. 在这里插入图片描述

  3. 在这里插入图片描述
    1)这个写什么都可以
    2)此处要配置 tomcat 在哪个目录中
    3)这里就决定了,浏览器中访问这个 servlet 的时候,一级目录怎么写
    不使用 smart tomato,是直接写作 war 包的名字(目录的名字)
    使用 smart tomato,context path 就是需要手动配置的,不配置,默认就是项目名字

接下来点击运行就可以了


在我们修改代码的时候,有的时候写了一串中文,会出现乱码的情况
这个时候是因为 每个环节的,解析数据的方式不同

这里我们就看一下是哪里出现的问题

  1. 构造数据
    此处的“你好”这两个字,是在 idea 的代码编译器中,够早的
    这个的编码方式,就看 idea 的代码编译器,是什么编码
    在这里插入图片描述
  2. 解析数据
    浏览器是如何解析的呢?
    浏览器默认的解析方式,是跟随系统的
    Windows 10 简体中文版,使用的字符集是 GBK
    由于 utf8 是主流,这里就可以把 gbk 改了
    在 HTTP 响应报文中,告诉浏览器,返回的 body 字符集是什么就可以了
    在这里插入图片描述
    在这里插入图片描述

3. 访问出错了怎么办?

3.1 出现 404

这个问题是初学 web 开发中,最常见的问题

  1. url 路径写错了
    在这里插入图片描述
    在这里插入图片描述
    这个一定要清楚,路径怎么写是正确的
    可以看上述的代码编写中的

  2. webapp 没有正确加载
    比如,web.xml 写错

3.2 出现 405

初学阶段容易出现
405:方法没有被实现
(GET 请求,但是 servlet 却没有重写 doGet)

方法没有被实现出来,自然光无法被调用
在这里插入图片描述

还有一个原因,也会引起 405
写的代码中,没有删除 super,doGet()
在这里插入图片描述
在这里插入图片描述
因为响应的格式已经不是合法 http 了导致浏览器解析出错

3.3 出现 500

500:服务器内部错位
(你写的代码抛出异常了)

在日志,或者响应中会带有异常信息
在这里插入图片描述

3.4 出现空白界面

在这里插入图片描述
这个时候,就要检查,服务器是否真的反悔了带有正文的响应报文
浏览器显示的内容,就是 http 响应的报文
在这里插入图片描述
被注释的这个内容,正是此处要写入正文的逻辑

3.5 出现“无法访问此网站”

Tomcat 没有正确运行
在这里插入图片描述
这个情况就要检查 tomcat 是否是正常工作
或者检查 ip 和 端口号是否正确


http://lihuaxi.xjx100.cn/news/1923129.html

相关文章

数组的声明

概要&#xff1a; 数组的声明分为三个部分 第一部分&#xff1a;数组中元素的数据类型 第二部分&#xff1a;数组名 第三部分&#xff1a;数组标识符(方括号)和数组大小 一、测试代码 #include<stdio.h> int main() {int arr_int[10];char* arr_str[10];arr_in…

Redis主从切换(单点故障)解决源码

1、使用过程&#xff1a; 发布创建channel1消息 redis-cli> PUBLISH channel1 "Hello, world!" redis-cli> SUBSCRIBE channel1 优点&#xff1a; 1、采用Reactor事件单线程去驱动发布订阅事件的&#xff0c;实时性高。 2、从redis架构去思考&#xff0c;拓展哨…

Innosetup 调用c# dll 和 c# dll的函数导出

目标需求&#xff0c;基于现在安装包脚本。需要在用户安装和卸载成功时。进行数据记录,所以需要调用c#dll 主要涉及到的知识点 需要理解脚本的文件使用机制脚本的文件dll加载&#xff0c;和dll的调用c# dll的制作&#xff0c;和工具的使用 下面具体介绍 脚本的文件dll加载&…

【Python排序算法系列】—— 冒泡排序

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 冒泡排序 过程演示&#xff1a; 做题实际遇到的图像是横向的&#xff0c;但是它位置变化和纵向是一样…

推荐Kali Linux 2023.4

今天滚动更新了Kali Linux 2023.4&#xff0c;推荐一下。 开发者们推出了该发行版在2023年的第四个也是最后一个新版本。Kali Linux 2023.4&#xff0c;同时包含15种新工具和GNOME 45。 新工具&#xff1a; cabby - TAXII 客户端实现&#xff1b; cti-taxi-client - TAXII2 …

nrm的保姆级使用教程

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

2024年软考中级-网络工程师

网络工程师证书考到后&#xff0c;通过本级考试的合格人员能根据应用部门的要求进行网络系统的规划、设计和网络设备的软硬件安装调试工作&#xff0c;能进行网络系统的运行、维护和管理&#xff0c;能高效、可靠、安全地管理网络资源&#xff1b;作为网络专业人员对系统开发进…

循环冗余效验码的计算方法

循环冗余效验码的计算方法 G&#xff08;x&#xff09;&#xff1a; 在了解计算方法之前我们首先要明白G&#xff08;x&#xff09;表明的意思&#xff0c;这一步非常重要&#xff01; 例如&#xff0c;G&#xff08;x&#xff09; x^3 x^2 1 &#xff0c;该式子表明的编…