【Servlet篇2】创建一个web项目

news2025/1/16 0:55:59

在上一篇文章当中,已经提到了什么是Maven,以及如何使用maven从中央仓库下载jar包。
【Tomcat与Servlet篇1】认识Tomcat与Maven_革凡成圣211的博客-CSDN博客Tomcat,mavenhttps://blog.csdn.net/weixin_56738054/article/details/129228140?spm=1001.2014.3001.5502

下面,将介绍一下如何通过maven引入依赖,也就是idea集成Tomcat的步骤:


Idea集成Tomcat

第一步:下载依赖

首先,需要在maven中央仓库当中找到servlet对应的jar包。

maven中央仓库的地址已经在上一篇文章当中提到了。

 然后,选择3.1.0版本

其中,Tomcat,jdk,servlet三者对应的版本一定要互相匹配。

给一个比较吻合的版本参考:

Tomcat(8.5版本),JDK(1.8版本),servlet(3.1.0)

然后把Tomcat的maven依赖复制到pom.xml文件当中。


第二步:创建目录结构

一、在main目录下面创建一个webapp目录

这一个目录(webapp)用于存放一些配置目录资源,或者前端代码。


二、在webapp下面再新建一个WEB-INF目录

这一个目录(WEB_INF)是用来存放web项目的的配置文件的。可以先创建一个试一下:

然后,必须要再web.xml当中再加上下面这一段代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
</web-app>

做完上述的工作之后,就可以来编写一个Servlet版本的hello world程序了。 


编写Servlet

第一步:创建一个Servlet类,让它继承于HttpServlet

找到目录结构当中蓝色的那一个Java目录,新建一个类。

 这一个HttpServlet,就是在刚刚maven导入的Servlet的jar包当中包含的类。


第二步:让这一个Servlet重写父类的doGet方法

       doGet的含义就是,"处理一个get请求":根据请求计算响应

       这一个方法就是在Tomcat收到了一个get请求的时候,会交给这个doGet方法处理。

       关于什么是get请求,已经在这一篇文章当中提到了:【网络原理8】HTTP请求篇_革凡成圣211的博客-CSDN博客HTTP的常见属性,URL,User-Agent,Refer,get 和post的区别https://blog.csdn.net/weixin_56738054/article/details/129180661?spm=1001.2014.3001.5502       doGet方法里面有两个参数,一个是HttpServletRequest req,另外一个HttpServletResponse resp。这两个参数,一个代表接收请求req,另外一个代表作出响应resp。

      


doGet方法的工作流程

       简单来说:就是根据请求做出响应。使用req对象来接收用户提交的请求,然后在doGet方法内部根据这一个请求,然后使用resp对象计算出响应。

对于req:

       此时Tomcat已经收到了HTTP请求,解析成对象了,这个对象就是HttpServletRequest req

对于resp:

       在刚刚由req对象收到请求之后,当前的resp是一个空的响应对象,没有被设置任何的属性。当需要返回响应的时候,就会通过resp来设置属性,然后返回给前端


第三步:编写代码

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello world");

        resp.getWriter().write("hello world");
    }

   在上述的代码当中,使用的是resp.getWriter().write(输出内容)的方式。

   其中,resp.getWriter()返回的就是一个流对象,也就是PrintWriter对象

   通过这个流对象来输出到页面上面


第四步:在类名上面添加注解:@WebServlet(文件资源路径)

文件资源路径指的是URL的域名往后的部分。 此处的文件资源路径为/hello。

       这个注解的含义就是:把当前的HelloServlet这个类,和HTTP请求当中的URL里面带有/hello这样的请求给关联起来。也就在URL请求地址的文件资源目录当中标注上一个/hello这样的资源。

       也许Tomcat会收到很多请求,诸如:/a,/b.....但是,只有出现了/hello。这一个请求才会到达当前的这个类当中。

        但是,如果为了到达doGet方法,还是需要保证当前这个请求一定是get请求


第五步:把项目进行打包

