JavaWeb笔记3--Servlet进阶(一)

七、获取servlet 初始化参数

1. ServletConfig对象–封装初始化参数

ServletConfig对象详解

1.1 ServletConfig对象

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
  ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
  由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

1.2 ServletConfig接口方法

在这里插入图片描述
在这里插入图片描述

1.3 ServletConfig 与 init()

  • init()带参数的方法:参数为servletconfig接口类型
  • 在servlet中初始化方法有init()和init(ServletConfig config)两个,如果两个初始化方法同时出现,则调用的是init(ServletConfig config)方法。
  • 通常初始化参数在整个servlet生命周期中只取一次,建议在init()方法中实现。
  • 可以配置多对初始化参数,多几对 <init-param> </init-param>即可。
    在这里插入图片描述
    在这里插入图片描述

2. 初始化参数

2.1 两种初始化参数

一种是servlet初始化参数,只对当前servlet有效。
一种是servlet上下文(当前web项目)的初始化参数,对整个web应用中所有的servlet都有效。

2.2 上下文概念

每一个web 应用程序对应一个上下文。
servlet上下文:当前servlet所在的应用程序。

2.3 两种Servlet启动初始化参数的配置

2.3.1 servlet初始化参数,只对当前servlet有效
web2.0:

在这里插入图片描述

 <init-param><!--Servlet初始化参数-->
     <param-name>baseNum</param-name>
     <param-value>5</param-value>
 </init-param>
web3.0:
@WebServlet(
        urlPatterns = { "/GetInitParamServlet" }, 
        initParams = { @WebInitParam(name = "BaseNum", value = "5")}
        )
2.3.2 servlet上下文,对所有的servlet都有效
web2.0:

servlet上下文(当前web项目)的初始化参数,对整个web应用中所有的servlet都有效

<context-param><!--Servlet上下文初始化参数-->
    <param-name>appName</param-name>
    <param-value>myapp应用程序</param-value>
 </context-param>

2.4 两种servlet获取初始化参数方法

在这里插入图片描述

3. Servlet初始化参数:getInitParameter()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. Servlet上下文(context)初始化参数:getServletContext()+getInitParameter()

4.1 两种方法

方法一:通过ServletConfig接口的getServletContext()方法获得ServletContext接口,此接口的getInitParameter()方法

  • 通过ServletConfig接口的getServletContext()方法获得ServletContext接口/servlet上下文。
    通过ServletContext接口中的getInitParameter()方法根据名称取出具体参数。
    在这里插入图片描述
    在这里插入图片描述

方法二:通过ServletRequest接口的getServletContext()方法获得ServletContext接口,此接口的getInitParameter()方法

4.2 获取上下文

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、会话跟踪技术–cookie

1. 会话

1.1 什么是会话

会话:客户端与服务器之间的一次会晤。一次会晤可以包括多次请求和响应。
在这里插入图片描述
在这里插入图片描述

1.2 会话跟踪技术、会话状态、会话ID

会话跟踪技术:在一个会话中用户共享数据

在这里插入图片描述
在这里插入图片描述
当一个用户连接服务器后,服务器会自动为创建session对象,并为此session分配一个不重复的Session Id,服务器依靠不同的Session Id来区分每个不同的用户。

1.3 两种会话跟踪机制:cookie、session

cookie:数据保存在客户端
session:数据保存在服务器端的缓存中,给客户端一个session id(以cookie形式保存)

2. Cookie(javax.servlet.http.Cookie)

2.1 Cookie介绍

  • cookie是什么?
    cookie其实是一小段的文本信息,客户端请求服务器,如果服务器需要记录客户端的状态,就使用response给客户端浏览器颁发一个cookie,客户端会把cookie保存起来。当浏览器再次请求时,会把地址和cookie一起提交给服务器,服务器检查该cookie,以此来辨认浏览器的状态,服务器还可以根据需要修改cookie的值。

  • Cookie如何创建和获得?
    Cookie是浏览器提供的一种技术,Cookie对象由服务器端程序创建,使用response.addCookie() 方法发给客户端,
    下一次客户向同一站点发送请求时,Cookie对象会随着http请求发给服务器,服务器端程序使用request.getCookies()方法获得Cookies数组。
    在这里插入图片描述

  • IE浏览器的Cookies保存位置
    在xp系统 C:\Documents and Settings\Administrator\Cookies目录中,如果打开文件夹找不到Cookies文件,则直接在地址栏中输入此地址。
    win7系统 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies
    win10系统 C:\Users\用户名\AppData\Local\Microsoft\Windows\INetCookies\

