JavaEE-初识Servlet

news/2024/4/19 21:43:08/文章来源:https://blog.csdn.net/weixin_61341342/article/details/129169739

目录

  • 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 {@Overrideprotected 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.luyixian.cn/news_show_72767.aspx

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

相关文章

阅读笔记7——Focal Loss

一、提出背景 当前一阶的物体检测算法&#xff0c;如SSD和YOLO等虽然实现了实时的速度&#xff0c;但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢&#xff1f;何凯明等人将其归咎于正、负样本的不平衡&#xff0c;并基于此提出了新的损失函数Focal L…

支持向量机SVM详细原理,Libsvm工具箱详解,svm参数说明,svm应用实例,神经网络1000案例之15

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例&#xff0c;基于SVM的股票价格预测 支持向量机SVM的详细原理 SVM的定义 支持向量机&#xff08;support vector machines, SVM&#xff09;是一种二分类模型&a…

Linux文件系统操作与磁盘管理

查看磁盘和目录的容量 使用 df 命令查看磁盘的容量 df在实验楼的环境中你将看到如下的输出内容&#xff1a; 但在实际的物理主机上会更像这样&#xff1a; 物理主机上的 /dev/sda2 是对应着主机硬盘的分区&#xff0c;后面的数字表示分区号&#xff0c;数字前面的字母 a 表示…

《JeecgBoot系列》 如何设计表单实现“下拉组件二级联动“ ? 以省市二级联动为例

《JeecgBoot系列》 如何设计表单实现"下拉组件二级联动" ? 以省市二级联动为例 一、准备字典表 1.1 创建字典表 CREATE TABLE sys_link_table ( id int NULL, pid int NULL, name varchar(64) null );1.2 准备数据 idpidname1全国21浙江省32杭州市42宁波市51江苏…

投出1000份简历,苦于软件测试没有项目经验,全部石沉大海,辞职5个月,我失业了......

想要找一份高薪的软件测试工作&#xff0c;简历项目必不可少&#xff08;即使是应届生&#xff0c;你也要写上实习项目&#xff09;。所以很多自学的朋友找工作时会碰到一个令人颇感绝望的拦路虎&#xff1a;个人并没有实际的项目工作经验怎么办&#xff1f; 怎么办&#xff1f…

Kotlin新手教程九(协程)

一、协程 协程从Kotlin1.3开始引入&#xff0c;本质上协程就是轻量级的线程。协程的基本功能点有&#xff1a; 轻量&#xff1a;可以在单个线程上运行多个协程&#xff0c;因为协程支持挂起&#xff0c;不会使正在运行协程的线程阻塞。挂起比阻塞节省内存&#xff0c;且支持多…

python -- 魔术方法

魔术方法就算定义在类里面的一些特殊的方法 特点&#xff1a;这些func的名字前面都有两个下划线 __new__方法 相当于一个类的创建一个对象的过程 __init__方法 相当于为这个类创建好的对象分配地址初始化的过程 __del__方法 一个类声明这个方法后&#xff0c;创建的对象如果…

缺少IT人员的服装行业该如何进行数字化转型?

服装行业上、下游产业链长&#xff0c;产品属性复杂&#xff0c;是劳动密集型和技术密集型紧密结合的产物&#xff0c;是典型的实体经济代表。 近二十年是服装业发展的机遇和挑战之年&#xff0c;从“世界工厂”“中国制造”&#xff0c;逐渐向“中国设计”转变,中国服装产业经…

c++常用stl算法

1、头文件 这些算法通常包含在头文件<algorithm> <functional> <numeric>中。 2、常用遍历算法 for_each(v.begin(),v.end(), 元素处理函数/仿函数) 注意&#xff1a;在使用transform转存时&#xff0c;目标容器需要提取开辟合适的空间。 void printfunc(…

数学小课堂:数学的线索(从猜想到定理再到应用的整个过程)

文章目录 引言I 勾股定理1.1 勾三股四弦五1.2 数学和自然科学的三个本质差别1.3 总结引言 从猜想到定理再到应用的整个过程是数学发展和体系构建常常经历的步骤。 I 勾股定理 勾股定理: 直角三角形两条直角边的平方之和等于斜边的平方,这个定理在国外都被称为毕达哥拉斯定理…

渗透中超全的Google hack语法

inurl:Login 将返回url中含有Login的网页intitle:后台登录管理员 将返回含有管理员后台的网页intext:后台登录 将返回含有后台的网页inurl:/admin/login.php 将返回含有admin后台的网页inurl:/phpmyadmin/index.php 将返回含有phpmyadmin后台的网页site:http://baidu.com inur:…

云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM

前言&#xff1a; FusionCompute架构 (CNA、VRM) CNA(ComputingNode Agent):计算节点代理VNA虚拟节点代理&#xff0c;部署在CNA上&#xff0c;实施计算、存储、网络的虚拟化的配置管理。VRM(Virtual Resource Manager):虚拟资源管理器 VNA可以省略不安装 本次实验使用的是V…

还在用chatGPT聊天?《元宇宙2086》已开始用AIGC做漫画连载了!

ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序&#xff0c;于 2022 年 11 月推出。该程序使用基于 GPT-3.5架构的大型语言模型并通过强化学习进行训练。 ChatGPT 目前仍以文字方式互动&#xff0c;而除了可以透过人类自然对话方式进行交互&#xff0c;还可以用于相对复…

关于微前端,你想知道的都在这!

更多请关注微前端专题 https://codeteenager.github.io/Micro-Frontends/ 介绍 微前端官网&#xff1a;https://micro-frontends.org/ 问题&#xff1a;如何实现多个应用之间的资源共享&#xff1f; 之前比较多的处理方式是npm包形式抽离和引用&#xff0c;比如多个应用项目之…

EMR Studio Workspace 访问 Github ( 公网Git仓库 )

EMR Studio Workspace访问公网Git仓库 会遇到很多问题,由于EMR Studio不能给出任何有用的错误信息,导致排查起来非常麻烦。下面总结了若干项注意事项,可以避免踩坑。如果你遇到了同样的问题,请根据以下部分或全部建议去修正你的环境,问题即可解决。本文地址:https://laur…

因子的有效性检验(IC)

使用神经网络的预测值作为因子载荷&#xff08;因子暴露&#xff0c;因子值 factor&#xff09;时&#xff0c; 我们需要知道这个因子是否是有效的&#xff0c;所以要做因子的有效性检验。 当前的学术论文给出的IC&#xff0c; rankIC 这些都是属于判断因子是否有效的metric 因…

gdb的简单练习

题目来自《ctf安全竞赛入门》1.用vim写代码vim gdb.c#include "stdio.h" #include "stdlib.h" void main() {int i 100;int j 101;if (i j){printf("bingooooooooo.");system("/bin/sh");}elseprintf("error............&quo…

面向对象的程序设计C++课堂复盘总结 C语言复习+C++基础语法

Stay Hungry&#xff0c;Stay Foolish. 任何人都能写出机器能看懂的代码&#xff0c;但只有优秀的程序员才能写出人能看懂的代码。 有两种写程序的方式&#xff1a;一种是把代码写得非常复杂&#xff0c;以至于 “看不出明显的错误”&#xff1b;另一种是把代码写得非常简单&am…

DolphinScheduler第一章:环境安装

系列文章目录 DolphinScheduler第一章&#xff1a;环境安装 文章目录系列文章目录前言一、环境准备1.上传文件2.数据库配置3.配置安装文件二、集群部署1.数据部署2.部署 DolphinScheduler3. DolphinScheduler 启停命令总结前言 我们现在开始学习hadoop中的DolphinScheduler组…

Spring Cloud Nacos源码讲解(一)- Nacos源码分析开篇

Nacos源码开篇 Nacos服务注册与发现源码剖析 Nacos核心功能点 服务注册&#xff1a;Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务&#xff0c;提供自身的元数据&#xff0c;比如ip地址、端口等信息。Nacos Server接收到注册请求后&#xff0c;就会把这…