易截截图软件、单文件、免安装、纯绿色、仅160KB

jsp Session管理(ThreadLocal)

在各种Session 管理方案中, ThreadLocal 模式得到了大量使用。ThreadLocal 是
Java中一种较为特殊的线程绑定机制。通过ThreadLocal存取的数据,总是与当前线程相关,
也就是说,JVM 为每个运行的线程,绑定了私有的本地实例存取空间,从而为多线程环境常出
现的并发访问问题提供了一种隔离机制。
首先,我们需要知道,SessionFactory负责创建Session,SessionFactory是线程
安全的,多个并发线程可以同时访问一个SessionFactory 并从中获取Session 实例。而
Session并非线程安全,也就是说,如果多个线程同时使用一个Session实例进行数据存取,
则将会导致Session 数据存取逻辑混乱。下面是一个典型的Servlet,我们试图通过一个类
变量session实现Session的重用,以避免每次操作都要重新创建:
public class TestServlet extends HttpServlet {
private Session session;
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
session = getSession();
doSomething();
session.flush();
}
public void doSomething(){
......//基于session的存取操作
}
}
代码看上去正确无误,甚至在我们单机测试的时候可能也不会发生什么问题,但这样的代
Hibernate Developer’s Guide Version 1.0
September 2, 2004 So many open source projects. Why not Open your Documents?
码一旦编译部署到实际运行环境中,接踵而来的莫名其妙的错误很可能会使得我们摸不找头脑。
问题出在哪里?
首先,Servlet 运行是多线程的,而应用服务器并不会为每个线程都创建一个Servlet
实例,也就是说,TestServlet在应用服务器中只有一个实例(在Tomcat中是这样,其他的
应用服务器可能有不同的实现),而这个实例会被许多个线程并发调用,doGet 方法也将被不
同的线程反复调用,可想而知,每次调用doGet 方法,这个唯一的TestServlet 实例的
session 变量都会被重置,线程A 的运行过程中,其他的线程如果也被执行,那么session
的引用将发生改变,之后线程A 再调用session,可能此时的session 与其之前所用的
session就不再一致,显然,错误也就不期而至。
ThreadLocal的出现,使得这个问题迎刃而解。
我们对上面的例子进行一些小小的修改:
public class TestServlet extends HttpServlet {
private ThreadLocal localSession = new ThreadLocal();
public void


相关文档:

预编译JSP的ANT脚本 (兼容tomcat5和tomcat6)

<project name="jspToServletToClass" default="jsp2servlet2class" basedir=".">

<!-- set global properties for this build -->
<property environment="env" />
<property name="src" location="F:\JspC\src\" />
< ......

SetCharacterEncodingFilter jsp字符过滤器

package com.demo.filter;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;
public class SetCharacterEn ......

JSP内部对象详解

1、Out对象
主要用来向客户端输出各种格式的数据,并且管理应用服务器上的输出缓冲区,Out对象的基类是javax.servlet.jsp.JspWriter类。
Out的主要方法:
out.println(DataType);或out.print(DataType);
实例:
<%@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
&l ......

Jsp页面中文参数传递get和post方法分析

在项目中,我们经常遇到需要在jsp页面切换中传递中文字符。这主要有两种方式。
  URL方式,例如:http://website/test1.jsp?act=add&type=苹果&param=%20D%20B
  FORM方式,例如:
  <form name=test mehtod="post">
  <input type=hidden name=text2 value="中文">
  <input type=t ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号