Servlet进阶(一)
七、获取servlet 初始化参数
1. 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:
- 向客户端设置cookie :response.addCookie(cookie);
- 可以使用setValue()方法修改Cookie的值,修改后的Cookie对象再次使用response.addCookie()方法发给客户端,会覆盖原来设置好的同名Cookie。
读取cookie: - 获取浏览器端提交的所有cookie :Cookie[] cookies=request.getCookie();
- 如果没有创建任何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秒,而不是客户端的