servlet基础

目录

一、Servlet简介

二、Servlet的作用

三、Servlet处理的信息有哪些

​编辑

四、Tomcat介绍

(一)、tomcat的作用

(二)、tomcat的优点

(三)、tomcat目录结构介绍

五、Servlet的开发流程 

 (一)、实现Servlet接口或者继承HttpServlet类

 (二)、重写HttpServlet类的doGet()和doPost()方法 

 (三)、配置web.xml文件或者使用注解对servlet进行配置 

        1、首先在maven配置文件pom.xml中导入Servlet - API的依赖 

         2、使用web.xml配置servlet访问路径

        3、使用注解配置servlet访问路径 

(四)、重新doget、dopost方法 

 六、Servlet的生命周期

(一)、通过web.xml文件来配置load-on-startup(tomcat启动时就加载)优先级

(二)、通过注解来配置load-on-startup(启动时加载)优先级

​编辑

七、Servlet获取参数的方法 

 (一),从web.xml文件中传递参数。获取参数

1. 获取单个Servlet的参数数据

 2. 获取全局参数

​编辑  (二),获取浏览器传递过来的参数,post、get都一样

1. 单个数据获取

 2. 获取所有请求数据,返回一个枚举

 3. 获取一个key对应多个值,比如获取checkbox的值

4. 获取所有请求数据,返回一个Map

  (三),解决通过post请求获取浏览器传递过来的数据乱码问题

1.方式1: 逆向解码

2.方式2: 设置编码格式(推荐使用,但是不适用于get请求)

八、Servlet响应页面和数据 

(一)、Servlet响应页面

1、转发 — 也就是携带客户端发送的请求转发跳转到下一个页面,使用的是request请求对象。

 2、重定向 — 服务器接收到前端请求,通过响应将要跳转的页面地址响应给客户端,客户端再重新发送请求跳转到目标页面。

​编辑(二)、Servlet响应数据 

1.设置响应编码格式

​编辑

2.使浏览器按照指定编码格式解码

九、Servlet 共享范围(共享域)

(一)、共享数据介绍

1.共享数据方法: setAttribute, getAttribute,removeAttribute

(二)、三种共享范围使用

1、request: 一次请求范围,仅限本次请求的范围

2、session:浏览器和服务端会话范围内数据共享

3、ServletContext(不推荐使用):应用服务器,跨多个浏览器,只要不关闭服务器,永远存在数据。如果存储过多会导致内存泄漏;

十、Filter 过滤器

(一)、Filter定义

(二)、Filter作用

 (三)、Filter在实际项目中的作用

(四)、Filter的实现

​编辑(五)、Filter的生命周期

 (六)、创建Filter过滤器步骤

 (七)、Filter过滤器结合Servlet 的生命周期

​编辑

​编辑

 (八)、多个Filter(过滤链(FilterChain))执行顺序

(九)、Filter使用 

统一字符集

2、 登录校验​编辑

十一、Listener 监听器 

(一)、监听器简介 

(二)、监听对象、监听内容、监听作用

1、监听对象

 2、监听内容

3、监听作用

(三)不同共享范围,对象创建和销毁

1、ServletContext共享范围

2、Session 共享范围

​编辑 ​编辑

3、request共享范围 

(四)不同共享范围,属性的改变

1、ServletContext共享范围,属性新增、属性更改、属性删除

2、Session共享范围,属性新增、属性更改、属性删除 

3、Request共享范围,属性新增、属性更改、属性删除 

 (五)、监听器使用,统计网站访问量、活跃量

十二、Cookie

(一)、cookie机制

(二)、cookie常用方法

 (三)、Cookie 常用场景

​编辑 十三、Session

(一)、Session机制

(二)、Session 常用方法 

(三)、Session使用场景 

(四)、Session 与 Cookie 区别

(五)、注意事项 


一、Servlet简介

Servlet是Server Applet的简称,翻译过来就是服务程序。是由sun公司提供的一门用于开发动态Web资源的技术。简单的讲,Servlet就是运行在服务器上的一个小程序,用来处理服务器接收到的请求。

二、Servlet的作用

接受前端请求处理数据给浏览器响应数据

 servlet在其中承担的作用是Controller(控制器),起到对数据进行操作的作用。

