浏览 2132 次
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-08
1、连接池 2、MVC 3、cookie 二、会话 session Session是基于Cookie来跟踪的,即:没有Cookies的支持,Session是不能运行起来的。 Session对象用来解决客户端发送多个请求时来用户请求信息的存储问题,但是他和ServletRequest对象是不同的,他会在有需要时创建, 但是他的生命周期会比请求对象要长。Session对象的生命周期也是有限制的,如果长时间的没有访问,就会销毁掉Session对象,可以通 过Session对象的 setAttribute(String name, Object o) 和getAttribute(String name)来存取数据信息。Session是用户级的对象。 Session是存在于服务器内存中的,用于存用户多个请求的信息的;同时也要求客户端发送个Session的标志:SessionID (地址栏或封装在 请求的Header中)。 getSession(true)就表示如果Session不存在就创建一个新的Session,并把Session的标识SessionID写到Cookie中,如果存在就是用这个 Session。getSession(false)就是在Session不存在时不会创建新Session而是返回null。如果使用getSession()方法,就等同于getSession(true)。 注意:ServletRequest对象适用于传输大量的数据,因为其生命周期比较短,可以有效的节省内存资源。 大数据量的传输或保存不适合使用Session空间。 用户身份认证 登录时,创建session 访问资源页面时,先判断session是否存在 退出时清除session:session. invalidate(),接着可以将用户引导到登录页面 IE中一个窗口代表一个会话,Mozilla firefox不一样 多个窗口可通过Cookies来识别Seesion。 Sssion第二种跟踪机制:URLRewriting Response.sendRediret(Response.encodeRedirectURL(/serv-app/student/ctrl“)) 把在地址栏后加上SessionID地址地址参数 out.println(”<a href=”+response.encodeURL(url)” <form actioin=”response.encodeURL(url)”> Forward也是encodeURL 特殊一个:Response.sendRedirect(response.encodeRedirectURL(url)); 每一个URL都要加上sessionID,但它不能跨越静态页面。 所以一般默认针对Cookies可用编写程序。 1、session.invalidate() --- session被立即销毁 session.setMaxInactiveInterval(int interval) --- 设置最大的超时时间,以秒为单位 2、会话的空间不是系统自动创建的,是程序创建的 request.getSession(false); 判断请求中是否存在session,以确保服务中资源的保护 三、重定向 产生新的请求,其中不包含原请求的session信息,只包含cookie信息 四、Session跟踪机制 1、cookie机制 2、URL回写机制:把sessionid绑定在地址栏中 response.sendRedirect(response.encodeRedirectURL(url)); 五、Servlet过滤器(Filter) 应用:Sessioin logging encoding 过滤器是用于过滤Servlet的请求和响应,过滤器是存在于请求和被请求资源之间的。 过滤器就像当于一个中间件,请求要经过过滤器,然后过滤器才去掉用Servlet,Servlet的响应也会被过滤器截获并作相应的处理。 Filter是一个接口,要写一个自己的Filter就只能实现Filter接口。 Filter也有自己的生命周期,他的生命周期和Servlet比较相似,也是会先调用init()方法,然后再调用核心的处理过滤的方法doFilter(),这个方法中可定义了过滤规则,然后是destory()方法销毁Filter对象。 dofilter(ServletRequest request,ServletResponse response,FilterChain chain) 这个是过滤的核心方法,FilterChain的方法doFilter(ServletRequest request, ServletResponse response)也就是用过滤后的请求调用资源的方法,如果不写这个方法,也就算不会去调用相应的资源。 Filter的配置 Filter的配置和Servlet相似。 <filter> <filter-name>SessionFilter</filter-name> <filter-class>alan.filter.SessionFilter</filter-class> </filter> <filter-mapping> <filter-name>SessionFilter</filter-name> <url-pattern>/protected/*</url-pattern> <!--这里的url-pattern就是要过滤的Servlet的url-pattern--> <dispatcher>request</dispatcher> <dispatcher>forward</dispatcher> <dispatcher>include</dispatcher> <!--上面的三个是过滤的范围--> </filter-mapping> CharArrayWriter类,是一个将数据保存在字符数组中的输出流,我们可以使用它来构造一个PrintWriter对象,也就实现了向内存输出。 CharArrayWriter类的toString()和toCharArray()方法就可以取得写入内存中的数据。 注意:CharArrayWriter类是一个不会真正输出的类,他的write()方法只会将内容写入字符数组,而且这个字符数组是会自动增长的。 六、Servlet的url-pattern url-pattern可以使用以下三种方式 1,确切路径匹配,也就是给出确定的路径 xxx/xxxx 2,模糊路径匹配,也就是指给出一部分路径,xxxx/*,他会匹配确定路径,也就是xxxx/a 或者是xxxx/b都是可以匹配的 3,扩展名匹配,也就是会匹配扩展名,只要是扩展名相同就匹配,xxx.xxx *.xx 注意:扩展名匹配和确切路径匹配不能放在一起使用,也就是不能写成 xxxx/xxxx/xxx.xx,但是可以用 *.xxx。 ServletRequest对象的三个返回路径的方法 getContextPath()获得应用的路径,用动态获取应用路径 getServletPath()获得Servlet路径,也就是form中的action,如果使用确切路径那么就会是这个Servlet配置的url-pattern。 getPathInfo()使用模糊路径匹配时会返回匹配模糊部分。 注意:在html的form表单的action中,如果使用了扩展名匹配,一定要写明/xxxxx/xxx.xx,不要写成/xxxx/*.xx,在form的action中要尽量使用绝对路径,也就是要用 应用名/xxx.xx或者应用名/xxx。 SingleThreadModel接口 1) 如果希望禁止多线程访问,可以让Servlet使用SingleThreadModel接口: public class YourServlet extends HttpServlet implements SingleThreadModel{ ... } 2) 使用此接口,系统将保证不会存在多个请求线程同时访问Servlet的单个实例。但是仍然需要同步对存储在Servlet外部的类变量或共享字段的访问。 3) 如Servlet频繁被访问,则Servlet访问的同步将严重影响性能(延时)。 ServletRequest对象的生命周期就是在service()方法中,除了forward(...,...)方法将这个请求对象转发给其他的Servlet。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |