当前位置: 移动技术网 > 科技>办公>内存 > 自学Servlet的回顾(2/2)

自学Servlet的回顾(2/2)

2020年07月27日  | 移动技术网科技  | 我要评论

多个Servlet之间的调用方法

(1)重新定向

response.sendRedirect(url);

(2)请求转发

RequestDispatcher report=request.getRequestDispatcher("/资源文件名");//先通过当前请求对象,生成一个资源报告文件
report.forward(request,response);//然后提交报告给服务器

多个Servlet之间共享数据的方法

(1)ServletContext
通常被称为全局作用域对象,一个网站只有一个全局作用域对象
他能够存储多个Servlet的数据,以键值对的方式
首先通过请求对象向Tomcat索要当前网站的全局作用域对象
ServletContext application=Request.getServletContext();
然后向全局作用域对象添加数据
application.setAttribute(“键”,value);
第二服务器索要数据,首先也是索要全局作用域对象
ServletContext application=Request.getServletContext();
然后取得
object value=application.getAttribute(“键”);
(2)Cookie
要求在同一个网站,还要为同一个用户提供服务,提供数据共享。
首先创建cookie对象,保存共享数据。
Cookie card=new Cookie();
Response.addCookie(card);
card.setMaxAge(秒数);设置cookie存活时间
card.getName和card.getValue取得键值
(3)HttpSession
要求在同一个网站,还要为同一个用户提供服务,提供数据共享。
它与Cookie的区别:
存储位置
Cookie可以存储在内存和硬盘中
而HttpSession只能存放在服务端计算机内存
数据类型
Cookie只能储存String
HttpSession能存储任意类型的object
数据数量
一个Cookie对象只能存储一个共享数据
HttpSession使用map集合存储共享数据,可以储存任意数量共享数据
参照物
Cookie相当于客户在服务端会员卡
HttpSession相当于客户在服务端的私人保险柜

流程:
首先索要服务端的私人储物柜
HttpSession session=Request.getSession();
将数据填入
session.setAttribute("",value);
session.getAttribute("");
Request.getSession()和Request.getSession(false)有什么区别?
第一个是有自己的就用,没有就创建
第二个就是有自己的就用,没有返回null

session的销毁时机:
用户与Session关联时使用的Cookie只能存放在浏览器缓存中
在浏览器关闭时,意味着用户与他的Session关系被切断
由于tomcat无法检测浏览器何时关闭,因此在浏览器关闭时并不会导致
Tomcat将浏览器关联的Session进行销毁
为了解决这个问题,Tomcat为每一个session对象设置空闲时间
这个空闲时间默认为30分钟,如果当前HttpSession对象空闲时间达到30分钟
此时Tomcat认为用户自动放弃了自己的Session,就会销毁这个Session

设置session的空闲时间:

<session-config>
    <session-timeout>5</session-timeout>代表空闲时间最大为5分钟
</session-config>

注:HttpSession httpSession=request.getSession(false)和HttpSession httpSession=request.getSession()的区别?
HttpSession httpSession=request.getSession(false)是用户如果没有自己的Session则返回null。
而HttpSession httpSession=request.getSession()是用户如果没有自己的Session则创建一个Session。
(4)HttpServletRequset
如果两个servlet之间用过请求转发方式进行调用,彼此之间共享一个请求协议包
此时可以利用这个请求对象在两个Servlet之间实现数据共享
开发人员将这个请求对象叫做请求作用域
命令实现:
1、req.setAttribute(key,value);
req.getRequestDispatcher("/资源名").forward(req,response);
2、req.getAttribute(key);

监听器

监听器接口:
一组来自于servlet规范下的接口。
监听器接口需要开发人员亲自开发。
监听器接口用于监控作用域对象生命周期变化时刻以及作用域对象共享数据变化时刻。
作用域对象:
1、在Servlet规范中,认为在服务端内存中可以在某些条件下为两个
Servlet之间提供数据共享方案的对象,被称为作用域对象
2、servlet规范下作用域对象:
(1)ServletContext
(2)HttpSession
(3)HttpServletRequest

根据监听器的实际情况来实现
重写监听器接口声明监听事件处理方法
在web.xml文件将监听器接口实现类注册到Http服务器

注册步骤:

<listener>
    <listener-class>类路径</listener-class>
</listener>

ServletContextListener接口:
1、通过这个接口合法的检测全局作用域对象被初始化时刻以及被销毁时刻
2、监听事件处理方法:
public void contextInitlized():在全局作用域对象被Http服务器初始化被调用
public void contextDestory():在全局作用域对象被Http服务器销毁时被调用
可以用于优化jdbc连接器的创建与销毁

ServletContextAttributeListener接口:
1、监听共享数据的变化
2、public void contextAdd()
public void contextReplaced()
public void contextRemove()

注:为了优化管理系统,一般使用监听器的初始化时刻建立好connection,提高运行速度。

过滤器

filter接口:
过滤器接口,由开发人员编写
在服务器调用资源文件之前,对服务器进行拦截
作用:
拦截服务器,帮助服务器检测当前请求的合法性
拦截之后,对当前请求做增强操作
实现过程:
1、创建类实现filter接口
2、重写doFilter方法
3、注册到web.xml文件中
filterChain.doFilter(servletRequest,servletResponse)代表可以访问该资源

如何注册到web.xml

<filter>
    <filter-name>过滤器别名</filter-name>
    <filter-class>过滤器路径</filter-class>
</filter>
<filter-mapping>
    <filter-name>过滤器别名</filter-name>
    <url-pattern>想要过滤的资源名</url-pattern>
</filter-mapping>

/src/* 代表拦截所有src文件夹下的文件
*.jpg代表所有的jpg文件要拦截
/*代表所有文件

注:为了防止有些用户恶意跳过登录界面直接访问资源地址的行为。可以使用过滤器为每一个资源文件添加一个Session,如果这个对象没有自己的Session,则返回null,跳转到登录失败界面

HttpSession httpSession=request.getSession(false);
        if(httpSession==null){
            response.sendRedirect(url);
        }

本文地址:https://blog.csdn.net/qq_39993973/article/details/107583608

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网