三、Servlet处理的信息有哪些

Servlet底层的实现类以及实现类的子类。

我们看一下servlet接口定义那些规范(接口)

  • void init(ServletConfig var1):初始化方法,对象创建成功以后默认调用一次,且只调用一次
  • ServletConfig getServletConfig():Servlet配置对象
  • void service(ServletRequest var1, ServletResponse var2):提供前后端交互的服务方法    核心方法
  • String getServletInfo():获取Servlet信息
  • void destroy():摧毁方法 ,释放内存空间

        还有GenericServlet实现类,该实现类中的service()方法没有实现接口中对应的方法,而是继续抽象下去。增强了servlet接口的功能,增加其他功能

 继续查找service()方法是在哪个类中实现的。随之就找到了HttpServlet这个子类

 

我们找到service方法,service就是对我们的请求进行处理。客户端传过来的请求类型进行判断,更具传过来的类型执行对应的处理请求数据的方法 ;

四、Tomcat介绍

(一)、tomcat的作用

        tomcat是Web 应用服务器,专门运行Web应用 的服务器软件程序;

(二)、tomcat的优点

  • 中小型应用系统常用的应用服务器,免费,没有实现JavaEE所有规范   支持jsp及servlet规范;
  • 轻巧灵活的  免费  web应用服务器

(三)、tomcat目录结构介绍

  •   bin:命令目录
  •   conf:配置目录
  •   lib:jar包目录
  •   logs:日志目录
  •   temp:临时数据目录
  •   webapps:部署目录     开发的项目需要部署在该目录下,才能被服务器运行

tomcat服务器启动的时候,会读取 conf 下配置文件 以及  webapps下各个项目的web.xml文件!

五、Servlet的开发流程 

 (一)、实现Servlet接口或者继承HttpServlet类

 (二)、重写HttpServlet类的doGet()和doPost()方法 

 (三)、配置web.xml文件或者使用注解对servlet进行配置 

        1、首先在maven配置文件pom.xml中导入Servlet - API的依赖 

         2、使用web.xml配置servlet访问路径

我们解释一下为什么要这么配置

  1. <servlet> :我们知道tomcat服务器启动会读取web.xml文件,当读到<servlet>告诉tomcat创建一个对象 (注册一个Servlet)
  2. <servlet-name>RegiesterLx05</servlet-name>:给servlet创建的对象起个名字
  3.  <servlet-class>com.zxb.web.test01Lx.RegiesterLx05</servlet-class>:从上面我们知道需要注册一个tomcat对象,那我们需要注册那个类的对象呢?我们需要告诉对应类的路径。为什么要告诉类的路径,它是怎么创建的呢? **反射** 通过反射创建。这行的配置就是

     4. <servlet-mapping>:配置访问路径与注册的类的关系

     5. <url-pattern>:表示访问 /RegiesterLx05 路径,就是访问RegiesterLx05对象的类;

        3、使用注解配置servlet访问路径 

注意:配置访问路径,注解和web.xml两者二选一即可,避免混淆! 

(四)、重新doget、dopost方法 

 六、Servlet的生命周期

 所谓生命周期,就是Servlet什么时候创建,调用了何种方法,最后在什么时候被销毁。我们之前学过的对象都是自己手动创建的,最后由JVM来销毁,而Servlet的整个生命周期,都是由tomcat服务器来控制的。

由上图所示,程序运行后得出结论,Servlet的生命周期是:

实例化 (构造方法)--》初始化(init方法) --》多次调用service服务 (对应get、post方法)--》 tomcat容器关闭时销毁(destroy方法)

默认情况下Servlet是在第一次访问的时候实例化和初始化的
第一次访问就会调用service()服务方法
直到关闭服务器时,Servlet才会被销毁

(一)、通过web.xml文件来配置load-on-startup(tomcat启动时就加载)优先级

(二)、通过注解来配置load-on-startup(启动时加载)优先级

 注意:配置load-on-startup启动时加载时,web.xml和注解两种方式,二选一即可。

七、Servlet获取参数的方法 

 (一),从web.xml文件中传递参数。获取参数

