session
介绍
jsp利用servlet提供的HttpSession接口识别一个用户,存储这个用户的所有访问信息。默认情况下,jsp允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化。禁止会话跟踪需要关掉它,通过将page指令中session属性值设为false来实现。
<%@ page session="false" %>
下表列出了session对象的一些重要方法:
方法 | 功能实现 |
---|---|
Object getAttribute(String name) | 返回session对象中于指定名称绑定的对象,如果不存在则返回null |
Enumeration getAttributeNames() | 返回session对象中所有的对象名称 |
Long getCreationTime() | 返回session对象被创建的时间,以毫秒为单位,从1970年1月1号凌晨开始算起 |
String getId() | 返回session对象的ID |
Long getLastAccessedTime() | 返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起 |
int getMaxInactiveInterval() | 返回最大时间间隔,以秒为单位。servel容器将会在这段时间内保持会话打开 |
void invalidate() | 将session无效化,解绑任何与该session绑定的对象 |
boolean isNew() | 返回是否为一个新的客户端,或者客户端是否拒绝加入session |
void removeAttribute(String name) | 移除session中指定名称的对象 |
void setAttribute(String name, Object value) | 使用指定的名称和值来产生一个对象并绑定到session中 |
void setMaxInactiveInterval(int interval) | 用来指定时间,以秒为单位,servelt容器将会在这段时间内保持会话有效 |
配置web.xml文件
<session-config>
#定时
<session-timeout>15</session-timeout>
</session-config>
Servlet
介绍
Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自web浏览器获其他HTTP客户端的请求和Http服务器上的数据库或应用程序之间的中间层。
优势
- 性能明显更好
- servlet在web服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求
- Servlet是独立于平台的,因为他们是Java编写的
- 服务器上的Java安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet是可信的
- Java类库的全部功能对Servlet来说都是可用的。它可以通过sockets和RMI机制与applets、数据库或其他软件进行交互。
任务
servlet主要执行一下主要任务:
- 读取客户端(浏览器)发送的显式的数据。包括网页上的Html表单,或者也可以是来自applet或自定义的http客户端程序的表单
- 读取客户端(浏览器)发送的隐式的http请求数据。包括cookies、媒体类型和浏览器能理解的压缩格式等等
- 处理数据并生成结果。这个过程可能需要访问数据库,执行RMI或CORBA调用,调用Web服务,或者直接计算得出对应的响应
- 发送显示的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(Html或Xml、二进制文件(gif)、Excel等
- 发送隐式的http响应到客户端(浏览器)。包括告诉浏览器或其他客户端被返回的文档类型,设置cookies和缓存参数,以及其他类似的任务。
部分读取HTTP头的方法
方法名称 | 功能描述 |
---|---|
Cookie[] getCookies() | 返回一个数组,包含客户端发送该请求的所有的Cookie对象 |
Enumeration getAttributeNames() | 返回一个枚举,包含提供给该请求可用的属性名称 |
Enumeration getParameterNames() | 返回一个String对象的枚举,包含在该请求种包含参数的名称 |
HttpSession getSession() | 返回与该请求关联的当前session会话,或者如果请求没有session会话,则创建一个 |
Object getAttribute(String name) | 以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回null |
String getMethod() | 返回请求的http方法的名称,如:get、post、put |
String getRequestURI() | 从协议名称直到http请求的第一行的查询字符串中,返回该请求的url的一部分 |
String getRequestedSessionId() | 返回有客户端指定的session会话ID |
String getParameter(String name) | 以字符串形式返回请求参数的值,或者如果参数不存在则返回null |
Filter
基本工作原理
- Filter程序是一个实现了特殊接口的Java类,与servelt类似。也是由Servlet容器进行调用和执行的。
- 当在web.xml注册了一个Filter来对某个Servlet程序进行拦截处理时,它可以决定是否将请求继续传递给Servlet程序,以及对请求和响应消息是否进行修改。
- 当Servlet容器开始调用某个Servlet程序时,如果发现已经注册了一个Filter程序来对该Servlet进行拦截,那么容器不再直接调用Servlet的service方法,而是调用Filter的doFilter方法,再由doFilter方法决定是否去激活service方法
- 但在Filter.doFilter方法中不能直接调用Servlet的service方法,而是调用FilterChain.doFilter方法来激活目标Servlet的service方法,FilterChain对象是通过Filter.doFilter方法的参数传递进来的。
- 只要在Filter.doFilter方法中调用FilterChain.doFilter方法的语句前后增加某些程序代码,这样就可以在Servlet进行响应前后实现某些特殊功能。
- 如果在Filter.doFilter方法中没有调用FilterChain.doFilter方法,则目标Servlet的service方法不会被执行,这样通过Filter就可以阻止非法的访问请求。
doFilter方法
当一个Filter对象能够拦截访问请求时,Servlet容器将调用Filter对象的doFilter方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException.ServletException
其中,参数request和response为web容器或Filter链中上一个Filter传递过来的请求和响应对象;参数chain为代表当前Filter链的对象。
Filter的注册与映射
1、注册Filter
一个<filter>元素用于注册一个Filter。其中,<filter-name>元素是必需的,<filter-class>元素也是必需的,<init-param>元素是可选的,可以有多个<init-param>元素。
<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>FirstFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter>
2、映射Filter
<filter-mapping>元素用于设置一个Filter所负责拦截的资源。一个Filter拦截的资源可以通过两种方式来指定:资源的访问路径和Servlet名称。
第一种:指定资源的访问路径
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<url-pattern>元素中的访问路径的设置方式遵循Servlet的url映射规范
- /*:表示拦截所有的访问请求
- /filter/*:表示拦截filter目录下的所有访问请求,如:http://localhost:8888/testFilter_001/filter/xxxxxx .
- /test.html:表示拦截根目录下以test.html为资源名的访问请求,访问链接只会是:http://localhost:8888/test.html。
第二种:指定Servlet的名称
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<servlet-name>default></servlet-name>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
- <servlet-name>元素与<url-pattern>元素是二选一的关系,其值是某一个Servlet在web.xml文件中的注册名称
- <dispatcher>元素的设置值有4种:REQUEST、INCLUDE、FORWARD、ERROR,分别对应servlet容器调用的4种方式:
- 通过正常的访问请求调用
- 通过RequestDispatcher.include方法调用
- 通过RequestDispatcher.forward方法调用
- 作为错误响应资源调用
如果没有设置<dispatcher>子元素,则等效于REQUEST的情况。也可以设置多个<dispatcher>子元素,用于指定Filter对资源的多种调用方式都进行拦截。