在打包之前,还需要在pom.xml文件当中,指明打包的类型:此处选择打包成war类型

需要使用<packaging>war</packaging>

然后,需要在最下面指定build的war包的名称。

 

然后,双击右侧的package:

 打包成功之后,在左侧的target部分,就可以找到刚刚打的jar包了:

然后,把这一个war包放置到Tomcat的webapps目录下面:

然后,在bin目录当中双击start_up。

 可以看到,此时出现了hello106.war,说明部署成功了。


 第六步:打开浏览器进行验证

 在浏览器当中输入:

 localhost:8080/hello106/hello

 就可以看到运行的结果了。

 同时,可以看到start_up的控制台下面,出现了hello world:

 


 开发环境、测试环境、生产环境的区别

  当程序员开发一个软件的时候,就是打开idea,然后编写代码。

  下面,先了解一下开发环境:

   在开发环境当中,一般都使用idea集成tomcat

   

       然后在测试环境下面,就没有idea了,只剩下一个tomcat运行着单独的一个war包。这个时候,war包和tomcat都在云服务器上面。

      

    到了生产环境,就出现了多个tomcat同时运行多个war包的情况了:

    可以看到,在实际开发当中,是不会使用到idea了


 

 

 

 

 

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

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

相关文章

vue 3 第六章:to全家桶

文章目录1. toRef1.1. 使用toRef函数2. toRefs2.1. 使用toRefs函数3. toRaw3.1. 使用toRaw函数1. toRef 将一个对象中的属性转换成单独的响应式引用接收两个参数&#xff1a;参数一 > 对象 参数二 > 属性转换后的响应式引用会跟踪原始属性的变化转换后的响应式可以被用于…

Mysql从基础入门(1)之数据库建表和增删改

文章目录数据库的介绍1.ER图2.约束Mysql常用命令数据库定义&#xff08;DDL&#xff09;1.DDL操作数据库2.DDL操作表操作数据&#xff08;DML&#xff09;1. 添加数据2. 修改数据3. 删除数据数据库的介绍 数据库&#xff1a;存储和管理数据的仓库&#xff0c;数据是有组织的进…

java 2(程序流程控制)【含例题详解】

java ——程序流程控制 ✍作者&#xff1a;电子科大不知名程序员 &#x1f332;专栏&#xff1a;java学习指导 各位读者如果觉得博主写的不错&#xff0c;请诸位多多支持&#xff1b;如果有错误的地方&#xff0c;欢迎在评论区指出 目录java ——程序流程控制分支结构if-elsesw…

【Redis学习1】Redis安装

Redis基础 什么是Redis REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-…

什么是钉钉消息推送?

我是3y&#xff0c;一年CRUD经验用十年的markdown程序员&#x1f468;&#x1f3fb;‍&#x1f4bb;常年被誉为职业八股文选手 在前阵子我就已经接入了钉钉的群机器人和工作消息推送&#xff0c;一直没写文章同步到给大家。 像这种接入渠道的工作&#xff0c;虽然我没接入过&…

jQuery 常用API

jQuery 常用API Date: January 19, 2023 Sum: jQuery选择器、样式操作、效果、属性操作、文本属性值、元素操作、尺寸、位置操作 目标&#xff1a; 能够写出常用的 jQuery 选择器 能够操作 jQuery 样式 能够写出常用的 jQuery 动画 能够操作 jQuery 属性 能够操作 jQuery…

Linux教程:基本命令学习

文章目录基本操作命令vim使用Linux yum&apt命令本文采用在Windows操作系统上安装虚拟机Vmware以及Centos的方式。 基本操作命令 登录root [swxlocalhost ~]$ su 密码&#xff1a; [rootlocalhost swx]查看文件夹目录 [rootlocalhost swx]# ls FATE Python-3.…

【ROS学习笔记7】ROS中的常用命令行