1. 获取单个Servlet的参数数据

 2. 获取全局参数

  (二),获取浏览器传递过来的参数,post、get都一样

         从浏览器发送数据,浏览器发送的数据都是存在HttpServletRequest中

1. 单个数据获取

 2. 获取所有请求数据,返回一个枚举

 3. 获取一个key对应多个值,比如获取checkbox的值

4. 获取所有请求数据,返回一个Map

  (三),解决通过post请求获取浏览器传递过来的数据乱码问题

     什么情况下会乱码?原因是:编码和解码按照标准不一致;

为什么浏览器发送过来的数据,idea显示乱码?

数据的传递路径:浏览器发送数据----->tomcat------------------->idea;

我们发现浏览器将数据发送给tomcat,tomcat进行编码和解码,在发送给idea,idea在解码发现乱码。

原因就是:tomcat使用的编码格式 "ISO-8859-1",idea使用的"UTF-8"进行解码

1.方式1: 逆向解码

逆向解码是,获取到的数据按照原有的编码格式解码后,在使用当前的编码格式进行编码(不适用多次数据传输过程中多次的编码,多次解码的场景)

2.方式2: 设置编码格式(推荐使用,但是不适用于get请求)

        get请求传递中文参数,不会进行乱码,因为idea给处理了

八、Servlet响应页面和数据 

(一)、Servlet响应页面

响应页面,也就是收到前端的请求响应需要跳转的页面。Servlet响应页面有转发重定向两种方式 

1、转发 — 也就是携带客户端发送的请求转发跳转到下一个页面,使用的是request请求对象。

 2、重定向 — 服务器接收到前端请求,通过响应将要跳转的页面地址响应给客户端,客户端再重新发送请求跳转到目标页面。

(二)、Servlet响应数据 

