JavaWeb 02_servlet基础
1. servlet是什么?作用?
1) Servlet 是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案I而具体的Servlet容器负责提供标准的实现。
2] Servlet 作为服务器端的一个组件, 它的本意是“服务器端的小程序”。Servlet 的实例对象由Servlet容器负责创建; Servlet的方法由容器在特定情况下调用; Servlet容器会在Web应用卸载时销毁Servlet 对象的实例。
3)简单可以理解为 Servlet 就是用来处理客户端的请求的.。
<!--配置LoginServlet :配置LoginServlet与处理的请求的映射.
客户端请求匹配的过程:
与<ser1vet-mapping>中的< ur1- pattern>进行匹配,匹配到以后, 再找到< serv1et -mapping>
中的<servlet-name>的值,再拿上该值到sservlet >节点中匹配相同的<servlet - name>,进而
找到<servlet-class>.
Tomcat通过反射的方式创建LoginServlet的实例,根据具体的请求方式调用对应的doGet或者是doPost方法.
-->
是一个运行在服务器端(web容器)中的一个类,要web容器调用(规定servlet必须提供一个service方法)如何规定servlet有service方法?servlet必须实现servlet接口,所继承的HttpServlet类实现servlet接口。
实现一个servlet可以基础自HttpServlet这个类,也可以直接实现servlet接口。提倡用继承的方式更简化编码。
@WebServlet(name = "helloServlet", value = "/hello-servlet")
这个注解是帮助把URL地址解析成对应的servlet的
HttpServletRequest: 代表客户端请求数据对象 为ServletRequest的子集
HttpServletResponse: 代表服务端的响应数据对象 为ServletResponse的子集
resp.setContentType("text/html");
1] HttpServletRequest
①该接口是ServletRequest接口的子接口,封装了HTTP请求的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest reg, ServletResponse res)方法中。以下我们所说的HtpServletRequest. 对象指的是容器提供的HttpServletRequest.实现类对象。
②HttpServletRequest 对象的主要功能有
获取请求参数
在请求域中绑定数据
将请求转发给另外一个URL地址[转发]。
2] [ HittpServletResponse]
①该接口是ServletResponse接口的子接口,封装了HTTP响应的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest reg, ServletResponse res)方法中。以下我们所说的HttpServletResponse. 对象指的是容器提供的
HttpSservletResponse.实现类对象
②主要功能
使用PrintWriter,对象向浏览器输出数据
实现请求的重定向重定向
2. 乱码
字符存储时以二进制格式表示,字符和二进制的对应关系就是编码。不同的文字有不同的编码。
由于现在的request属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认
使用的编码方式为ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设
置request中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码
格式还原。

3. 判断用户是已经登录的用户?
web协议是无连接协议(请求--- 建立连接----响应---关闭连接)
每个用户建立一个会员信息 Session
Request.getSession(); 如果已经有会员了,就返回会员信息,没有则新建一个会员信息
Session.serAttribute(); 登记会员信息
Session.getAttribute(); 读取会员信息
4.加密
数据密码字段不能存明码,要加密
非对称加密/对称加密
对称加密:加密秘钥和解密秘钥是一样的
5. Servlet的生命周期
Servlet没有main(方法,不能独立运行,它的运行完全由Servlet引擎来控制和调度。所谓生命周期,指的
是servlet容器何时创建servlet实例、何时调用其方法进行请求的处理、何时并销毁其实例的整个过程。
●实例和初始化时机
当请求到达容器时,容器查找该servlet对象是否存在,如果不存在,则会创建实例并进行初始化。
●就绪/调用/服务阶段
有请求到达容器,容器调用servlet对象的service()方法,处理请求的方法在整个生命周期中可以被多次调用;
HttpServlet的service()方法,会依据请求方式来调用doGet)或者doPost()方法。但是,这两个do方法默
认情况下,会抛出异常,需要子类去override.
●销毁时机
当容器关闭时(应用程序停止时),会将程序中的Servlet实例进行销毁。
上述的生命周期可以通过Servlet中的生命周期方法来观察。在Servlet中有三个生命周期方法,不由用户手
动调用,而是在特定的时机有容器自动调用,观察这三个生命周期方法即可观察到Servlet的生命周期。
init方法,在Servlet实例创建之后执行(证明该Servlet有实例创建了)
初始化方法
系统方法,服务器自动调用
当请求到这Servlet容器时,ServLet 容器会判断该Servlet对象是否存在,如果不存在,则创建实例并初始化
方法只会执行一次

