- 浏览: 287212 次
- 性别:
- 来自: 龙城
最新评论
-
redey:
这垃圾东西,1.6以上JDK不支持
Jocky混淆JAVA代码(保护你的JAVA项目) -
u012907473:
水电费是否是否
js页面缓存的一个解决办法 -
jackson200:
讲解的很详细!
Jocky混淆JAVA代码(保护你的JAVA项目) -
jamesqq79:
下载解压缩后,不知是何文件格式,用PDF阅读器打不开。
Java程序员的推荐阅读书籍之十《Agile Java》 -
meimei727:
<!-- 给页面文件中的js和css引用增加版本号 -- ...
利用ant进行项目发布
最近的web应用中,HttpSession过多,会造成weblogic服务器内存溢出的现象发生。详细了解了一下程序,发现整个过程是无状态的,也就是说,整个程序中,没有session的创建的代码。那么,动不动就十几万的垃圾session是哪里来的呢?网上查了一下,恍然大悟,原来在访问jsp页面的时候,会默认创建session。大家都知道,jsp有内置的页面级变量session,我们可以直接拿来用,也就是说这个session的创建过程不是程序显式实现的,而是jsp的内在机制,由应用服务器实现的。
两个简单jsp页面,对比测试
1.默认的jsp页面
jsp源代码:
<%
out.println("Hello,world!");
%>
编译后的servlet代码:
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import
javax.servlet.jsp.*;
public final class test_jsp extends
org.apache.jasper.runtime.HttpJspBase
implements
org.apache.jasper.runtime.JspSourceDependent {
private static java.util.Vector _jspx_dependants;
public java.util.List getDependants() {
return
_jspx_dependants;
}
public void _jspService(HttpServletRequest request, HttpServletResponse
response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext =
null;
HttpSession session = null;
ServletContext application =
null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext
_jspx_page_context = null;
try {
_jspxFactory =
JspFactory.getDefaultFactory();
response.setContentType("text/html");
pageContext =
_jspxFactory.getPageContext(this, request, response,
null, true,
8192, true);
_jspx_page_context = pageContext;
application =
pageContext.getServletContext();
config =
pageContext.getServletConfig();
session =
pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.println("Hello,world!");
} catch (Throwable t) {
if (!(t instanceof
SkipPageException)){
out = _jspx_out;
if (out != null
&& out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null)
_jspx_page_context.handlePageException(t);
}
} finally
{
if (_jspxFactory != null)
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
注意红色部分代码,就是session创建过程。
2.页面中禁用session的代码
jsp源代码:
<%@ page session="false" %>
<%
out.println("Hello,world!");
%>
编译后的servlet代码:
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import
javax.servlet.jsp.*;
public final class test_jsp extends
org.apache.jasper.runtime.HttpJspBase
implements
org.apache.jasper.runtime.JspSourceDependent {
private static java.util.Vector _jspx_dependants;
public java.util.List getDependants() {
return
_jspx_dependants;
}
public void _jspService(HttpServletRequest request, HttpServletResponse
response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext =
null;
ServletContext application = null;
ServletConfig config =
null;
JspWriter out = null;
Object page = this;
JspWriter
_jspx_out = null;
PageContext _jspx_page_context = null;
try {
_jspxFactory =
JspFactory.getDefaultFactory();
response.setContentType("text/html");
pageContext =
_jspxFactory.getPageContext(this, request, response,
null, false,
8192, true);
_jspx_page_context = pageContext;
application =
pageContext.getServletContext();
config =
pageContext.getServletConfig();
out = pageContext.getOut();
_jspx_out = out;
out.write('\r');
out.write('\n');
out.println("Hello,world!");
} catch (Throwable t) {
if (!(t instanceof
SkipPageException)){
out = _jspx_out;
if (out != null
&& out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null)
_jspx_page_context.handlePageException(t);
}
} finally
{
if (_jspxFactory != null)
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
很明显,少了上边红字部分代码。
ie7多窗口浏览器中测试
代码1测试结果:
同一个浏览实例中,代码1会创建session,但是刷新页面后,不新创建session。如果每次开新的浏览器实例访问该页面,每访问一次,新创建一个session。
代码2测试结果:
无论是同一个浏览器实例,还是新开浏览器访问,均不会创建session。
结论
这说明,jsp在默认状态下,当同一个浏览器实例访问时,因为浏览器向服务器端发送了cookie值,这样,服务器端创建一次session后,就不再创建。但是如果新开浏览器实例,因为cookie值不一样,服务器端就会新创建session。
thcomm的通信过程中,可能不会向服务器端发送cookie值,也就是说服务器对于每次的thcomm访问,都会认为是一个新的客户端的访问,那么jsp就会默认的创建一个session,这样在通信频繁的时候,会造成大量的垃圾session,增加了服务器的负担,浪费资源,严重情况下导致内存溢出。
所以,在使用jsp作为thcomm服务器端的时候,这是一个需要注意的问题。
发表评论
-
autochk program not found 蓝屏重启问题解决
2012-04-17 10:54 13775起因: 因为硬盘空间不够,所以把原来的双系统中的ubu ... -
IOS开发一些资源
2012-02-06 16:07 1325从别的地方看到的,多谢作者,现贴在这里备忘。 在线教程 ... -
发现一个好东东,可以让浏览器跟本地桌面交互,哈哈
2011-09-08 17:35 1215http://gears.google.com/ -
nodejs开发运行环境搭建
2011-08-18 15:03 4349一. geddy 开发运行环境搭建 geddy是基 ... -
javascript来势凶猛
2011-08-15 17:22 1180引子 java编程弄了7,8个年头了,也 ... -
Oracle驱动包装
2011-07-06 17:06 1989见附件。 -
javaeye域名变了
2011-04-01 10:31 1250javaeye域名变了,才发现,哈哈,mark下。 -
拥抱敏捷
2011-01-15 17:27 1066前言 有关项目管理和软件开发方 ... -
重温设计模式
2011-01-13 10:27 1145策略模式: 定义了算 ... -
jsoup,html解析的利器
2011-01-07 09:21 1183http://jsoup.org/download -
关于html表格复制到excel
2010-09-09 14:04 5831刚才一个朋友问我这个事情,我拍脑袋想了一下,给他答复不可能,因 ... -
Java 路径 System.getProperty("key")的参数key
2010-09-02 14:37 1245java.version ... -
这种需求,大家看看有没有比较好的解决方案
2010-06-25 09:47 2242在我们的应用中,碰到了如图所示的一种网络结构。 重新描 ... -
java中singleton的几种实现方式
2010-06-24 15:08 1452传统的最简单的方式 这种模式有一个缺点就是不能实现延 ... -
oracle分页查询数据重复问题的解决
2010-06-24 11:00 3405在oracle分页查询中,我们采用类似以下所示的公认的比较高效 ... -
ubuntu10.04中安装使用IE6
2010-06-21 09:55 2548在用ubuntu910的时候,已经装了一遍IE了,但是升级到1 ... -
今天发现的两个有价值的东东
2010-06-17 15:45 1489其一,iRedMail,开源邮件解决方案。 其 ... -
ubuntu 10.04 中安装mysql5.1.4
2010-06-17 15:28 1803自从升级到10.04以后,mysql就不正常,卸载装了n次,均 ... -
升级到ubuntu 10.04,wine中的ie不正常了
2010-06-11 10:01 1681ubuntu上也折腾了半年了,日常工作生活基本没有太多的障碍了 ... -
升级到ubuntu10.04,mysql不能用了
2010-06-11 09:53 18519.10版本用了半年了,10.04发布了,看了10.04的宣传 ...
相关推荐
C#中在一个窗体里调用另一个窗体的方法;C#不同窗体方法调用
S7-200SMART 中调用子程序时需要注意的问题汇总
例如有这样一个html,里面有一个按钮,当按下时调用b.js文件中的方法b()。而b()中又要调用a.js文件中的方法a()。若要实现这个功能,必须注意,将要引入的Js文件代码放在</body>下面。 首先,我们在html中...
C++中,一个类需要调用另外一个类的数据成员时,经常不知道怎么做,这里整理了两种方法,来实现在一个类中调用另外一个类的数据成员。
remote-function是一个跨进程通讯库,它可以像调用本进程函数一样调用另外一个进程的函数。 remote-function支持调用普通函数,也支持调用类的成员函数。 remote-function底层使用命令管道进行通讯,内置的流程完成...
使用DmReg.dll免注册调用应该注意DmReg.dll版本问题,否则会出现调用不成功,这是源码示例
调用CPLEX求解优化问题的简化方法调用CPLEX求解优化问题的简化方法
//本文所有的例子只有一个sum即加法函数。 2.使用方法: (1).隐式调用法: 将MyDll.lib和MyDll.h拷贝到需要应用该DLL的工程的目录下,将MyDll.dll拷贝到产生的应用程序的目录下,并在需要应用该DLL中的函数的CPP...
JNI 方法调用时的一些注意事项,可做参考避免出现不必要的错误
假如一个方法在1s内被调用了100次,现在想让这个方法,在一定时间内(假如 1s ),只调用一次,该方法调用的参数是100次调用中的最后一次的参数
注,chrome 通过注册表注册表 只能调用本地的 exe 或者bat文件,不能调用 ppt word 这样的问题,所以我用VB 写了一个exe 可以接收调用参数,这样只许注册一次就可以通过传参打开所有课执行文件了 由于1.exe是后台...
LabVIEW编程调用DLL时遇见的问题
c#中用一个窗口去调用另一个窗口的实现方法!注意这里的from1中的属性设置为public
调用子程序是ABAQUS的一个重要功能,它允许用户编写自己的 Fortran 子程序来实现特定的计算任务。然而,在ABAQUS中调用子程序需要安装 Microsoft Visual Studio 和 Intel Visual Fortran,这就需要用户具备一定的...
1.动态调用类方法,模拟VB中的CallByName 2.附带了C#和VB的代码 3.主要是一个项目中用到了要调用很多参数和返回值相同的一系列函数,所以 想到了这个方法,不用重复的写方法名,使用循环调用
递归调用详解,代码详细讲解了如递归调用以及调用中应该注意的一些问题
一个免费调用gpt4源码
`Desktop` 类提供了一个简洁的方式来打开其他.exe 可执行程序,而 `Runtime` 类提供了一个更加灵活的方式来执行外部命令。两种方式都可以用来实现调用其他.exe 可执行程序的功能,但它们的使用场景和方式有所不同。 ...
PHP调用com时需要注意的事项。文档中以PHP调用matlab生成dll为例,对调用过程中可能遇到的问题及解决方法进行了描述。
从a窗体调用b窗体的事件,如果您想在a窗体中调用b窗体的某一事件,你可以来看看我的这篇文档