我们知道如果将一个数据传送到另一个地方,需要通过流来完成(流就是通道,数据就是通道里面的

1.设置响应编码格式

2.使浏览器按照指定编码格式解码

九、Servlet 共享范围(共享域)

(一)、共享数据介绍

1.共享数据方法: setAttribute, getAttribute,removeAttribute

  1. pageContext 可以共享数据 jsp页面里
  2. request 可以共享数据 一次请求 一个request
  3. session 可以共享数据 浏览器和服务器的连接(一个有效时常) 是一个业务
  4. servletContext == application 可以共享数据 共享范围最大

如上4种对象其共享数据范围不同。

  1. pageContext 简称 page 范围,其共享范围仅限于 JSP 页面内部,相当于JSP内部的局部变量。
  2. request 范围,是一次请求过程范围
  3. session 范围,是一次用户会话过程范围,浏览器不关闭与服务器的多次请求的范围。
  4. application 范围,是最大的共享范围,一个Web应用的全体Servlet、JSP共享的范围。 适合保存公共静态数据。

使用建议:

  • 数据共享范围越小越好,最常用的是 request
  • 与当前用户有关的数据,共享到 session,比如用户登录状态
  • 全局数据,可以共享到 application (不建议用)
     

(二)、三种共享范围使用

场景:比如servlet1的功能不满足,需要使用servlet2的功能。我们怎么将请求servlet1的参数,在servlet1中传递给servlet2 ?
我们可以使用request数据共享范围

1、request: 一次请求范围,仅限本次请求的范围

 浏览器访问,提交数据。我们就会发现服务端将请求转发到/RegiesterLx11上。打印出数据

2、session:浏览器和服务端会话范围内数据共享

 

我们发现使用session共享范围,不需要指定转发路由。因为session是浏览器的会话,浏览器只要和服务端保持会话,你访问任何路径都可以获取到session共享范围内的数据。

我们在同一个浏览器,调用post请求,访问/RegiesterLx13路径,获取到session共享的数据 

3、ServletContext(不推荐使用):应用服务器,跨多个浏览器,只要不关闭服务器,永远存在数据。如果存储过多会导致内存泄漏;

 ServletContext设置的共享数据,只要一次设置,在不同的访问路径,不同的浏览器都可以获取到共享范围的数据。

我们在chrome端访问/RegiesterLx15获取数据,我们在iE上访问/RegiesterLx15获取数据,我们发现都可以获取到数据;

十、Filter 过滤器

(一)、Filter定义

        Filter是一个过滤器或者拦截器,它是一个部署在web应用的组件。

(二)、Filter作用

        Filter可以设置被客户访问的资源(静态资源和动态资源)的执行,如果请求路径配置了Filter,所有的请求资源都会先交给Filter进行处理,然后由Filter觉得是否访问目标资源,带目标资源执行完毕,请求会再次交给Filter处理

 (三)、Filter在实际项目中的作用

        Filter不会像 Servlet那样,直接给客户端访问提供服务;在实际应用中,Filter经常被用于过滤请求和保护资源,主要体现在如下几点:

  • 改变请求或者响应头信息
  • 字符集编码统一
  • 登陆身份验证
  • 记录日志
  • 权限认证
  • XML 转换
  • 请求和响应包装

(四)、Filter的实现

        必须实现 javax.servlet.Filter接口,该接口中定义了实现过滤器的接口方法;

  • 初始化方法:init(),Filter被实例化后调用
  • 过滤方法:doFilter(),客户请求到来时调用
  • 销毁方法:destory(),在 Filter实例被卸载之前调用

(五)、Filter的生命周期

        Filter的生命周期与 Servlet类似,在web应用装载的时候,系统会自动创建Filter对象调用构造方法并且调用init方法,然后将其缓存到tomcat服务器中,当Filter过滤资源被访问时,系统会自动调用Filter对象的doFilter()方法,当系统关闭的时候,调用Filter对象的destory()方法。一旦destory方法执行完退出,Filter对象就会被垃圾回收,释放内存空间。

 从上面也可以看出,Filter和Servlet对象都是单例模式。不会每次创建对象。

 (六)、创建Filter过滤器步骤

  • 实现 Filter接口
  • 配置 web.xml文件
  • 部署服务器

 (七)、Filter过滤器结合Servlet 的生命周期

 注意: 如果那个Filter的doFilter方法中没有chain.doFilter(req, resp)方法代码,当执行那个Filter的doFilter方法时,代码一直停留该方法内,不会继续执行,不会执行到Servlet的方法。

 (八)、多个Filter(过滤链(FilterChain))执行顺序

 我们可以发现

  • 服务器不同Filter实例的创建先后顺序与,web.xml文件中Filter配置的<filter>的位置无关;
  • Filter的 doFilter的执行顺序,是按照web.xml文件中Filter配置的<filter-mapping>的顺序执行,由上至下,依次执行。

(九)、Filter使用 

统一字符集

2、 登录校验

十一、Listener 监听器 

(一)、监听器简介 

        主要用于监听域(共享范围)对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件 ;

(二)、监听对象、监听内容、监听作用

1、监听对象

  • ServletContext:整个应用只存在一个
  • HttpSession:针对每一个对话
  • ServletRequest:针对每一个客户请求

 2、监听内容

        对象的创建、销毁、属性改变事件

3、监听作用

        可以在事件发生前、发生后进行一些处理,一般可以用来统计在线人数和在线用户、统计网站访问量、系统启动时初始化信息

(三)不同共享范围,对象创建和销毁

1、ServletContext共享范围

1.1、实现接口

 1.2 创建

 

 我们可以看见,当启动Tomcat启动,完成装载,执行contextInitialized方法,关闭Tomcat,销毁对象,执行contextDestroyed方法

2、Session 共享范围

2.1 Session 什么创建,什么时候销毁

  •  当浏览器和服务器第一次建立连接,就会创建一个Session,浏览器再次访问服务器,Session没有销毁,就不会继续创建(单例模式)。
  • 当Session失效了,就会进行销毁。我们可以通过服务器设置Session失效时间,不设置默认就是30分支

2.2 设置Session失效时间

        在web.xml 设置。不设置默认30分钟,这里单位是分钟 ,下面代表1分钟后失效。

2.3 实现接口

 

  • 浏览器启动首次访问,服务端,生成session对象,执行创建触发的方法;
  • session失效后,执行销毁的方法;
  • session有效器同一个浏览器多次访问服务端,不会继续生成session,不会执行创建触发的方法  ;
  • session失效后,同一个浏览器再次访问服务端,会生成新的session对象,执行创建触发的方法;

3、request共享范围 

        每次请求url就会创建一个request对象,执行完成,销毁对象

3.1、实现接口

 

 没访问一次url,就会创建request对象,执行完成后,销毁request对象

(四)不同共享范围,属性的改变

1、ServletContext共享范围,属性新增、属性更改、属性删除

1.1、实现接口

 

 

2、Session共享范围,属性新增、属性更改、属性删除 

 2.1、实现接口

3、Request共享范围,属性新增、属性更改、属性删除 

3.1、实现接口

 (五)、监听器使用,统计网站访问量、活跃量

十二、Cookie

(一)、cookie机制

        当客户第一次访问服务器动态资源的时候,服务器端会给客户端写一小段数据(cookie),cookie存放在客户端的硬盘上(浏览器缓存),下次再访问服务器浏览器会带着对应的cookie一起访问服务器,服务器根据cookie中的内容,来识别你是哪个客户端。如果cookie有效期为0,那么不会写在硬盘上,而是保存在浏览器的缓存中(浏览器关闭,cookie会被删除);如果cookie有效期大于0,例如:cookie = 60 ,客户端访问浏览器,cookie60s后会被删除。如果60s后关闭浏览器,则需求重新登录。如果60s后不关闭浏览器,可以继续使用;cookie有效期小于0,删除cookie;

(二)、cookie常用方法

  • setValue(String newValue):给当前 cookie重新赋值
  • setComment(String purpose):对该 cookie进行描述的信息(说明作用),浏览器显示 cookie信息时能看到
  • setDomain(String pattern):符合该 pattern(域名正则)的就可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该 Cookie。注意第一个字符必须为“.”
  • setMaxAge(int expiry):该Cookie失效时间,单位秒。如果为正数,则该Cookie在expiry秒之后失效。如果为0,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为负数,表示删除该Cookie。默认为–1
  • setHttpOnly(boolean httpOnly):设为 true后,只能通过 http访问,javascript无法访问,还可防止xss读取
  • cookie setPath(String uri):设置Cookie的使用路径。后面紧接着详解。如果设置为“/agx/”,则只有uri为“/agx”的程序可以访问该Cookie。如果设置为“/”,则本域名下的uri都可以访问该Cookie。注意最后一个字符必须为”/”
  • setSecure(boolean flag):是否使用安全传输协议。为true时,只有当是https请求连接时cookie才会发送给服务器端,而http时不会,但是服务端还是可以发送给浏览端的 

 (三)、Cookie 常用场景

        自动登陆:保存用户名、密码,在一定时间不用重新登录

 十三、Session

        是客户端连接服务端的会话,它可以把客户端信息保存在Web服务器中

(一)、Session机制

        客户端浏览器第一次访问服务器动态资源的时候,服务器会给每个客户端咱内存中分配一个内存空间(session),并且会为该空间取一个唯一标识(JSESSIONID-->D93A0D048044E9B37C420BBF2DE8F51D),服务器通过Cookie技术,将Session的唯一标识,发送给客户端,客户端每次请求服务端,cookie里面就会带上Session的唯一标识。服务端通过唯一标识来确定那个空间是属于该客户的;

(二)、Session 常用方法 

 

(三)、Session使用场景 

  • 网上商城中的购物车
  • 保存登陆用户的信息
  • 将某些数据放入到 session 中,供同一用户的各个方面使用
  • 防止用户非法登陆到某个页面 

(四)、Session 与 Cookie 区别

  • 存在的位置:cookie 保存在客户端,session 保存在服务器端
  • 安全性:比较而言,cookie 的安全性比 session 要弱
  • 网络传输量:cookie 通过网络在客户端与服务器端传输,而 session 保存在服务器端,不需要传输  

(五)、注意事项 

  • session 中属性存在的默认时间是30min,可以通过修改 web.xml 改变存在的时间 上面说的这个 30min 指的是用户的发呆时间,而不是累计时间
  • 当某个浏览器访问网站时,服务器会给浏览器分配一个唯一的 session id,并以此来区分不同的浏览器
  • 因为 session 的各个属性要占用服务器的内存,因此软件公司都是在迫不得已的情况下才使用
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值