j2EE servlet(二)

ServletConfig

在servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数。web容器在创建servlet实例的时候,会自动将这些参数封装到ServletConfig中,在调用init方法时,将ServletConfig传递给Servlet,程序员可以通过ServletConfig获取当前Servlet的信息。

  • getServletContext()取得的是 <context-param>配置的参数 ,getServletConfig()取得的是 <servlet> <init-param>配置的参数

  • getServletContext()应用于整个web App,而getServletConfig()仅应用于当前Servlet。 但是ServletConfig对象拥有ServletContext的引用。所以可以通过getServletConfig()来获得ServletContext,从而得到web App的初始值

Session

会话是指一个用户在客户端登录,为达到某个目的与服务器端进行多次交互,最后退出应用系统的全过程。会话管理是对用户会话全过程中涉及的会话状态保存与恢复、会话信息的采集与管理的一系列活动。

会话机制

j2EE servlet(二)

会话追踪

客户端发送会话标示

会话标示发送给服务端

机制:Cookies,SSL Sessions,URL重写,表单隐藏

  • cookies:HTTP cookies是最常用的会话跟踪机制,所有的servlet引擎都必须支持这种方法。原理:引擎把用户会话ID保存在cookie中,发送该cookie到客户端,客户端就会在以后的请求中把这个cookie返回给服务器。

cookie例子:

ac
1,034,001
qq.com/
3584
2823045120
36591030
1260402003
30387200
*

j2EE servlet(二)

  • Ssl Sessions

SSL(安全套接字层)是HTTPS协议采用的一种加密技术,内建了会话跟踪功能,从一个客户端来的多个请求允许用一个含糊的标识,而servlet引擎就用这个数据定义一个Session 

  • URL重写

是最低性能的通用会话跟踪方法。当一个客户端不能接受cookie时,URL重写就会作为基本的会话跟踪方法URL重写把session id写入URL中,这样的URL会被引擎解析和某个session相关联。

  • 隐藏表单字段的方法

利用HTML内hidden的属性,把客户端的信息,在用户不察觉的情形下,偷偷地随着请求一起传送给到服务器处理

会话管理机制

会话识别过程

会话状态保存和获取

在servlet中获取session

        HttpSession session = request.getSession();//get session
        session.setAttribute("user", "wangweiwei"); //set Attribute
        System.out.println(session.getAttribute("user"));
        session.invalidate(); // free session,default time is 30 minutes.

常用用法

1、 getAttribute():从session中获取以前存储的值

2、 getAttributeNames():返回session中所有属性的名称

3、 setAttribute():将键与值关联起来,存储进session

4、 removeAttribute():删除session中存储的对应键的值

5、 invalidate():删除整个session及其存储的键值

6、 logout():注销当前用户7、 getId():获取每个session对应的唯一ID

8、 getCreationTime():获取session创建的时间

9、 getLastAccessedTime():获取session最后被访问的时间

10、getMaxInactiveInterval():在用户没有访问的情况下,会话在被自动废弃之前应该保持多长时间


事件监听

Servlet 事件有两个级别: 

Application 级别事件 :包含着运行应用程序的虚拟机级别的相关资源和状态,即和 servlet 的 Context 对象相关。 

Session 级别的事件 :包含着一个单一用户的 session 的一系列请求的相关资源和状态,即 Http 的 Session 对象。 

在上面两个级别的事件,又可分别分为两种: 

生命周期的改变 

属性的改变 

j2EE servlet(二)

context监听

j2EE servlet(二)

package myApp;
import javax.servlet.http.*;
public final class MyContextListenerClass implements
    ServletContextListener {
     public void contextInitialized(ServletContextEvent event) {
       /* 在正被初始化的 Servlet 上下文之前
          调用此方法(当部署 Web 应用程序时)。
          可以在这里初始化 Servlet 上下文相关的数据。
       */ 
     }
 public void contextDestroyed(ServletContextEvent event) {
       /* 当未部署 Servlet 上下文(Web 应用程序)
          或 WebLogic Server 关闭时,
          调用此方法。
       */}

session监听

j2EE servlet(二)

package myApp;
import javax.servlet.*;
public final class MySessionAttributeListenerClass implements
   HttpSessionAttributeListener {
     public void attributeAdded(HttpSessionBindingEvent sbe) {
       /* 当将特性添加到会话时, 
          调用此方法。
       */
     }
 public void attributeRemoved(HttpSessionBindingEvent sbe) {
       /* 从会话删除特性后,
          调用此方法。
       */
 }
 public void attributeReplaced(HttpSessionBindingEvent sbe) {
       /* 在会话中替换特性之后,
          调用此方法。
       */
 }

Listener监听在web.xml进行配置,放在web-app下一层

	<display-name>MyListeningApplication</display-name>
	<listener>
		<listener-class>com.listener.SessionManager</listener-class>
	</listener>


URL路径

	<servlet>
		<description>This is the description of my J2EE component</description>
		<display-name>This is the display name of my J2EE component</display-name>
		<servlet-name>login</servlet-name>
		<servlet-class>login</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>login</servlet-name>
		<url-pattern>/servlet/login</url-pattern>
	</servlet-mapping>
	
	<servlet-mapping>
            <servlet-name>AnyName</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
            <servlet-name>AnyName</servlet-name>
            <url-pattern>/action/*</url-pattern>
        </servlet-mapping>

有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾

1.精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test ,这个时候容器就会先进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了

2.最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB

3.扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action 

4.如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet

j2EE servlet(二)


你可能感兴趣的:(session,事件监听,servletconfig,URL路径)