Servlet 新手村引入-编写一个简单的servlet项目

Servlet 新手村引入-编写一个简单的servlet项目

文章目录

  • Servlet 新手村引入-编写一个简单的servlet项目
    • 一、编写一个 Hello world 项目
      • 1.创建项目
      • 2.引入依赖
      • 3.手动创建一些必要的目录/文件
      • 4.编写代码
      • 5.打包程序
      • 6.部署
      • 7.验证程序
    • 二、更方便的处理方案(插件引入)
      • 1.引入插件
      • 2.配置插件
      • 3.问题分析

上篇博客讲到, Tomcat 提供了一些列的 api 接口,这些 api 背后已经把一些基础工作做好了。Tomcat 把这组 api 起了个名字,称为 Servlet。

Java 程序员,只需要调用上述 api,通过少量的代码,就可以完成基本的 http服务器的核心功能。

相比于上篇 Tomcat 中讲到的 静态页面,Servlet 主要的解决的问题,就是为了实现 动态页面。

下面我们就通过 Java 来编写一个最简单的 servlet 的 Hello World 程序。

一、编写一个 Hello world 项目

1.创建项目

创建一个 Maven 项目。Maven 是 java 中一个常用的“构建工具”,一个程序在编写过程中,往往需要涉及到一些第三方库的依赖,另外还需要针对这个写好的程序进行打包部署。

Maven 存在的意义,就是为了能够方便的进行依赖管理和打包。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

观察创建好项目。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.引入依赖

当前代码要使用 Servlet 开发,而 Servlet 并不是 Java 标准库自带的。就需要让 Maven 能够把 Servlet 的依赖给获取过来。需要先找到 maven 中央仓库。在中央仓库中找到 Java Servlt API.

Maven 中央仓库地址(点击跳转)

Java Servlet API 有很多个版本,具体要选择哪个版本是和 Tomcat 的版本,有对应关系的。Tomcat 使用 8,Servlet 就是3.1 如果不匹配,就可能出现问题。

这段代码就是 Maven 仓库中版本为 3.1.0 的坐标外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

把依赖引入外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

首次使用,是最慢的。后面就快了(首次使用需要加载不少的依赖),下载的过程是需要时间的。

3.手动创建一些必要的目录/文件

Tomcat 对于 Servlet项目,是有一些额外的要求的。Maven 是一个通用的工具,可以管理的不仅仅是Servlet项目,还可以管理其他的项目。在这个基础上,再按照Servlet项目的要求,创建出一些特定的目录和文件。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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>(第三行代码可能是标红的,对于 idea 来说,只能保证针对java程序的提示是准确的。其他的文件,提示,仅供参考!!! 如果实在觉得难受可以 alt+enter ,把这个问题处理一下,fetch 忽略掉 ignore)

4.编写代码

在 java 目录中创建一个类 HelloServlet,代码如下:

//这个注解,就把当前这个Servlet类,和一个请求的路径关联起来了(配置路由)
@WebServlet("/hello")
//继承是为了重写这个父类中的方法。
public class HelloServlet extends HttpServlet {@Override//调用父类doGet,这个方法不需要手动调用,doGet本质上也是一个“回调函数”,方法写好后,就会交给Tomcatprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//下列代码一定要删掉,否则就会出现问题。//super.doGet(req,resp);//是在服务器日志中产生的 (tomcat)System.out.println("Hello World");//想要把hello world 返回给客户端,还需要进一步的使用下列代码。//resp是未初始化过的响应对象,doGet的目的就是把这个对象给设置好。通过getwriter得到resp里面内置的输出流对象(Writer字符流),最后使用 write方法,就可以把一个字符串写入到resp对象中。把数据写入到了 HTTP 响应的body中。resp.getWriter().write("hello world");}
}

总之,doGet 做的事,就是根据请求计算响应。