service方法,每次有请求到达某个Servlet方法时执行,用来处理请求(证明该Servlet 进行服务了)
就绪/服务方法(处理请求数据)
系统方法,服务器自动调用
当有请求到达Servlet时,就会调用该方法
方法可以被多次调用

destroy方法,Servlet 实例销毁时执行(证明该Servlet的实例被销毁了)
系统方法,服务器自动调用
当服务器关闭或应用程序停止时,调用该方法
方法只会执行一次

Servlet的生命周期,简单的概括这就分为四步: servlet 类加载-->实例化-->服务-->销毁。
下面我们描述一下 Tomcat与Servlet是如何工作的,看看下面的时序图:

1. Web Client向Servlet容器(Tomcat) 发出Http请求
2. Servlet容器接收Web Client的请求
3. Servlet 容器创建一个HttpServletRequest 对象,将Web Client请求的信息封装到这个对象中
4. Servlet容器创建一个HttpServletResponse对象
5. Servlet容器调HttpServlet对象service方法,把Request与Response作为参数,传给HttpServlet
6. HttpServlet调用HttpServletRequest 对象的有关方法,获取Http请求信息
6. HttpServletRequest对象
HttpServletRequest对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头
信息等都属于客户端发来的信息,service()方法中形 参接收的是HttpServletRequest接口的实例化对象,表示该
对象主要应用在TTP协议上,该对象是由Tomcat封装好传递过来。
HttpServletRequest是ServletRequest的子接口, ServletRequest 只有一个子接口, 就是HttpServletRequest。既然只有一个子接口为什么不将两个接口合并为-一个?
从长远.上讲:现在主要用的协议是HTTP协议,但以后可能出现更多新的协议。若以后想要支持这种新协
议,只需要直接继承ServletRequest接口就行了。
在HttpServletRequest接口中,定义的方法很多,但都是围绕接收客户端参数的。但是怎么拿到该对象呢?
不需要,直接在Service方法中由容器传入过来,而我们需要做的就是取出对象中的数据,进行分析、处理。
6.1.接收请求
6.1.1.常用方法
1.方法
getRequestURL() 获取客户端发出请求时的完整URL
getRequestURI) 获取请求行中的资源名称部分(项目名称开始)
getQuerytring() 获取请求行中的参数部分
getMethod() 获取客户端请求方式
getProtocol() 获取HTTP版本号
getContextPath() 获取webapp名字

6.1.2.获取请求参数
1.方法
getParameter(name)
获取指定名称的参数
getParameterValues(String name)
获取指定名称参数的所有值
2.示例
//获取指定名称的参数,返回字符串
String uname = request . getParameter("uname");
System. out. print1n("uname的参数值: " + uname) ;
//获取指定名称参数的所有参数值,返回数组
string[] hobbys = request. getParametervalues("hobby");
Sys tem. out. print1n("获取指定名称参数的所有参数值: " + Arrays . tostring(hobbys))
JavaWeb 02_servlet基础的更多相关文章
- JavaWeb:JavaBean基础
JavaBean基础 JavaBean简介: 1.JavaBean是一种可以重复使用的类,可以没有用户界面,主要负责业务数据或者处理事物(数据运算.操作数据库) 2.与JSP配合,可以简化JSP代码. ...
- 最详细的JavaWeb开发基础之java环境搭建(Windows版)
阅读文本大概需要 3 分钟. 首先欢迎大家来学习JavaWeb,在这里会给你比较详细的教程,从最基本的开始,循序渐进的深入.会让初学者的你少踩很多坑(大实话),如果你已经掌握了JavaWeb开发的基础 ...
- JavaWeb零基础入门-01 基础概念说明
一.序言 从学校出来到实习,发现学校学的东西太过基础,难于直接运用于工作中.而且工作中,现在都以web开发为主,学校开了web开发相关课程.自己学的不够深入,所以本人自学JavaWeb开发,介于学习巩 ...
- JavaWeb之基础(1) —— 文件、目录结构和创建项目
1. JavaWeb应用 JavaWeb应用从大类上分为静态和动态两种. 静态应用就是传统的HTML文件+素材资源构造的静态网页,不需要特殊的配置.JavaWeb也不是专门用来做静态网站的. 动态应用 ...
- JavaWeb零基础入门-02 开发环境安装
大家好!我又来了,上一篇我们讲了一些基础概念:Html.Web服务器.数据库.Http和JavaWeb三大组件,它们是什么,有什么作用,都有了初步的了解.接下来我们进入学习JavaWeb的第一步,开发 ...
- JavaWeb之基础(2) —— HTTP协议
1. 粗讲什么是HTTP协议 HTTP协议的全程是Hyper Text Transfer Protocol,超文本传输协议,见名知意,这是个用来控制传输超文本的协议.下面就来简单说说什么是HTTP协议 ...
- JavaWeb——MySQL基础
内容索引 数据库的基本概念 MySQL数据库软件 安装 卸载 配置 SQL 数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓 ...
- JavaWeb前端基础复习笔记系列 二
课程:孔浩前端视频教程(JavaScript系列:1~5讲) <html> <head> <title></title> <!--html只负责显 ...
- JavaWeb前端基础复习笔记系列 一
课程:孔浩前端视频教程(CMS内容管理系统case) 1.背景知识 ASPCMS,是一个基于asp的CMS.类似于Jeecms是基于Java的.aspcms:http://www.aspcms.com ...
随机推荐
- 「游记」NOIP 2021 爆零记
推荐访问本人自建博客 \(\text{cjwen.top}\) 欧拉欧拉欧拉欧拉欧拉欧拉欧拉欧拉,第一次参加 \(NOIP\),欧拉欧拉欧拉欧拉欧拉欧拉欧拉欧拉. 第一题比较简单,用类似于筛质数的做法 ...
- 浅谈Java正则表达式
正则表达式我们都知道,它定义了字符串的模式,可以用来搜索.编辑或处理文本.我们在某些特定场景中用起来是非常方便的.它等于是给我们划定了一个范围,让我们可以精准的匹配到我们想要的结果.比如我想判断一个几 ...
- python基础语法_9-0函数概念
http://www.runoob.com/python3/python3-function.html 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代 ...
- java中最简单的计算执行时长的方式
日常在做一些性能测试的时候会通过执行时间来判断执行时长,java中最简单的方式如下: //开始时间 long startL= new Date().getTime(); //这里需要导入 java.u ...
- .NET 云原生架构师训练营(权限系统 代码实现 Identity)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- JVM学习——字节码(学习过程)
JVM--字节码 为什么要学字节码 字节码文件,有什么用? JVM虚拟机的特点:一处编译,多处运行. 多处运行,靠的是.class 字节码文件. JVM本身,并不是跨平台的.Java之所以跨平台,是因 ...
- python-logging日志模块,以及封装实现
前言 是Python内置的标准模块,主要用于输出运行日志 基本语法 import logging # # logging模块默认设置的日志级别是warning,而debug和info的级别是低于war ...
- Vue UI API简单笔记
VUE UI 目录 VUE UI 一 移动端常用UI组件库 二 PC端常用UI组件库 三 ElementUI组件按需引入 一 移动端常用UI组件库 Vant http://vant-contrib.g ...
- 完爆Excel!一个令人惊艳的数据展示工具,让你做图更轻松高效
数据展示应该是最常见的需求,我们经常利用数据做总结.用数据做分享.但是我们该如何更好地展示给我们需要展示的人,如何才能让我们的数据表达更加动人,这个值得让人思索. 说到数据表达,常用的数据展示方式无非 ...
- Docker学习笔记(详细)
目录 01 介绍 02 Docker安装 03 Docker常用命令 04 Docker镜像 05 Docker容器数据卷 06 Dockerfile解析 Dockerfile构建过程解析 Docke ...