JavaEE-初识Servlet

news2025/1/20 11:58:01

目录

  • Servlet 是什么?
  • 完成一个servlet程序
    • 1.创建一个maven项目
    • 2.引入依赖
    • 3.创建目录
    • 4.编写Servlet代码
    • 5.打包
    • 6.部署
    • 7.验证程序
  • 第三方工具简化

Servlet 是什么?

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

完成一个servlet程序

1.创建一个maven项目

首先创建一个maven项目:servlet_project

在这里插入图片描述

2.引入依赖

需要在代码中引入 Servlet api,这个api不是JDK内置的,而是第三方(Tomcat提供的)

maven中央仓库:maven

打开后在搜索栏里面输入servlet;选择第一个。

在这里插入图片描述

点击进去之后,找到servlet 3.1.0版本。(注意这里的版本要匹配jdk8,tomcat8.5,servlet3.1)

在这里插入图片描述

复制这里的代码到idea。

在这里插入图片描述
配置在pom.xml中。
在这里插入图片描述

3.创建目录

当项目创建好了之后, IDEA 会帮我们自动创建出一些目录. 形如
在这里插入图片描述
这些目录中:
src 表示源代码所在的目录

main/java 表示源代码的根目录. 后续创建 .java 文件就放到这个目录中. 
main/resources 表示项目的一些资源文件所在的目录. 此处暂时不关注. 
test/java 表示测试代码的根目录. 此处暂时不关注. 

这些目录还不够, 我们还需要创建一些新的目录/文件

  1. 选中main右键创建一个目录,目录名叫做webapp。因为tomcat可以同时加载多个webapp,所以tomcat的目录是带s的,咱们写的就是一个webapp,就没有s。

在这里插入图片描述
2. 右键webapp,新建一个目录叫做WEB-INF
在这里插入图片描述

  1. 右键WEB-INF创建一个文件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>

在这里插入图片描述

4.编写Servlet代码

  1. 在Java这个目录下创建一个类:HelloServlet,继承自HttpServlet,如果代码爆红,说明httpServlet没有被正确引入,只需要点击maven中的刷新即可。

在这里插入图片描述
2. 重写父类的方法doGet

在这里插入图片描述
do:处理
Get对应到HTTP的GET方法
这个方法就是在tomcat收到了一个HTTP GET请求的时候,会被Tomcat调用到~

在网络程序中,就涉及到一对相当重要的概念:
请求 Request
响应 Response

HttpServletRequest req代表一个http请求,HttpServletResponse resp代表http响应
当前方法中并没有代码,这里的resp是一个空的响应对象,需要给这个方法中设置一些属性。
doGet方法需要做的事情就是根据请求,计算生成响应。

一个服务器的工作流程分为三个典型步骤:

  1. 接收请求并解析
  2. 根据请求计算响应
  3. 构造响应数据,并返回给客户端

1和3Tomcat已经帮我们做好了,程序员需要做的事情就是第2步,就是doGet需要做的事情。

public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 这个代码一定要干掉!不能调用父类的 doGet!
        // super.doGet(req, resp);

        // 这个是让服务器在自己的控制台打印
        System.out.println("hello world");
        // 在页面上也能打印 hello world , 把 hello world 字符串, 放到 http响应的 body中, 浏览器就会把body中
        // 显示到响应上
        resp.getWriter().write("hello world");
    }
}

getWriter其实返回了一个Writer对象(字符流对象),此处的Writer对象就不是往文件里面写,而是往http响应的body中写入数据。
write()是真正用来干活的,写数据的方法。
还差最后一步:在整个类的上一行写入这行代码,作用就是把当前的这个 hello world 这个类,和 HTTP 请求中 URL 里面路径带有 /hello 这样的请求,给关联起来。

@WebServlet("/hello")

因为tomcat可能会收到很多请求,这么多请求,咱们需要的是路径里带/hello的这种情况,才会让tomcat来调用hello world 这个类,同时需要保证方法也是doGet方法。