【ROS学习笔记7】ROS中的常用命令行 文章目录【ROS学习笔记7】ROS中的常用命令行前言一、rosnode二、rostopic三、rosmsg四、rosservice五、rossrv六、rosparam七、Reference写在前面&#xff0c;本系列笔记参考的是AutoLabor的教程&#xff0c;具体项目地址在 这里 前言 机器…

C++ STL 之双向队列 deque 详解

文章目录Part.I AttentionPart.II FuncitonPart.III CodePart.I Attention deque 是 double-ended queue 的缩写&#xff0c;意即双端队列&#xff0c;详细信息参见官网。deque<T>容器适配器是必须要包含头文件#include <deque>deque相较于vector&#xff1a;①它不…

使用eNSP搭建校园网

哈喽&#xff0c;今天写一篇文章记录一下课上进行的实验说实话&#xff0c;上早八这个脑子他是真的不带转的&#xff0c;家人们有没有什么好方法&#xff0c;能在早八的时候把脑子转起来&#x1f622; 好了&#xff0c;讲一下实验背景。 学校有东西两个校区&#xff0c;东校区…

一文吃透 Spring 中的 AOP 编程

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

C++ STL:容器 Container

文章目录1、序列容器1.1、容器共性1.2、vectorvector 结构* vector 扩容原理* vector 迭代器失效1.3、dequedeque 结构deque 迭代器deque 模拟连续空间1.4、listlist 特殊操作list 结构list 迭代器2、关联式容器2.1、容器共性2.2、容器特性3、无序关联式容器3.1、容器共性3.2、…

【剑指offer】JZ5 替换空格、JZ6 从尾到头打印链表

目录 JZ5 替换空格 思路&#xff1a; 解题步骤&#xff1a; JZ6 从尾到头打印链表 思路&#xff1a; 解题步骤 JZ5 替换空格 描述&#xff1a; 请实现一个函数&#xff0c;将一个字符串s中的每个空格替换成“%20”。 例如&#xff0c;当字符串为We Are Happy.则经过替换之…

LibAFL的安装及基本使用

本教程安装LibAFL使用的是Ubuntu 22.04 操作系统 1. 安装 1.1 Rust 安装 Rust的安装&#xff0c;参照Rust官网&#xff1a;https://www.rust-lang.org/tools/install curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh1.2 LLVM安装 直接apt安装&#xff0c;安…

Day903.自增主键不能保证连续递增 -MySQL实战

自增主键不能保证连续递增 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于自增主键不能保证连续递增的内容。 MySql保证了主键是自增&#xff0c;但不相对连续&#xff1b;帮助开发人员快速识别每个行的唯一性&#xff0c;并提高查询效率。 自增主键可以让主键索引…

2023上半年北京/上海/广州/深圳NPDP产品经理认证报名

产品经理国际资格认证NPDP是国际公认的唯一的新产品开发专业认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年…

【GUI】Robo 3T(Studio 3T Free) for Mongodb安装与使用教程

下载 robo 3T现已更名为studio 3T free&#xff0c;官网即可下载 studio 3T free下载地址 安装 mac电脑下载的是dmg安装包&#xff0c;直接正常安装即可&#xff0c;windows电脑也是一样的&#xff0c;不需要配置环境&#xff0c;安装即可使用。&#xff08;前提是你已经安装…

【C++】二叉搜索树的模拟实现

一、概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值它的左右子树也分别…

Python---time模块

专栏&#xff1a;python 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;Python在学&#xff0c;希望能够得到各位的支持&#xff01;&#xff01;&#xff01; time模块前言时间戳time.time()将时间戳转换成字符串time.ctime()将时间戳转换为元组time.localtime(时间戳)将元…

大四、非计算机专业,Python该怎么学?

我是非计算机专业&#xff0c;大四时开始学Python&#xff0c;用了大概一个半月时间&#xff0c;现在从事数据挖掘工作&#xff0c;算是有点发言权。虽然之前学了点C&#xff0c;但仅仅是皮毛&#xff0c;为了应付考试&#xff0c;所以我基本是零基础开始学Python的。 总结学习…