【Servlet】 一

本文主要介绍了如何在tomcat部署一个webapp 以及 如何借助maven用servlet编写一个hello world .

一.Tomcat

Tomcat是一个Java里广泛使用的http服务器

HTTP服务器有很多实现,其中最知名的是Nginx;而在Java里,最知名的是Tomcat

一个Tomcat服务器上可以部署多个网站 ; 后续学习的servlet,就是依赖tomcat

1.在Tomcat官网下载Tomcat

Apache

apache最早是一个开源的http服务器,后来吸引了很多开源开发者,,这些人构成了一个名为apache的社区,这个社区做了很多知名的程序,Tomcat就是其中一个

tomcat自身也是使用Java写的(跨平台),所以要想运行Tomcat的前提是电脑上必须有jdk!!

2.tomcat各层目录结构

>Tomcat目录

>bin(binary二进制  )

一般是可执行程序(有一些jar包,也有一些脚本文件)

注意框出的这两个文件:

bat后缀:windows上的批处理脚本,在windows上运行这个文件,就可以启动tomcat

sh后缀:linux上的shell脚本,在linux上运行这个文件,就可以启动tomcat

脚本:也就是编程语言,描述了先做什么再做什么.

有的工作需要多个命令配合执行,就需要使用脚本把多个要执行的命令串起来

>Conf(configuration配置)

放了tomcat的配置文件

Server.xml是最主要的配置文件,使用xml格式

很多程序都有配置文件,通过配置来开关/选择/设置某个功能

>lib

都是jar包,也就是tomcat程序运行过程中会使用的内容

>Logs

tomcat的日志文件

>webapps

放网站,把网站放在这个目录下,就可以加载运行这个网站

3.启动tomcat

>双击bin目录下的startup.bat

乱码怎么办?

乱码原因 : tomcat使用的是utf8,而windows cmd默认是gbk

但是改编码方式还是不好操作的,所以当前就凑合用,后续使用idea中的终端来展示tomcat日志就可以避免乱码了

闪退怎么办?

多半是因为没有找到jdk路径

找原因:把startup拖到cmd中,出错就不会闪退,而是会告诉报错信息,根据错误信息配置环境变量即可

环境变量:操作系统维护的一种变量,往往是用于多个进程相互配合的时候,

有一些数据需要交互,就可以使用环境变量(本质上也可以认为是一种进程间通信的手段)

当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

服务器:

* 可能是服务器主机:就是一个电脑,在上面运行着服务器程序,保持开机

* 可能是服务器程序:就是一个程序,绑定了一个端口号,客户端就可以通过ip+端口给服务器发请求

启动服务器,目的就是为了让客户端来对服务器发起请求 ; http服务器的客户端就是浏览器

tomcat默认端口是两个8000,8005(一个服务器可以绑定多个端口)

* 8000是业务端口,http请求就应该发到这个端口上

* 8005是管理端口,则是进行一些管理上的操作

服务器启动之后,我们在浏览器上输入:127.0.0.1:8080就可以访问到tomcat的欢迎页面!

4.部署一个webapp

我们可以给tomcat部署一个简单的webapp

在webapps目录下新建一个文件夹,文件夹中有一个简单的html页面

1.直接双击这个html文件,相当于通过浏览器直接访问磁盘文件打开的网页

2.通过网络的方式访问

通过网络的方式访问:是可以跨主机的。

tomcat对于Java有一定的支持,方便程序员编写后端的程序,比如他提供了一系列的api接口,这些api背后已经把一些基础的工作做好了,java程序员只要调用上述api通过少量的代码,就可以完成基本的http服务器的核心功能

tomcat把这组api称为Servlet

二.Servlet

20年前是网站开发的一种主力技术;现在已经逐渐被spring代替了

虽说如此,Servle仍然有学习的价值,因为

1.spring作为一个框架,底层仍然是需要调用servlet里的一些api

熟悉servlet有助于理解spring工作原理 ; 包括spirng有些接口也会暴露servlet一些影子

2.学习servlet,不仅仅是学习servlet api本身,更主要是学习web开发!


动态页面 静态页面

 * 静态页面:页面内容始终不变(这种已经比较少了)

 * 动态页面:页面结构相似,但是页面内容是不同的 , 往往是在请求发起的时候,由服务器通过一系列运算,动态生成的页面

servlet主要解决的问题就是为了实现动态页面

难点:编写一个最简单的servlet的hello world!


三.编写hello world 

1.创建项目

我们创建一个maven项目 ( maven是一个构建工具 )

程序编写过程中,往往涉及到一些第三方库的依赖,另外需要针对程序打包部署 , 这两个工作我们可以交给maven来完成 ! 

maven的意义:方便的进行依赖管理和打包

2.引入依赖

当前的代码要使用servlet开发,而servlet并不是java标准库自带的,所以就需要让maven能把servlet的依赖获取过来