5.打包

当前的代码,是不能单独运行的(没用main方法)
需要把当前的代码,打包,部署到tomcat上,有tomcat进行调用。

准备工作:
打包之前,需要一些准备工作,在pom.xml文件中配置以下代码,注意是和在同一级目录,war包算是给tomcat专门用的,这里不光包含一些.class文件,还可以包括一些配置文件,以及一些依赖的第三方jar包,html,css,js……

	<!-- 打的包是一个war包,默认是一个jar包 -->
    <packaging>war</packaging>
    <!-- 指定打出的war包名字 -->
    <build>
        <finalName>hello107</finalName>
    </build>

点击idea右上角的maven,找到package双击
在这里插入图片描述
当控制台出现build success的时候,说明打包成功

在这里插入图片描述
在这里插入图片描述

6.部署

把刚才的war包拷贝到tomcat的webapps目录下

  1. 找到当前项目的目录中的hello.war文件
    在这里插入图片描述

  2. 复制该文件到tomcat的webapps目录下
    在这里插入图片描述

  3. 启动tomcat
    在这里插入图片描述

7.验证程序

在浏览器输入对应的地址:http://127.0.0.1:8080/hello107/hello
第一级路径hello107叫做content path,第二级路径hello是servlet path;(注意和自己创建的目录一致)
在这里插入图片描述

第二级路径和自己写的代码里的注解是相匹配的

在这里插入图片描述
可以这样认为:一个Tomcat上可以同时部署多个网站,一个网站上又有多个页面。一个请求中的第一级路径,就告诉Tomcat,要访问的网站是哪个?第二级路径,就告诉Tomcat要访问的页面是这个网站的哪个页面!
在这里插入图片描述
当前页面是通过Java代码生成的,和直接创建一个html文件,里面写个hello world有什么区别呢?
前者的内容是可变的,根据用户不同的输入,可以得到不同的结果;后者页面的内容是固定的,是静态的,不变的。

上述七个步骤是针对一个新的项目来设计的;当当项目创建好了之后,后续只需要修改代码,前三个步骤就可以省略了,从4-7即可。
重新部署的时候,不一定需要重启tomcat。
在这里插入图片描述
当看到tomcat中有这样的提示deployWAR,表示已经重新部署了。

第三方工具简化

咱们可以通过一些第三方工具来简化第5和6的操作。
咱们是通过idea上面的插件,直接把Tomcat给集成进来,做到“一键式”完成打包部署了。

下载步骤:

  1. 打开idea,file->settings->plugin;在搜索栏搜索smart tomcat
    在这里插入图片描述

  2. 第一次使用需要配置一下;首先点击右上角红色箭头指向的地方
    在这里插入图片描述

  3. 点击+号,找到smart tomcat;name可以随便取,选择一下对应的版本、目录;注意这个content path路径要和URL的第一级路径保持一致
    在这里插入图片描述
    在这里插入图片描述

  4. 点击右上角的这个绿色的三角,便可自动的进行打包部署
    在这里插入图片描述

  5. 点击三角箭头,打包部署
    在这里插入图片描述
    这里的内容本身就是红色的,异常调用栈才是错误.
    在这里插入图片描述
    如果一个端口,已经被服务器绑定了,再次启动一个程序绑定同一个端口,就会出错。
    当下存在这个问题,是因为已经在命令行里启动了一个Tomcat了,如果在idea中再启动一个,显然是不能重复占用的。
    在这里插入图片描述
    这样就成功了!

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

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

相关文章

项目难点——【3】分布式任务调度、线程池使用、视频转换

项目难点——【3】分布式任务调度、线程池使用、视频转换 我们有时候在处理视频文件的时候会遇到视频格式转换问题。 1 分布式任务调度 在项目开发中我们想要提升我们项目响应的速度或者想要服务器高效处理一批任务&#xff0c;这个时候就有两种方式&#xff1a; 多线程&#x…