2.2 cookie传送过程

在这里插入图片描述

2.3 cookie使用

在这里插入图片描述

发送cookie:

  1. 向客户端设置cookie :response.addCookie(cookie);
  2. 可以使用setValue()方法修改Cookie的值,修改后的Cookie对象再次使用response.addCookie()方法发给客户端,会覆盖原来设置好的同名Cookie。
    在这里插入图片描述
    读取cookie:
  3. 获取浏览器端提交的所有cookie :Cookie[] cookies=request.getCookie();
  4. 如果没有创建任何Cookies,使用getCookies()方法取到的是NULL值。
    在这里插入图片描述

3. 使用Cookie实现会话跟踪

在这里插入图片描述

3.1 临时cookie

Cookies保存在浏览器的缓存中,关闭浏览器后,在打开Cookie失效
在这里插入图片描述
在这里插入图片描述
访问:AServlet
在这里插入图片描述
在这里插入图片描述
此cookie是临时cookie。随着浏览器的关闭而消失。
关闭浏览器在打开BServlet,cookie id失效。
在这里插入图片描述

3.2 持久cookie:setMaxAge()

Cookie的信息会被浏览器以文本文件的形式保存在客户端磁盘上,

  • 设置Cookie的有效期:setMaxAge()方法,单位是秒,默认值为:-1。
  • 删除临时或者持久Cookie:setMaxAge(0)
    在这里插入图片描述
    访问AServlet:
    在这里插入图片描述
    在这里插入图片描述
    关闭浏览器后,再打开BServlet:
    在这里插入图片描述

4. Session

主要用于跟踪用户信息

4.1 session含义

在这里插入图片描述

4.2 session机制、session id

在这里插入图片描述

Session Id

  • 当一个用户连接服务器后,服务器会自动为创建session对象,并为此session分配一个不重复的Session Id,服务器依靠不同的Session Id来区分每个不同的用户。
  • Session Id就是之前操作Cookie时的名称叫JSESSIONID的Cookie,在使用session的操作时实际上都使用了Cookie的处理机制,即在客户端的Cookie中保存着每一个Session Id,这样用户在每次发送请求时会将此session Id发送到服务器。
  • HttpSession session=request.getSession(); 此方法可以获得或创建一个session,当session存在时获得它,当不存在是创建它。

4.3 Session的传送过程

session底层依赖cookie。
缓存空间用session id唯一标识。
在这里插入图片描述
在这里插入图片描述

4.4重新打开浏览器、重启服务器Session会失效

session信息放在服务器的缓存中,服务器重启,缓存清空。
对于一个已连接到服务器的客户,如果重启服务器,则这些用户再次发送请求实际上表示的都是一个新连接的用户,服务器会为每个用户分配一个新的SessionId。
可以通过修改server.xml文件可以将session继续保存,等待服务器重启后继续使用。

5. 使用Session实现会话跟踪

在这里插入图片描述

刷新页面 session id 不变。
在这里插入图片描述
关闭浏览器后再访问,session id 改变。原来的会话结束了。
在这里插入图片描述
在这里插入图片描述

6. 设置会话失效的三种方式

session-timeout(web.xml)元素与session.setMaxInactiveInterval()函数

a) 在web服务器的配置文件中设置。
在tomcat中的conf/server.xml文件可以修改服务器上的所有程序的默认有效期,设置单位为毫秒,定义代码如下:
<Context path="/test" docBase="/test"  
  defaultSessionTimeOut="36000" isWARExpanded="true"  
  isWARValidated="false" isInvokerEnabled="true"  
  isWorkDirPersistent="false"/>
b)在web.xml中的session-config配置。
session-timeout元素(WEB.XML文件中的元素)用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果 session-timeout元素的值为零或负数,则表示会话将永远不会超时。
如: //30分钟
<session-config>
	<session-timeout>30</session-timeout>
</session-config>
c)session.setMaxInactiveInterval()函数
setMaxInactiveInterval设置的是当前会话的失效时间,单位为以秒计算。如果设置的值为零或负数,则表示会话将永远不会超时。常用于设置当前会话时间。
 在程序中手动设置,设置为-1则表示永不过期
java 代码:session.setMaxInactiveInterval(30 * 60);//注意服务器端的30*60秒,而不是客户端的
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值