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 ...
随机推荐
- 2022寒假集训day6
day6上午还是做四道题T1区域[上机练习]1.编程计算由"*"号围成的下列图形的面积.面积计算方法是统计*号所围成的闭合曲线中水平线和垂直线交点的数目.如下图所示,在 10*10 ...
- Centos7系统使用yum遇到的问题failure: repodata/repomd.xml from base: [Errno 256] No more mirrors to try.
简单粗暴重新安装yum. 1.查看linux上所有的yum包 # rpm -qa|grep yum 2.逐个卸载,如 # rpm -e yum-plugin-fastestmirror-1.1.31- ...
- MySQL数据库初识、下载使用(针对库、表、记录的增删改查)
今日内容概要 数据演变史 数据库软件的本质 MySQL简介 下载与安装 基本配置 基本SQL语句 内容详细 1.数据演变史 # 1.单独的文本文件 没有固定的存放位置和格式 文件名:user.txt ...
- Argo workflow 案例练习和配置详细解析
参数化 - parameters hello-world-parameters.yaml文件解析 apiVersion: argoproj.io/v1alpha1 kind: Workflow met ...
- Ribbon负载均衡及其应用
nginx - 随笔分类 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中涉及到负载均衡,为何此处由涉及Ribbon负载均衡呢?那是因为ngnix是服务端的负责均衡,而Ribbon是客户 ...
- Python-Flask框架之"图书管理系统"项目,附详解源代码及页面效果截图
该图书管理系统要实现的功能如下: 1. 可以通过添加窗口添加书籍或作者,如果要添加的作者和书籍已存在于书架上, 则给出相应的提示: 2. 如果要添加的作者存在,而要添加的书籍书架上没有,则将该书籍添加 ...
- Java邮件发送中的setRecipient方法使用
一.方法setRecipient(Message.RecipientType type, Address address),是用于设置邮件的接收者. 1.有两个参数,第一个参数是接收者的类型,第二 ...
- Git教学教程--学生使用教程(非Git操作版)
一.注册(必须) 注册完成后由"教师"将你加入高校/企业组即可: 二.查看项目(必须) 三.查看组织 打开后可查看到如下界面,列出的项目为可操作项目 四.查看高校/企业信息 五.上 ...
- 2020ICPC上海站 C. Sum of Log
题目大意: 给定T组X,Y,对于每组X,Y,求上面式子 的值,其中 当x为真时等于1,其他情况等于0. 其中. 思路: 对X,Y一起进行数位DP,我们把每一位枚举数字的上限以及数字之前是否有前导 ...
- WinRar:你需要从上一压缩卷启动解压命令以便解压
大文件被分解成许多个小的RAR文件,并按顺序排列好,解压时只需解压第一个RAR文件即可顺利解压所有文件,如果不按顺序解压就会出现上述问题,导致解压完一个子文件候无法解压剩下的文件