(18)目标检测算法之数据集标签格式转换:json2txt、xml2txt

目标检测算法之数据集标签格式转换&#xff1a;json2txt、xml2txt 目标检测最常见的模型&#xff1a;YOLO&#xff0c;常见的几种标注方式&#xff1a;矩形框、旋转矩形框、实例分割中的多边形标注等类型&#xff0c;根据其标注标签&#xff0c;目标检测主要有以下两种转换方式…

快速读懂网络拓扑图

快速读懂网络拓扑图几重常见的网络拓扑总线型拓扑简介优点缺点环型拓扑简介优点缺点星型拓扑简介优点缺点网络层级机构节点结点链路通路不同的连接线代表什么意思&#xff1f;不同颜色、粗细的直线代表什么意思&#xff1f;闪电线-串行链路几重常见的网络拓扑 总线型拓扑 简介…

创建项目(React+umi+typeScript)

项目框架搭建的方式react脚手架Ant-design官网一、安装方式npm二、安装方式yarn三、安装方式umi devreact脚手架 命令行&#xff1a; npx create-react-app myReactName项目目录结构&#xff1a; 浏览器运行&#xff0c;端口号3000&#xff1a; Ant-design官网 一、安装方…

zk-STARK/zk-SNARK中IP,PCP,IPCP,IOP,PIOP,LIP,LPCP模型介绍

我们的目标是构造 zkSNARK。在我们的目标场景中&#xff0c;Prover 只需要发送一个简短的证明字符串给 Verifier&#xff0c;而 Verifier 不需要给 Prover 发送任何消息。 直接构造一个满足这个场景的 zkSNARK 可能会很困难。一个更灵活的方式是在先在理想模型下构造证明系统&…

SocketPro完整使用教程分享,手把手指导

SocketPro是一款外贸与跨境业务&#xff0c;设计师&#xff0c;海外留学生经常使用的工具。 那么&#xff0c;到底该如何使用SocketPro这款工具&#xff0c;实现自己的业务需求呢&#xff1f;这里放一个以前其他大佬关于SocketPro使用体验的测评: 上面的SocketPro使用测评&…

【Java并发编程】线程安全(一)Synchronized原理

Synchronized底层实现 简单来说&#xff0c;Synchronized关键字的执行主体是线程对象&#xff0c;加锁是通过一个锁对象来完成的是&#xff0c;而锁对象底层关联了一个c源码的monitor的对象&#xff0c;monitor对象底层又对应了操作系统级别的互斥锁&#xff0c;同一时刻只有一…

历时半年,我终于阿里上岸了,附面经和Java非科班学习心得

个人经历 本科双非化学&#xff0c;跨考了电子硕士&#xff0c;研究生依然双非。无互联网实习&#xff0c;无比赛无论文。&#xff08;研究生研究方向是车辆电子和楼宇自动化&#xff0c;有自动化和高校实训讲师相关的实习经历&#xff09; 21年11开始学Java准备秋招。 阿里上…

你真的懂二分法吗?

二分法 二分法非常让我们头痛&#xff0c;不论对于初学者&#xff0c;还是对于有一定编程经验的人来讲&#xff0c;我们都会以为这个思想很简单&#xff0c;而不去在意&#xff0c;可是在实际运用中我们在处理边界条件的时候&#xff0c;往往会要不写出了死循环&#xff0c;要不…

NVM安装与配置教程

一、NVM简介 在项目开发过程中&#xff0c;使用到vue框架技术&#xff0c;需要安装node下载项目依赖&#xff0c;但经常会遇到node版本不匹配而导致无法正常下载&#xff0c;重新安装node却又很麻烦。为解决以上问题&#xff0c;nvm&#xff1a;一款node的版本管理工具&#xf…

Mysql 索引(一)—— 主键索引的底层原理

索引的作用是提升Mysql的检索速度。 如果没有索引&#xff1a;若我们要在几百万条记录中找出一个名为“张三”的人&#xff0c;这个时候我们只能逐条遍历记录&#xff0c;直至找到这个人&#xff1b;如果有索引&#xff1a;假设名为“张三”的人所在记录的索引为 999&#xff…