前面写 echo server 的时候,一个服务器,典型的工作流程,就是三步:

  1. 读取请求并解析
  2. 根据请求计算响应
  3. 把响应写回到客户端

这个过程体现了服务器的业务逻辑,1 3都是相对固定的操作。而在 Servlet 这块,1 3 都是Tomcat 帮我们完成的。咱们写代码只需要关注 2。也就是doGet要完成的工作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.打包程序

因为咱们的程序是放到 Tomcat 上运行,就需要对于程序进行打包。达成一个 Tomcat 能识别的包的格式,此时代码才会被 Tomcat 给加载起来。

打包也是借助 maven 来完成的。打开 maven 窗口(一般在 IDEA 右侧就可以看到 Maven 窗口,如果看不到的话,可以通过 菜单-View-Tool Window-Maven 打开),然后展开Lifecycle,双击 package 即可进行打包。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果看到 BUILD SUCCESS 字样,说明打包成功了。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这就是通过 maven 打包生成的内容。在 maven 中,默认打包生成的是jar包。(常用的 java 的打包方式,jar 里面就是一些 .class文件)但是Tomcat需要的并非是 jar 包,而是 war 包。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

war包本质上和 jar 包差不多,这里会包含一些前端的代码(html,css,js),以及一些 tomcat 的配置(web.xml)

此处需要修改 pom.xml,在这里添加一个 标签。(的子标签,层次结构不要搞错)外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个东西描述了打的包的名字是啥。(不是必须的,同样是的子标签)外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此时再次进行打包,文件中就会生成如下war文件。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

6.部署

启动 tomcat ,将写好的 war 包,放到 tomcat 上。具体来说,就是把这个 war 包拷贝到 tomcat 的 webapps 目录中。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

发现新的war包,对war包进行部署操作。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7.验证程序

通过浏览器发起 http get 请求,触发刚才 servlet 的代码。

127.0.0.1:8080/java_hello/hello

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 通过 第一级 路径,确定一个 webapp
  • 通过 第二级 路径,确定哪个 servlet
  • 通过 方法,确定执行 servlet 中的哪个方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

问题1:在你检查了所有代码都是正确的,但是最后利用浏览器发起请求的时候,出现加载不出来的情况。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

之所以出现这个情况,是 cmd 在搞鬼!!比如你选中了 cmd 中的某个内容,cmd 就会进入“复制”模式,此时按下 enter 就是完成复制。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入复制模式的过程中,cmd 就会把正在运行的进程给阻塞掉。

问题2:针对上述 7 步操作,能否简化一下?

也是有办法的!后续学习的 Spring 就是做出了简化后的效果。

二、更方便的处理方案(插件引入)

1.引入插件

手动拷贝 war 包到 Tomcat 的过程比较麻烦。我们还有更方便的方法。

此处我们使用 IDEA 中的 Smart Tomcat 插件完成这个工作。

理解“插件”

插件会提升我们软件的可修改性、可维护性、可移植性。

插件就是对程序的一些特定场景,做出一些特定的功能的扩展

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同学们可能会出现 插件市场 加载不出来的情况,也可以去官网下载,手动安装。下载之后,会得到一个 jar 包,把这个 jar 包拖到 idea 的界面上,就能安装插件。

2.配置插件

一个项目中,第一次使用 smart tomcat 需要简单配置一下。配置一次之后,后续就不需要配置了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

出现问题:当我们配置完插件后启动程序,会发现端口号已被占用,这是因为咱们之前启动了 Tomcat,之前的 Tomcat 已经占用了 8080。一个端口号只能被一个进程绑定,解决方法就是把之前的 tomcat 关闭,再启动此程序外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.问题分析

  • 404 浏览器要访问的资源,在服务器上不存在。

    1. 检查你的请求路径,和你服务器这边的配置,是否一致。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    2. 确认你的 webapp 是否被正确加载。

      smart tomcat 由于只是加载你这一个 webapp。如果加载失败,就会直接启动失败!!我们要学会观察日志,观察是否有“部署成功”。

  • 405 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    1. 写的 doXX 方法,和请求发起的方法,不匹配。浏览器发 Get 请求,服务器代码写的是 doPost。
    2. 发的是 Get 请求,服务器写的也是Get请求,但是没有把 super.doPost 给删了。
  • 505 服务器内部错误,代码中抛出异常了。出现 500 后一定要仔细观察异常调用栈外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 出现空白页

    往往就是没有执行 getWriter().write 方法

  • 无法访问此网站

    这种情况,要么是 tomcat 服务器,没有正确运行。要么就是 ip 或者 端口号 编写的不对!!

感谢观看,下期继续分享 servlet 相关知识!!

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

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

相关文章

autocrlf和safecrlf

git远程拉取及提交代码&#xff0c;windows和linux平台换行符转换问题&#xff0c;用以下两行命令进行配置&#xff1a; git config --global core.autocrlf false git config --global core.safecrlf true CRLF是windows平台下的换行符&#xff0c;LF是linux平台下的换行符。…

基于springboot+vue的公交线路查询系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位

运动相机设计用于在各种运动和极限环境中使用&#xff0c;如徒步、登山、攀岩、骑行、滑翔、滑雪、游泳和潜水等&#xff0c;它们通常具有防抖防震、深度防水和高清画质的特点&#xff0c;能够适应颠簸剧烈的环境&#xff0c;甚至可以承受一定程度的摔落&#xff0c;一些运动相…

基于systick实现获取系统运行时间

基于systick实现获取系统运行时间 文章目录 基于systick实现获取系统运行时间systick.c代码结构:代码功能:总结 systick.c #include <stdint.h> #include "gd32f30x.h"static volatile uint64_t g_sysRunTime 0;/** ***************************************…

数学建模【聚类模型】

一、聚类模型简介 “物以类聚&#xff0c; 人以群分”&#xff0c;所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计、分析或预测&#xff0c;也可以探究不同类之间的相关性和…

springboot233大学生就业需求分析系统

大学生就业需求分析系统设计与实现 摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff…

五种查看Spring容器中bean的方法

五种查看Spring容器中bean的方法 在Spring应用程序中&#xff0c;了解和查看容器中的Bean是进行调试和问题排查的关键。Spring提供了多种方法来查看容器中注册的Bean&#xff0c;以便我们深入了解应用程序的内部结构和调试潜在问题。本文将介绍五种常用的查看Spring容器中Bean的…

C++ map用法详细总结40例

文章目录 1. 定义与初始化2. 插入元素3. 查找元素4. 删除元素5. 遍历6. 访问成员函数7. 修改元素8. 注意事项9. 使用 equal_range 查找键值范围10. 使用 emplace 添加元素11. 使用 cbegin 和 cend 获取常量迭代器12. 排序规则自定义13. 使用 multimap 存储重复键14. 判断 map 是…

Python音乐信息管理库之beets使用详解

概要 在数字化时代,音乐管理变得越来越重要,特别是对于音乐爱好者和专业音乐人士而言。Python作为一种功能强大的编程语言,拥有着丰富的音乐处理库,其中Beet就是一款备受推崇的音乐信息管理工具。本文将深入探讨Beet库的功能特性、使用方法以及应用场景,并提供丰富的示例…

WPF真入门教程31--WPF版房屋租售系统

1、教程回顾 到现在为止&#xff0c;“蒸”入门系列教程已完成了30刺由浅入深地讲解&#xff0c;当然不可能讲到了WPF的所有技能点&#xff0c;但读者看到了wpf的内部各种功能及之间的联系&#xff0c;在此基础上&#xff0c;再提供一个完整有效的综合项目&#xff0c;本项目采…

tcp的三次握手和四次挥手?