>先找到maven的中央仓库 , 复制对应版本的servlet依赖

https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api

servlet的版本和tomcat的版本是对应的 , 根据自己的tomcat版本下载对应的servlet版本( 具体对应表百度一下~) 

Tomcat8使用servlet3.1

>手动创建一个依赖标签,把坐标复制进去,此时idea会自动通过maven从中央仓库下载这里的依赖 (第一次进去可能是红的,因为没下载完,此时也可以手动刷新)

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

tomcat对于Servlet项目,是有一些额外的要求

maven可以管理的不仅仅是servlet项目,还有其他的 , 因此对于servlet项目,可以创建出一些特定的目录/文件

web.xml内容固定,只需要从别的项目复制就行 , 下面是一个范例:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

   
</web-app>

4.编写代码

这个方法不需要手动调用

doget本质是一个回调函数

把这个方法写好之后就会交给Tomcat,tomcat在收到一个合适的GET请求就会自动调用doget

调用doget的时候,tomcat就会解析这次HTTP请求,生成一个httpServletRequest对象

这个对象的属性啥的都是和http协议格式匹配的(相当于tomcat帮我们把http请求解析好了)

同时,tomcat会构造出一个空的HttpServletResponse 对象, 这个对象也会传递到doget里面 ;

 doget所做的事情 : 根据这次请求,计算出响应;

doGet : 根据req里不同的参数的细节,生成一个具体的resp对象(往空对象里设置属性)tomcat根据这个响应对象,转换成符合http协议的响应报文,返回给浏览器了

Tomcat在合适的时机自动调用doGet

1.请求的方法,是否是GET

一般来说不同的请求方法,在Servlet也会有对应的方法

2.请求的路径 url后面带有层次结构的路径

一个Servlet程序里,可能有多个Servlet类 ; 这些Servlet类,就需要在不同的情况下被执行

添加这个注解:

当请求的路径中带有hello时,才能执行到HelloServlet的代码,不同的Servlet类就可以关联到不同的路径 ! ! ! 

总结:

doget要做的事情,就是根据请求计算响应


疑问:

为什么不需要main 方法?

Servlet程序,不需要main方法

实际上,main方法其实是在tomcat里面,我们写的doGet方法都是让tomcat调用的


5.打包程序

程序需要放到tomcat上运行,就需要对程序进行打包(达成一个能被tomcat识别的格式)

打包,也是借助maven完成的.

Maven -> LifeServlet -> 双击package

>打包成功

>查看

maven中默认打包方式生成的是jar包(里面就是一些.class文件)

但是tomcat需要的是war包(本质和jar差不多,里面会包含一些前端代码/tomcat配置) , 所以需要在pom.xml里面修改一些东西

>修改之后再重新打包

>war包生成成功,查看

6.部署

把这个war包放到webappa里面

可这个war包复制到tomcat的webapps目录下,tomcat就会识别并且自动对这个war包进行解压

7.验证程序能能否正常工作

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

在浏览器输入以下这个路径:

 * java108test:称为context path/application path ,用来区分一个webapp

  * hello: servler path , 和@WebServlet注解是对应的

通过上述七个步骤,hello world就编写完了 !

注意:

如果浏览器一直转圈圈,很有可能是cmd的问题

总结上述步骤:


看起来还是比较麻烦的 , 好在上述的过程spring做出了简化的效果 ! 

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

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

相关文章

【K8S】二进制安装

常见的K8S安装部署方式 ●Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用。 部署地址&#xff1a;https://kubernetes.io/docs/setup/minikube ●Kubeadm☆ Kubeadm也是一个工具&#xff0c;提…

LInux之在同一Tomcat下使用不同的端口号访问不同的项目

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《LInux实战开发》。&#x1f3af;&#x1f3af; …

Vue入门——核心知识点

简介 Vue是一套用于构建用户界面的渐进式JS框架。 构建用户界面&#xff1a;就是将后端返回来的数据以不同的形式(例如&#xff1a;列表、按钮等)显示在界面上。渐进式&#xff1a;就是可以按需加载各种库。简单的应用只需要一个核心库即可&#xff0c;复杂的应用可以按照需求…

transformers-AutoClass

https://huggingface.co/docs/transformers/main/en/autoclass_tutorialhttps://huggingface.co/docs/transformers/main/en/autoclass_tutorialAutoClass可以自动推断和加载给定checkpoint的正确架构。 对于文本&#xff0c;使用Tokenizer将文本转换为token序列&#xff0c;创…

IDEA中application.properties文件中文乱码

现象&#xff1a; 原因&#xff1a; 项目编码格式与IDEA编码格式不一致导致的 解决办法&#xff1a; 在File->Settings->Editor->File Encodings选项中&#xff0c;将Global Encoding,Project Encoding,Default encoding for properties files这三个选项置为一致&a…

通过netstat命令查看Linux的端口占用

一、netstat 完整写作network statistics&#xff0c;简写为netstat &#xff0c;常用的几个参数为l、n、t、u、p。 -l &#xff1a; 仅展示监听状态下的程序(state 为LISTEN)。 -n &#xff1a;会使用ip端口的方式&#xff0c;来进行地址的描述。不使用-n就会变成服务器的名称…

毕业设计基于SpringBoot+Vue智慧云办公系统源码+数据库+项目文档

智慧云办公管理系统 一、系统简介 智慧云办公系统是一个采用SpringBootVue技术开发的前后端分离的项目&#xff0c;云办公系统通过软件的方式&#xff0c;方便快捷处理中小型企业的公司日常事务&#xff0c;能够提高整体的管理运营水平&#xff0c;使得办公更加高效方便&…

随想录一刷·数组part1

你好&#xff0c;我是安然无虞。 文章目录 1. 二分查找题型2. 移除元素题型 1. 二分查找题型 二分查找传送门 class Solution { public:int search(vector<int>& nums, int target) {// 在有序数组中查找第一时间想到二分查找int left 0, right nums.size() - 1…

虚拟机部署与发布J2EE项目(Linux版本)

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.jdk安装配置 打开虚拟机 Centos 登入账号&#xff0c;并且使用MobaXterm进行连接 1.1. 传入资源 连接…

单元化架构的思考

银行业“多活”的发展历程 受监管政策的要求&#xff0c;银行一般会在同城、异地或者多地进行数据中心建设&#xff0c;以保证系统的稳定运行&#xff0c;但从目前实际情况来看&#xff0c;“同城双活”目前仍是很多银行采用的主要形式。银行业的“多活”架构在发展过程中存在三…

Stable Diffusion WebUI扩展openpose-editor如何使用

先上地址: GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webuiOpenpose Editor for AUTOMATIC1111s stable-diffusion-webui - GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webu…

高校教务系统登录页面JS分析——天津大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍天津大学教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密…

第2篇 机器学习基础 —(4)k-means聚类算法

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。聚类算法是一种无监督学习方法&#xff0c;它将数据集中的对象分成若干个组或者簇&#xff0c;使得同一组内的对象相似度较高&#xff0c;不同组之间的对象相似度较低。聚类算法可以用于数据挖掘、图像分割、文本分类等领域…

Prometheus+Grafana

一、Prometheus 获取配置文件 docker run -d -p 9090:9090 --name prometheus prom/prometheusmkdir -p /app/prometheusdocker cp prometheus:/etc/prometheus/prometheus.yml /app/prometheus/prometheus.yml停止并删除旧的容器&#xff0c;重新启动 docker run -d --name…

什么是NPM(Node Package Manager)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

sort的第三个参数与priority_queue的第三个模板参数

sort 在C的标准库中&#xff0c;std::sort是一个用于对容器的元素进行排序的算法。它接受三个参数&#xff1a; 1、需要排序的容器的起始迭代器&#xff08;包含&#xff09;。 2、需要排序的容器的结束迭代器&#xff08;不包含&#xff09;。 3、可选参数&#xff0c;用于指…

腾讯云轻量应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像介绍

腾讯云轻量应用服务器镜像类型分为应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像&#xff0c;腾讯云百科txybk.com来详细说下不同镜像类型说明和详细介绍&#xff1a; 轻量应用服务器镜像类型说明 腾讯云轻量应用服务器 应用镜像&#xff1a;独有的应用镜像除了包…

[PHP]pearProject协作系统 v2.8.14 前后端

pearProject是一款轻量级的在线项目/任务协作系统&#xff0c;远程办公协作。 概述 PearProject 不支持 IE8 及以下版本&#xff0c;建议使用基于Webkit内核的现代浏览器访问 PearProject 为前后端分离架构&#xff0c;因此安装分为后端和前端两大部分&#xff0c;需要分别进…

艾奇免费KTV电子相册视频制作软件

不得不承认功能特色支持添加导入图形、视频、歌曲、卡啦ok动态歌词字幕文件&#xff1a;图形文件格式支持导入jpg/jpeg/png/bmp/gif等静态图形&#xff1b;视频文件支持导入AVI/MP4/FLV/MTS/MPG/RMVB等几乎所有常见视频文件&#xff1b;歌曲格式支持mp3/wma/acc/ogg/wav等几乎所…

基于SC-LeGO-LOAM的建图和ndt_localizer的定位

link 基于SC-LeGO-LOAM的建图和ndt_localizer的定位 链接: link. SC-LeGO-LOAM 链接: link. ndt_localizer 将建图和定位两部分分开&#xff0c;利用SC-LeGO-LOAM进行建图&#xff0c;相比于LeGO-LOAM&#xff0c;其采用了Scan Context方法&#xff0c;对点云地图进行闭环检测和…