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基础的更多相关文章

  1. JavaWeb:JavaBean基础

    JavaBean基础 JavaBean简介: 1.JavaBean是一种可以重复使用的类,可以没有用户界面,主要负责业务数据或者处理事物(数据运算.操作数据库) 2.与JSP配合,可以简化JSP代码. ...

  2. 最详细的JavaWeb开发基础之java环境搭建(Windows版)

    阅读文本大概需要 3 分钟. 首先欢迎大家来学习JavaWeb,在这里会给你比较详细的教程,从最基本的开始,循序渐进的深入.会让初学者的你少踩很多坑(大实话),如果你已经掌握了JavaWeb开发的基础 ...

  3. JavaWeb零基础入门-01 基础概念说明

    一.序言 从学校出来到实习,发现学校学的东西太过基础,难于直接运用于工作中.而且工作中,现在都以web开发为主,学校开了web开发相关课程.自己学的不够深入,所以本人自学JavaWeb开发,介于学习巩 ...

  4. JavaWeb之基础(1) —— 文件、目录结构和创建项目

    1. JavaWeb应用 JavaWeb应用从大类上分为静态和动态两种. 静态应用就是传统的HTML文件+素材资源构造的静态网页,不需要特殊的配置.JavaWeb也不是专门用来做静态网站的. 动态应用 ...

  5. JavaWeb零基础入门-02 开发环境安装

    大家好!我又来了,上一篇我们讲了一些基础概念:Html.Web服务器.数据库.Http和JavaWeb三大组件,它们是什么,有什么作用,都有了初步的了解.接下来我们进入学习JavaWeb的第一步,开发 ...

  6. JavaWeb之基础(2) —— HTTP协议

    1. 粗讲什么是HTTP协议 HTTP协议的全程是Hyper Text Transfer Protocol,超文本传输协议,见名知意,这是个用来控制传输超文本的协议.下面就来简单说说什么是HTTP协议 ...

  7. JavaWeb——MySQL基础

    内容索引 数据库的基本概念 MySQL数据库软件 安装 卸载 配置 SQL 数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓 ...

  8. JavaWeb前端基础复习笔记系列 二

    课程:孔浩前端视频教程(JavaScript系列:1~5讲) <html> <head> <title></title> <!--html只负责显 ...

  9. JavaWeb前端基础复习笔记系列 一

    课程:孔浩前端视频教程(CMS内容管理系统case) 1.背景知识 ASPCMS,是一个基于asp的CMS.类似于Jeecms是基于Java的.aspcms:http://www.aspcms.com ...

随机推荐

  1. MLlib学习——基本统计

    给定一个数据集,数据分析师一般会先观察一下数据集的基本情况,称之为汇总统计或者概要性统计.一般的概要性统计用于概括一系列观测值,包括位置或集中趋势(比如算术平均值.中位数.众数和四分位均值),展型(比 ...

  2. 一款免费在线转pdf的工具 和 window免费镜像

    PDF爱好者的在线工具 完全免费的PDF文件在线管理工具,其功能包括:合并PDF文件.拆分PDF文件.压缩PDF文件.Office文件转换为PDF文件.PDF文件转换为JPG图片.JPG图片转换为PD ...

  3. 《PHP程序员面试笔试宝典》——什么是职场暗语?

    本文摘自<PHP程序员面试笔试宝典> 文末有该书电子版下载. 随着求职大势的变迁发展,以往常规的面试套路因为过于单调.简明,已经被众多"面试达人"们挖掘出了各种&quo ...

  4. IDEA中快速排除maven中的依赖

    选中该模块 点击show dependenties 切换试图 选中要排除的依赖,右击 选择Execlude,然后选择需要在哪个模块添加排除依赖 完成

  5. 使用 WebView2 封装一个生成 PDF 的 WPF 控件

    使用 WebView2 封装一个生成 PDF 的 WPF 控件 最近在迁移项目到 .net6,发现项目中用的 PDF 库不支持 .net6,于是想着换一个库.结果找了一大圈,发现不是版本不支持,就是收 ...

  6. 教你如何使用flask实现ajax数据入库

    摘要:在正式编写前需要了解一下如何在 python 函数中去判断,一个请求是 get 还是 post. 本文分享自华为云社区<[首发]flask 实现ajax 数据入库,并掌握文件上传>, ...

  7. 微信小程序实现文本的展开与收起

    致谢 https://www.jianshu.com/p/9458083214cc 效果图   代码 js部分 // pages/volunteer/active/info/activeInfo.js ...

  8. [c/c++]c++控制台操作(基本操作的代码)

    本文转自:http://blog.csdn.net/stude/article/details/7645056 控制台窗口界面编程控制 〇.摘要一.概述二.控制台文本窗口的一般控制步骤三.控制台窗口操 ...

  9. 太骚了,用Excel玩机器学习

    最近发现了一个好玩的Python库,它可以将训练好的机器学习模型转换为Java.C.JavaScript.Go.Ruby,VBA 本地代码,可以让连Python和机器学习一无所知的同学也能感受预测的神 ...

  10. 批量自动化配置Dell服务器idrac管理口IP

    背景说明 工作中经常会遇到一次上几十台.几百台服务器的情况 每当到这个时候小伙伴们拿台笔记本和一根网线,一台服务器.一台服务器的去修改idrac IP 为了节约这个工作量,利用dell的racadm工 ...