【构建工具】webpack5 的性能优化和核心流程

文章目录webpack5 构建性能的极致优化一、使用最新版webpack二、使用 lazyCompilation三、约束 Loader 执行范围四、使用 noParse/externals 跳过文件编译五、开发模式禁用产物优化六、最小化 watch 监控范围七、跳过 TS 类型检查八、优化 ESLint 性能九、source-map简化十、设…

Linux:基于libevent读写管道代码,改进一下上一篇变成可以接收键盘输入

对上一篇进行改进&#xff0c;变成可以接收键盘输入&#xff0c;然后写入管道&#xff1a; 读端代码&#xff1a; #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <s…

01-MySQL基础-简介安装navicat使用SQL(DDL、DML、(DCL)、DML)

文章目录MySQL基础1&#xff0c;数据库相关概念1.1 数据库1.2 数据库管理系统1.3 常见的数据库管理系统1.4 SQL2&#xff0c;MySQL2.1~2.4 mysql安装2.5 MySQL数据模型3&#xff0c;SQL概述3.1 SQL简介3.2 通用语法3.3 SQL分类4&#xff0c;DDL:操作数据库4.1 查询4.2 创建数据…

PCL 平面拟合方法 对比

目录 一、最小二乘法 (Least Squares, LS) 二、采样一致性&#xff08;Sample Consensus&#xff09;方法 2.1 pcl::LeastMedianSquares (LMedS) 2.2 pcl::RandomSampleConsensus (RANSAC) 2.3 pcl::MEstimatorSampleConsensus (MSAC) 2.4 pcl::RandomizedRandomSampleCo…

【Tomcat】IDEA编译Tomcat源码-手把手教程

一、环境准备Tomcat不同版本之间有一定的兼容性问题~如下图所示&#xff1a;官网地址&#xff1a;https://tomcat.apache.org/whichversion.html下载tomcat9官网上面的源码&#xff1a;这一篇文章主要是带着大家在自己的IDEA跑起来一个Tomcat。使用的版本是Tomcat9.0.55 和 JDK…

如何写出更加契合浙大MBA项目提面申请资料?

现在已经是2月中旬了&#xff0c;最近看到上海很多院校都已经公布了提前面批次相应时间了&#xff0c;等浙大复试工作结束&#xff0c;马上提前面批次时间也会出来。本人2023浙大提面也拿到了优秀&#xff0c;结合本人经验&#xff0c;今天给大家分享下申请材料该如何撰写&…

【论文阅读】Anti-Adversarially Manipulated Attributions for WSSS

一篇CVPR2021上的论文&#xff0c;用于弱监督分割及半监督分割 论文标题&#xff1a; Anti-Adversarially Manipulated Attributions for Weakly and Semi-Supervised Semantic Segmentation&#xff08;AdvCAM&#xff09; 作者信息&#xff1a; 代码地址&#xff1a; htt…

浅谈volatile关键字

文章目录1.保证内存可见性2.可见性验证3.原子性验证4.原子性问题解决5.禁止指令重排序6.JMM谈谈你的理解6.1.基本概念6.2.JMM同步规定6.2.1.可见性6.2.2.原子性6.2.3.有序性6.3.Volatile针对指令重排做了啥7.你在哪些地方用过Volatile&#xff1f;volatile是Java提供的轻量级的…

【消费战略】解读100个食品品牌丨元气森林 6年百亿的饮品黑马成功之道

元气森林成立于2016年&#xff0c;短短六年时间取得了近百亿营收的奇迹&#xff0c;成为让可口可乐、百事、娃哈哈、农夫山泉等消费巨头都无法忽视的对手。六年的成长堪比行业前辈20多年的积累&#xff0c;从这个角度而言&#xff0c;塔望咨询认为元气森林是成功的&#xff0c;…