一&#xff1a;引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西&#xff1b;由于TCP不存在连接的概念&#xff0c;只存在请求和响应&#xff0c;请求和响应都是数据包&#xff0c;它们之间都是经过由TCP创建的一个从客户端发起&#xff…

身份验证错误。要求的函数不受支持。远程计算机:[IP地址]。这可能是由于CredSSP加密数据库修正

出现“身份验证错误。要求的函数不受支持。远程计算机&#xff1a;[IP地址]。这可能是由于CredSSP加密数据库修正”的问题&#xff0c;通常是因为Windows更新后&#xff0c;远程桌面连接&#xff08;RDP&#xff09;的安全性增强&#xff0c;特别是与CredSSP&#xff08;Creden…

[RoarCTF 2019]Easy Calc

这题考查的是: 字符串解析特性目录读取文件内容读取 字符串解析特性详解&#xff1a;PHP字符串解析特性 &#xff08;$GET/$POST参数绕过&#xff09;&#xff08;含例题 buuctf easycalc&#xff09;_参数解析 绕过-CSDN博客 ascii码查询表&#xff1a;ASCII 表 | 菜鸟工具 …

AI智能雷达名片小程序平台版源码系统 带完整的安装代码包以及安装部署教程

在当今数字化快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已渗透到各个领域&#xff0c;尤其是在商务沟通领域&#xff0c;传统的名片已经不能满足现代商业的需求。小编给大家分享一款名为“AI智能雷达名片小程序平台版”的源码系统&#xff0c;该系统不仅提…

知乎引流秘籍:玩转知乎,掘金百万流量!

知乎&#xff0c;拥有3亿注册用户、日新增用户8万的超级内容平台&#xff0c;已然成为流量洼地。如何玩转知乎&#xff0c;掘金百万流量&#xff1f;这份1500字的实操指南&#xff0c;为你揭秘&#xff01; 一、知乎的优势&#xff1a;流量大、长尾效应强 1. 流量大&#xff…

提升智能客服机器人的语义理解能力:理解用户的语义和意图

智能客服机器人的发展已经成为现代服务业的一大亮点。它们不仅能够提供724小时不间断的服务&#xff0c;而且能够处理大量的用户请求&#xff0c;大大提高了服务效率。然而&#xff0c;尽管智能客服机器人的技术已经取得了显著的进步&#xff0c;但其语义理解能力仍有待提高。为…

【Linux杂货铺】调试工具gdb的使用

目录 &#x1f308;前言&#x1f308; &#x1f4c1;背景介绍 &#x1f4c1; 使用 list [行号] / [函数名] run/r break/b [行号] / [函数名] info break disable break enable break delete break [断点编号] next/n step/s continue/c finish print/p [变量…

06 vim工具

目录 概念模式基本操作配置 1. 概念 vim是一个历史悠久的,多模式的编辑器&#xff0c;是vi的升级版。和ide不同&#xff0c;编辑器仅能编写文本&#xff0c;不能运行代码&#xff0c;现阶段的代码编译的各个过程会分开按步骤执行 2. 模式 vim有很多种模式&#xff0c;想要编…

方格分割644--2017蓝桥杯

1.用dfs解决&#xff0c;首先这题的方格图形就很像一个走迷宫的类型&#xff0c;迷宫想到dfs&#xff0c;最中心点视为起点&#xff0c;起点有两个小人在这个方格里面对称行动&#xff0c;直到走出迷宫&#xff08;一个人走出来了另一个人就也走出来了&#xff0c;而走过的点会…

Vmware Esxi 部署Mac OS虚拟机

Vmware Esxi在创建虚拟机的时候是有Mac OS选项的&#xff0c;但是实际创建时&#xff0c;选择ISO开机后一直反复引导&#xff0c;是有问题的&#xff0c;原因是需要先解锁&#xff0c;需要在ESXI主机上修改配置并重启。 首先找到管理-服务-TSM-ssh&#xff0c;点击启动&#x…