当前位置: 首页 > news >正文

用servlet写一个hello word

哈喽,你好呀.今天要分享的是如何通过servlet在网页上去写一个hello world,还记得我们计算机入门的第一个程序吗,步骤非常简单.但是今天写的这个hello world步骤就有点多啦,但是熟悉之后,也还是很简单的,这里博主总结了6个步骤,快来看看吧~~

 


目录

1.创建Maven项目

2.引入依赖

3.创建目录

4.编写代码

5.借助Smart Tomcat来简化打包和部署程序.

6.验证程序


1.创建Maven项目

Maven是一个构建工具,在这里我们主要要了解它的依赖管理和打包.创建一个项目时选中Maven,然后点击next:

 

 然后在Name这一栏填写要创建项目的名称,这里我写的是Test.Location这一栏是你项目所在的文件位置,可以自定义其位置.

 点击Finish之后,一个Maven项目就创建好了.

如果是第一次使用Maven的话,不一定会像我这么顺利,因为Maven自身会有很多依赖,这些依赖需要通过网络来下载(而我的因为之前用过,所以已经加载好了),由于Maven对应的服务器在国外,所以加载的速度可能会非常慢.idea的下方会有一个读条,表示其加载进度:

 Maven项目创建好之后,我们来看一下它的目录结构:

 


2.引入依赖

