复习JavaWeb的Servlet相关知识&Java面试题HashMap链表转红黑树的阈值以及HashMap线程不安全的解决方法&生活【记录一个咸鱼大学生三个月的奋进生活】031

Servlet相关知识

在正式开始之前我们先来回顾一下上一个帖子的内容:

JavaWeb应用是由一组Servlet、JSP、HTML页、web.xml、实用类等以及其它可以被绑定的资源所构成的,
它可以在各种供应商提供的实现Servlet规范的 Servlet容器 中运行


Servlet的定义

而其中的Servlet正是JavaWeb中最常用于处理页面请求的Java类

Servlet的宏观定义: sun公司制定的用java编写web应用程序的规范、技术
Servlet的微观定义: 一个继承自HttpServlet,部署在webServer中可以处理客户端请求的Java类

所以Servlet是一个用Java编写的程序,此程序在服务器上运行以处理客户端请求,它运行在Servlet容器中,Servlet和客户端的通信采用“请求/响应”的模式

Servlet容器

Servlet容器负责Servlet和客户的通信以及调用Servlet的方法

Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据

常用的Servlet容器有:
Tomcat
Resin
J2EE服务器(如Weblogic)中也提供了内置的Servlet容器
jboss

Servlet容器响应客户请求的过程如下图:


Servlet可完成的功能

① 创建并返回基于客户请求的动态HTML页面
② 创建可嵌入到现有HTML 页面中的部分HTML 页面(HTML 片段)
③ 与其它服务器资源(如数据库或基于Java的应用程序)进行通信

Servlet与Java类的区别

刚才也提到过,其实Servlet就是JavaWeb中用于处理页面请求的Java类,虽然本质是Java类但是使用方法与Java类是有很多区别的:
① Servlet要继承HttpServlet,但Java类一般需要继承Object类
② Servlet必须在WebServer中才能运行,但Java类不需要WebServer支持也能运行
③ Servlet可以处理客户端请求,但Java类不能处理客户端请求
④ Servlet启动不需要main函数,但Java类启动需要main函数
⑤ Servlet是由容器创建(new)实例,但Java类一般由我们自己创建实例
⑥ Servlet由容器调用doGet或doPost方法,但Java类是程序员自己调用


Servlet的生命周期

实例化 > 初始化 > 服务 > 销毁 > 不可用

启动服务器时,Servlet容器就创建一个Servlet实例 (实例化)
Servlet调用init()方法 (初始化)
之后的每次操作都会调用service()方法然后根据method值判断执行doGet还是doPost方法 (服务)
最后关闭容器时会执行destroy()方法进行销毁 (销毁)

Servlet的doGet()和 doPost()方法

doGet()方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

doPost()方法:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

前面在Servlet的生命周期中提到过,Servlet之后的每次操作都会调用service()方法然后根据method值判断执行doGet还是doPost方法 (这是Servlet生命周期中的服务过程)
然后需要进行请求响应时就需要重写doGet()和 doPost()方法
这里就会有个问题:为什么经常重写doGet() 或 goPost() 方法而不是重写 service() 方法?
答:因为doGet() 和 goPost() 方法都是被 service() 方法调用,service() 方法判断后最终还是通过doGet() 和 goPost() 方法来处理客户端请求,所以重写doGet() 和 goPost() 方法才能完成具体业务逻辑

doGet()和 doPost()方法的区别

GET请求:
① 用于获取数据
② 将发送的请求参数附着在URL地址后面
③ 传送数据大小有限制,而且能传输的数据容量很小
④ 如果没有特殊处理,会将数据显示在浏览器地址栏
⑤ 通过超链接、表单的method=get形式、直接在浏览器地址栏输入地址产生访问get

POST请求:
① 用于获取数据
② 将发送的请求参数放在请求体中
③ 传送数据大小没有限制
④ 不会将数据显示在浏览器地址栏
⑤ 通过表单的method=post形式、在Ajax应用中指定请求方式为POST产生访问post

所以在平常使用中除了表单提交常用post,其他都是get请求

get请求 的所有参数都放在浏览器地址栏提交,所以不安全,经常是查询等功能使用
post请求 的所有参数都是隐藏的,所以表单提交等功能经常使用

Servlet的注册与运行(web.xml)

Servlet程序必须通过Servlet容器来启动运行,并且储存目录有特殊要求,都需要存储在<WEB应用程序根目录>\WEB-INF\classes\目录中
所以Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问(用eclipse直接新建Servlet时会将web.xml中的该Servlet元素一同配置注册好)

web.xml常用的元素有:


Servlet中设置中文编码

因为Servlet中响应形式默认为text普通文本形式,需要其他输出形式就需要设置响应格式
设置成中文编码格式(常用):response.setContentType(“text/html;charset=UTF-8”)—— 显示html页面,并且编码设置为可以显示中文

WEB-INF的概念

  WEB-INF 是一个特殊的目录(该目录名称所有字母都要大写),他并不能直接进行访问,因为WEB-INF是安全目录,这个目录并不属于Web应用程序可以访问的上下文路径的一部分,但是该目录下的内容可以通过Servlet请求转发进行访问,但是进行重定向不能访问到

学习Java面试题(HashMap链表转红黑树的阈值 以及 HashMap线程不安全的解决方法)

指路陈哈哈大佬的HashMap相关面试题原帖

照片分享

作者:Rudy   作品名:九曲黄河第一弯  出自500px社区









2021.08.22  by wyh

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aspiriln

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值