java-web 第五讲 应用程序的部署 和 会话跟踪

1:web 应用程序的配置

1.1  conf/server.xml    <Context> 讲解  : 表示一个web 应用程序运行在特定的虚拟机中,不用再将项目文件拷贝到 webapps 下

<Context> 元素  是 <Host> 元素的子元素
         元素属性讲解:
className:  指定实现了 org.apache.catalina.Context 接口的类名。

coockie      : 指定是否将coockie应用于 session,默认为 true

crossContext  :  如果设置为 true在应用程序内容调用 ServletContext.getContext() 成功返回运行在同一个虚拟机中的其他web项目的 请求调度器。默认 false

doBase 指定web 程序的文档目录或者 war文件的路径名,该属性是必须的 绝对路径 或者 appBase 下的相对路径

path:  指定web 应用程序的上下文路径。
reloadable:  如果设置为 true,服务器会监视 WEB-INF/classes 和 WEB-INF/lib 目录下类的改变,如果发现更新,服务器会自动重新加载该 web 程序,默认 false,需占用一定资源开销
unpackWAR: 为true 的话 Tomcat 在运行web 应用程序前将展开所有压缩的 Web 应用程序。默认 true

例如:
<Host name[="localhost" appBase="webapps" unpackWARS="true" autoDeply="true" xmlValidation="false" xmlNamespaceaWare="false">
<Context path="/MyServlet" doBase="/MyServlet" reloadable="true">
</Host>

<Context> 元素还可以放在 conf/context.xml 在这个文件中的信息将被所有的web 应用程序所加载
还可以放在 对应 应用程序下的 META-INF/context.xml 内

Tomcat 中 不建议将 <Context> 元素放在 server.xml 中,因为容器启动后,server.xml 只加载一遍,将不会再加载。

1.2 servlet 的另一种运行方式
	  	第一种方式:  web.xml 中部署 servlet  
		  第二种方式: 利用 Tomcat 的 Servlet 调用器,即在 Tomcat 下的/conf/catalina/localhost 下创建 项目名.xml   添加 <Context> 元素 docBase 节点为 绝对路径,可以运行

    1.3  与servlet 配置相关的元素  web.xml
		<servlet> 节点
			
		
				<init-param> 节点内容的获取通过 servlet 实例中的ServletContext.getInitParameter("这里输入param-name 名称"); 并且这部分应该在 servlet init() 方法中初始化

<servlet-mapping> 节点
			在 servlet 和 URL 之间定义一个映射,包含了子元素 <servlet-name>  和 <url-pattern> url相对路径 这个在form 表单中的 action = 中 定义


		

2:web 应用程序中数据库的访问

数据库的url name passwd driverClass 可以放在 servlet 的 <init-param> 中
注意 CallableStatement 用于执行存储过程
本章节重点讲下 JDBC数据源和连接池
利用 DataSource 接口来获取对数据库的连接
DataSource 对象获取,通过 java 的 jndi服务器查询来获取
1:在 server.xml 的 <Context> 元素中配置数据源
2:使用 java 上下文来获取数据源: 注意:在配置jdbc 数据源所指定的JNDI 名,是相对于 java:comp/env 上下文来的
下章节讲 servlet 的会话跟踪技术 本章节不再进行举例

3: 会话跟踪

客户和服务器之间的会话是通过HTTP 协议 属于无状态的,web服务器需要采用一种机制来唯一标示一个客户
会话跟踪实现的三种机制:
SSL 会话: 安全套接字层
Cookie: 以键值对的形式记录会话跟踪的内容,服务器利用响应报头 Set-Cookie 来发送Cookie 信息
响应包头的格式为:
Set-Cookie: NAME=VALUE (Coockie 名称); 这里必须首先出现,后面的元素可以无序
Content=value; - 包含用户私有信息
Domain=value;  - 指定cookie 在哪一个域中有效 必须以 . 号开始
Max-Age=value; - Cookie 生生存时间 以秒 为单位 超过就无效 
path=value; - 指定 coockie 在哪一个URL 子集下有效 
Version=1
例如: Set-Cookie: uid=zhangsan;Max-Age=3600;Domain=.sunxin.org;Path=/bbs;Version=1
说明上面这个响应包头发送了一个名为 uid 值为 zhangsan 的cookie,生存时间为3600秒,在 sunxin.org 域的/bbs 路径内有效,超时该cookie 无效。
当浏览器接受到这个响应报头后,可以选择拒绝或者接受这个cookie,如果接受的话,浏览器下一次发送请求给 http://www.sunxin.org/bbs/路径下的资源时,同时也会发送一个请求报头:
Cookie:uid=zhangsan
服务器从请求报头中获取到cookie,通过标示符取出 zhangsan 的状态信息,这样,通过为不同的客户发送不同的cookie,可以实现每个用户的会话跟踪。 cookie 会存在客户硬盘上,
如果客户浏览器禁用 cookie的话,那么本机制就无法运行。
URL重写:在 URL 中嵌入标示客户的 Session ID,servlet 容器解析 URL,取出 SessionID,根据SessionID将请求与特定的Session 关联。
SessionID的名称按照规范必须是 jsessionid,
例如: http://www.sunxin.org/bbs/index.jsp;jsessionid=1234?name=zhangsan&age=18
要跟踪客户端的会话,就需要将所有发往客户端的URL 进行编码,可以通过调用 HttpServletResponse 接口中的 encodeURL() 方法和 encodeRedirectURL() 方法来实现,其中 encodeRedirectURL() 方法
在 调用 重定向 sendRedirect() 方法调用前使用。

3.1 java Servlet API 的会话跟踪

				 java Servlet API 中的 HttPSession 封装了Session 的概念,当一个会话开始的时候,Servlet 容器 就创建了一个 HttpSession 对象,在 HttpSession 中存放客户的状态信息,同时 
			Servlet 容器为 HttpSession 分配了一个唯一的 SessionID 将其作为 Cookie 或 URL的一部分发送给浏览器,当客户再发送请求的时候,浏览器将Cookie 一起发出,容器读出 SessionID 找到 HttpSession 对象。
			  HttpSession 接口: 
					Object getAttribute(String name);
					Enumberation getAttributeNames();
					void removeAttribute(String name);
					void setAttribute(String name,Object value);
				四个方法用于 HttpSession 读取 移除和设置属性,
					long getCreationTime():返回session 创建的时间,从1970-1-1 以后的毫秒数 
					String getId(): 返回一个字符串,包含Session 唯一标示符。
					long getLastAccessedTime(): 返回客户最后一次发送与Session 相关请求的时间 可以确定两次会话期间客户的非会话间隔时间
					int getMaxInActiveInterval(): 返回以毫秒为单位的最大时间间隔,这个时间是容器在客户请求期间保持session 打开的最长时间间隔,超过时间session 失效。
					void setMaxInActiveInterval(): 设置session 失效时间,如果值为 -1 ,session 永不失效。
										ServletContext  getServletContext(): 返回 Session 所属的 ServletContext 对象
										void invalidate():  使session 失效,如客户退出登录。
										boolean isNew(): 判断session是否在容器中存在。
						Session 的生命周期:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章