【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做出了简化的效果 ! 

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

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

相关文章

快速入手maven

文章目录 Maven介绍Maven安装和配置基于IDEA的Maven工程创建梳理Maven工程GAVP属性Idea构建Maven JavaSE工程Idea构建Maven JavaEE工程1. 手动创建2. 插件方式创建 Maven工程项目结构说明Maven核心功能依赖和构建管理依赖传递和冲突依赖导入失败场景和解决方案扩展构建管理和插…

HDFS架构介绍

数新网络_让每个人享受数据的价值浙江数新网络有限公司是一家开源开放、专注于云数据智能操作系统和数据价值流通的服务商。公司自主研发的DataCyber云数据智能操作系统&#xff0c;主要包括数据平台CyberData、人工智能平台CyberAI、数据智能引擎CyberEngine、数据安全平台Cyb…

振弦传感器智能化:电子标签模块

振弦传感器智能化&#xff1a;电子标签模块 稳控科技研发并批量生产的振弦采集模块解决了传感器由模拟信号直接转变为数字信号的难题。近年来&#xff0c;振弦传感器为适应用户需求&#xff0c;不断迭代更新技术&#xff0c;使学习和使用成本非常低&#xff0c;且带来方便快捷…

创建超过1G内存大小的程序

正常情况一个进程最大占用内存为1G一下&#xff0c;如果程序有需求要使用超过1G大小的程序&#xff0c;可进行如下操作 VS修改设置&#xff1a;属性--->链接器--->系统--->启用大地址 【选择是】 测试申请堆内存代码 #include <stdlib.h> #include <stdio…

redis 网课笔记

缓存 缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库。 解决方案 给不同的key的TTL添加随机值利于Redis集群提高服务的可用性 哨兵模式、集群模式给缓存业务添加降级限流策略 ngxin或spring cloud gateway给业务…

05 # 手写 bind

bind 干了什么&#xff1f; 改变 this 指向没有让函数执行&#xff0c;返回一个改变 this 指向后的函数 bind 难点在于参数的收集 手写 bind 简单实现如下&#xff1a; <script>Function.prototype.kaimoBind function (content) {// 获取到 bind 里的剩余参数let …

Linux C语言进阶-D3~D4字符串处理函数

求字符串长度函数strlen、字符串拷贝strcpy、字符串连接strcat、字符串比较strcmp 头文件<string.h> 求字符串长度strlen函数 1、计算字符串长度&#xff0c;并且遇到\0结束&#xff0c;返回字符串长度 2、 计算字符串长度&#xff0c;遇到转义字符&#xff0c;\不算在内…

EVM6678L 开发教程: IBL-TFTP 引导 elf 文件

目录 EVM6678L 开发教程: IBL-TFTP 引导 elf 文件安装 Tftpd64测试工程测试说明 EVM6678L 开发教程: IBL-TFTP 引导 elf 文件 参考: "C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\i2c\tftp\docs\README.txt" 此教程介绍如何在 EVM6678L 开发板上实现 IBL-…

开关电源测试过压保护的测试标准及其方法

过压保护的原理 过压保护是电压超过预定值时降低电压的一种方式&#xff0c;原理是通过电路中的电压检测电路来检测电路中的电压是否超过了设定的阈值&#xff0c;如果超过了阈值&#xff0c;就会触发过压保护器件&#xff0c;使电源断开或使受控设备电压降低&#xff0c;保护电…

docker--基本操作

第 1 章 Docker基础 1.1 docker简介 在这一部分我们主要讲两个方面&#xff1a; docker是什么、docker特点 1.1.1 docker是什么 docker是什么&#xff1f; docker的中文解释是码头工人。 官方解释&#xff1a; Docker是一个开源的容器引擎&#xff0c;它基于LCX容器技术&…

【Unity】【VR开发疑难】Unity运行就报无法启动XR Plugin

【现象】 连接Link后运行Unity的VR项目Link也无反映&#xff0c;Unity控制台报&#xff1a;无法启动XR Plugin&#xff0c;并说是由于Oculus头盔未连接导致。 【分析】 打开Oculus PC客户端&#xff0c;发现状态是连接正常。重启机器后&#xff0c;提示Oculus没有出于RunTim…

【算法|滑动窗口No.4】leetcode 485.最大连续 1 的个数 487.最大连续 1 的个数 II 1004. 最大连续1的个数 III

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…