之前在创建Maven中提到的依赖,是maven自身为了运行需要的依赖,此处要引入的依赖是写一个Servlet程序所需要的依赖(Srevlet的jar包).我们需要把这个jar包下载到项目中.maven自身支持自动下载并导入依赖的.我们可以从maven的中央仓库(https://mvnrepository.com/)去下载.

直接在这个网站中搜索servlet, 然后点击第一个(Java Servlet API)进入详情页:

点进去之后会发现有好几个版本,在这里我们一定要注意了,版本可不是随便选的,因为servlet还涉及到Tomcat等等,所以我们下载的这个版本最好要与其他软件统一好.否则到某个时候可能会因为这个阴你一手,别问我为什么会知道,照着做就是了.(我用的是java8,Tomcat8.5,所以这里一定要选Servlet3.1  这套搭配是Tomcat官方推荐的) ,我们再点开这个3.1版本的:

 根据上图,我们可以选择手动下载这个jar包,就行之前引入jdbc的驱动一样.但是在这里,我们其实不需要去手动下载引入,因为maven自身是支持自动下载的,所以我们只需要将上图中圈出来的那段内容复制到maven项目中的pom.xml文件中.

 复制的时候需要注意,我们要先手动创建一个dependencies标签,再把复制的dependency标签粘贴到这里面.如果有多个依赖,都可以复制到dependencies里面,从的的标签名我们也可以看出,它是dependency的复数形式,里面可以放多个dependency标签.

有些同学可能复制过来之后有些地方会标红,不要害怕,首次使用标红就对了,说明你的依赖还没下载到本地,只要你复制过来,一般它就会自动开始下载,如果没有自动下载,可以手动点一下刷新,来触发一下重新下载,然后只需要等一会就行了.(刷新按钮在ieda右侧的maven里面点击这个Maven,会出现以下页面:

刷新按钮就在这啦)

如果需要其他的第三方库,也可以使用同样的方法来进行下载了(也就是引入依赖).


3.创建目录

虽然我们创建maven时已经自动创建好了一些目录,但是我们还需要去创建一些我们自己的目录.这是固定操作,不要问为什么.在main目录里面创建一个webapp,然后在webapp目录下创建一个WEB-INF目录,接着在WEB-INF下创建一个web.xml文件:

创建好之后目录结构就是这个样子了,要严格按照上面的要求来,目录名也要与上图相同.搞错了就芭比Q没得玩了.为什么要这么安排呢,因为Tomcat就是按照这样的目录结构来识别的.这属于Tomcat做出的要求,咱们按照要求就行了. 

创建好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>

 有人就会问了,这段代码什么意思?我只能告诉你,tomcat加载一个你写的程序,就会先读取这个web.xml里的内容.这个不用太过关注,不重要,照着写就是了.后续也不会去修改这个文件.有些同学可能从我这粘贴过去会标红,其实也不用害怕,这没什么,标红就标红吧,在这里并不是报错,不影响你的程序(看到标红而害怕的同学估计是被java的bug给整怕了).


4.编写代码

前面三步就是准备工作,从这步起,就开始编写代码了.

 我们在java中创建一个java类,让它继承HttpServlet类:

 注意:继承的这个HttpServlet类就是来自于我们刚刚引入的那个servlet依赖,如果这里标红,就去检查一下你的Servlet是否引入正确,如果引入正确试着刷新一下.

这个类创建好之后,我们就要在里面写能实现hello world的代码了.首先我们要重写doGet方法,通过重写让doGet执行到我们自己编写的代码.doGet做的工作,就是Tomcat收到请求之后,到返回响应之前做的工作.不知道你们知不知道在网络编程那块,大致有三步:1.读取请求并解析.2.根据请求计算响应.3.把响应返回给客户端.其中1和3都是有由tomcat自动完成的,这里的doGet完成的就是第二步.这里我们就要区别于之前写的代码了.doGet写完之后,不需要我们自己去调用,是Tomcat自动识别调用的(通过GET请求去触发):

 

 

 其中doGet参数中的HttpServletRequest就是Tomcat根据收到的HTTP请求生成的对象,doGet里面根据当前的业务逻辑,依据HttpServletRequest生成一个HttpServletResponse.Tomcat再把HttpServletResponse对象构造成HTTP响应报文,返回给客户端.

需要知道的是:doGet的第二个参数,是Tomcat先生成的一个空的对象,然后在doGet里面根据业务逻辑,给这个空对象填充数据..doGet执行完了,Tomcat再把HttpServletResponse对象构造成一个HTTP响应.

注意:我们的类的上面还有一个注解(@WebServlet("/hello")),这个是什么呢?其实就是约定HTTP请求的URL是什么样的path才会调用到当前的这个Servlet类.


5.借助Smart Tomcat来简化打包和部署程序.

写到这里,我们的业务代码就完成了,可是怎么执行呢.我们接下来就需要对其进行打包和部署了,部署完成之后就可以去验证程序了.但是在这里我是借助了IDEA中一个插件,Smart Tomcat,来简化打包和部署的.

安装Smart Tomcat插件:

根据上图进行安装(我已经安装好了,没安装的会有一个绿色的按钮).

安装完成之后,根据以下步骤,我们就可以在tomcat里面去运行这个程序了.首先点击Add Configuration,然后进入这个页面:

 

点击左上角的"+",选中Smart Tomcat,然后点击ok即可.

此时,我们再点击这里的运行(绿色三角),即可完成编译打包部署,并运行tomcat了.

6.验证程序

此时我们在自己的电脑游览器上输入url:127.0.0.1:8080/Test/hello.一个回车就可以看到我们的hello world打印在页面上啦.


 

好啦.到这里就结束啦,是不是很简单呢,博主现在也是在学习阶段,如果有写的不对或建议或不懂的地方都可以评论或私聊博主,咱们一起进步呀~~

 

相关文章:

  • myj的补作业计划HrbustOJ新生赛(struct+优先队列)
  • canal的入门与使用
  • 病毒营销增长策略:Facebook和 Airbnb的5个病毒传播方法
  • C++:特殊类设计
  • Spring如何记忆
  • 材料科学基础学习指导-吕宇鹏-名词和术语解释-第二章晶体缺陷
  • 线段树2----简单拓展
  • 【学姐面试宝典】前端基础篇Ⅳ(JavaScript)
  • 本地JAR文件作为Gradle依赖项
  • Linux软件安装的4种方式
  • 自然语言处理Transformer模型最详细讲解(图解版)
  • JVM的组成
  • 【Rust日报】2022-10-15 Frui: 一个rust写的开发者友好的UI框架
  • Text Preprocessing - 文本预处理(RNN循环神经网络)
  • 【JavaScript设计模式】观察者模式
  • Angular 响应式表单之下拉框
  • CAP 一致性协议及应用解析
  • CEF与代理
  • go append函数以及写入
  • JavaScript设计模式系列一:工厂模式
  • leetcode388. Longest Absolute File Path
  • Less 日常用法
  • Linux CTF 逆向入门
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • React Native移动开发实战-3-实现页面间的数据传递
  • React Transition Group -- Transition 组件
  • Vue.js-Day01
  • 记录:CentOS7.2配置LNMP环境记录
  • 模型微调
  • 前端相关框架总和
  • 删除表内多余的重复数据
  • 推荐一个React的管理后台框架
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 微信小程序--------语音识别(前端自己也能玩)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (solr系列:一)使用tomcat部署solr服务
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (十)c52学习之旅-定时器实验
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)可以带来幸福的一本书
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ***通过什么方式***网吧
  • .Net CF下精确的计时器
  • .Net6使用WebSocket与前端进行通信
  • .Net8 Blazor 尝鲜
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET企业级应用架构设计系列之开场白
  • @staticmethod和@classmethod的作用与区别
  • [] 与 [[]], -gt 与 > 的比较
  • [1181]linux两台服务器之间传输文件和文件夹
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [c++] 单例模式 + cyberrt TimingWheel 单例分析
  • [CLickhouse] 学习小计