Submitted by string on 2006, August 11, 10:02 AM
在一张网页中,使用如下script.
<script>
function popup(href){
var winStyle="left=0,top=0,width=800,height=600,toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes";
var remote = window.open( href,"",winStyle);
}
</script>
在<td>连接地址</td>来在新窗口打开一个连接.原来网页上有gif文件.
这样的话,回到原来的网页,gif的动画就sb了,不动了.
那么如何解决这个问题呢?
方案:用span这个便签,给他设定onclick的事件,调用这个function popup。
<span class="STYLE1" onclick ="javascript:popup('http://www.sina.com');">这是一个测试的语句。
貌似能解决上面的问题!
Tags: ie, bug
系统工程师 | 评论:2
| 阅读:3660
Submitted by string on 2006, July 31, 10:28 PM
问题:同一个页面,不加入图片,载入时间比加入图片时间慢一个数量级。原因如何?
分析该页面,其中共有六处应用了自定义标签的include,在cms的应用中,需要app先到标签库查找标签,然后根据调用的页面到一个页面配置文件中寻找相应的jsp文件名。跟踪页面进去,发现其中有2个页面需要权限验证,通过session操作。还有4处,一处为左边连接页面,一处为右边查询页面,一处为一个内容列表页面,还有一处也就是bottom页面。先用loadrunner压力测试。10并发。(先给测试机器把图片全部加上!)
loadrunner测试过程如下:
在Virtual User Generator中选择创建一个新脚本,选择Single Protocol Script,选择Web(HTTP/HTML),点击OK。点击"
"开始录脚本,在URL中输入http://192.168.1.22/*****/index.html,点击OK。(不带端口的原因是因为俺用apache+weblogic做了一次小的负载均衡,所有的serlet的请求由apache转发到weblogic,原文见手把手教你集成Apache+weblogic)因为仅仅对首页做一次压力测试,那么不用打开其他的页面,也就是只有2次event,一次打开index.html,一次是自动提交到servlet的转发。
执行一次TOUPPER操作,停止录制。在此处需要点击保存,就是那个软盘一样的按钮,保存到scripts的目录下面。(可以打开安装目录,在scripts目录下寻找你命名的文件夹,action.c就是该测试用脚本。)
打开控制器(Controller),创建一个新的Scenario,选择刚才录制的脚本,点击"OK",弹出Scenario调度界面,如下图所示。在"Quantity"中输入10,表示使用10个虚拟用户,点击"Edit Schedule"来编辑压力调度。选择"Runtime settings"来作运行时设置,在Pacing的设置中,"Number of Iterations"用于设置Vusers的Actions被执行的次数;"Start new iteration"用于设置调度器在什么时机迭代执行Vusers的Actions。"Think Time"用于设置Vusers的反应和思考时间,以尽量做到和正常人一样来施压。"Ignore think time"表示忽略思考时间,这是理想状态,一般不使用。"As recorded"表示按照录制时的实际操作时间。"Multiply recorded think time by"表示Vusers的思考时间是实际录制时间的若干倍。使用进程模式进行压力测试。ok,设置完毕,开始测试。
返回avg时间:9.564s。(好像是不是太大了一点,貌似偶也不大清楚这个avg的单位是啥,但是一个页面的10用户并发,就达到了9.564秒,是不是太夸张了点?)
第一次分析的结果是标签引入的原因,ok,我全部用jsp的include来试试。
返回avg时间:7.634s。提高了20%多。
得出一个结论:
页面的载入,如果过多的试用标签include,就不如使用jsp自带的include,让速度快一些。不推荐使用iframe。最好的结果是把所有的内容写入一个页面,虽然会让源文件有些大,但是载入的速度一定比多个页面的include要快很多。
Tags: loadrunner, include
系统工程师 | 评论:0
| 阅读:2895
Submitted by string on 2006, July 29, 11:30 PM
在普元培训EOS的时候,一直很好奇EOS的xml总线的运作机制。
在session中,俨然的保存的是一个xml的文件。然后在不同的区域放置不同的内容,不同的内容有不同的内容的生命周期。比如biz的部分放的是业务逻辑需要调用的数据,业务完成后销毁。而session的部分就放着整个应用的一些需要的session,因为是总线来装载数据,站在面向对象的角度来说,程序的编制就是对数据的一些定位和操作。而如果面向服务,那么每一个业务逻辑都可以作为一个webservices来调用,只要你给他喂符合格式的xml数据进去,他就能处理你的要求。那么,如果沿用这个xml的总线的思路,可以架构出相当好的程序。姑且不论健壮性,其程序的扩展性理论上是可以无限制的扩展的。那么在现如今的web应用中,如果能用apache+weblogic来做一定限度的负载均衡,那么session的传递应该会出现一些莫名其妙的问题,那么也就是说,可以用一个cache文件来做这个文件的处理。在application启动的时候,servlet启动该应用来对xml文件初始化,然后把文件内容放入内存,这样是不是可以架构出好的应用呢?:),会导致硬件的发展。哇哈哈哈。因为并发的时候会吃掉相当的内存地。
在IBM听了3天的portal的东西,虽然到现在就知道portal是一个门户地概念,但是根据同志们地讲解,貌似就是面向服务的开发了。:)培训的老师说,1g的内存启动应用35分钟,2g的内存启动应用12分钟。这算不算IBM的贡献呢,这丫推动了硬件的发展。:)。往后的程序员都是傻瓜级别的程序员了,所以要学习一些比较好的思想和业务。:)、
以前写过一些关于xml的文件的操作和处理,来小小的实现一下试试?
今天把blog.01webspace.com的首页给更新了,放置了一个可以拖动div的html文件。做了一些连接过来,希望能有一些效果的提高本blog的PR值。
btw:
- 天气很热
- 人慵懒的不想思考。
- 肥了一圈!
- 理智消失的第48天!
Tags: xml总线
系统工程师 | 评论:0
| 阅读:2853
Submitted by string on 2006, July 28, 4:44 PM
集成Apache和weblogic,主要的用途是Apache提供全部的静态资源的访问,而weblogic提供关于java的方面的解析。下面说说我的解决方案。
1.下载apache,首选是apache的2.05的版本,因为要和测试服务器上的Weblogic配套。而服务器上的weblogic的版本为8.1。
2.安装apache(此处省略)。
3.打开weblogic的安装目录,在.....\weblogic81\server\bin\目录下面找到mod_wl_20.so,copy到.......\Apache2\modules\里面。
4.打开.......\Apache2\conf\目录下面的httpd.conf文件。添加
############################################
#author:stringlew #
#time:06.7.28 #
#method:for the weblogic module #
############################################
LoadModule weblogic_module modules\mod_wl_20.so
####################end#####################
就字面上的意思理解,可以知道是load该模块文件。上面的是注释,写程序要养成良好的写注释的习惯么。:)
添加
############################################
#author:stringlew #
#time:06.7.28 #
#method:for the weblogic module filter #
############################################
<Location /servlets>
SetHandler weblogic-handler #设定头
WebLogicHost 192.168.1.22
WebLogicPort 7001
</Location>
<IfModule mod_weblogic.c>
WebLogicHost 192.168.1.22
WebLogicPort 7001
MatchExpression */servlet/* #设定需要转发的url的后缀
MatchExpression *.html #测试机器上的为index.html,用javascript自动提交表单。
</IfModule>
####################end#####################
ok,添加完毕。
5.restart weblogic and the apache.
6.打开服务器的url进行测试,在htdoc的目录下按照应用的层次建文件夹,copy在weblogic应用中的js,css,图片等静态资源到htdoc的相应的目录下面,打开ie进行测试,搞定! 打完收工。
总结:在过滤转发的时候有一个需要注意的地方,如果访问的网址在/servlet/前面有东西,一定要加上*号,否则错误都报的让人很郁闷的。
细节很重要!
Tags: apache, weblogic
系统工程师 | 评论:0
| 阅读:3570
Submitted by string on 2006, July 27, 3:14 PM
<%@ page language="java" %>
<%@ page import="java.awt.*" %>
<%@ page import="java.awt.image.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="javax.imageio.*" %>
<%@ page import="javax.imageio.stream.*" %>
<%@ page import="javax.imageio.plugins.jpeg.*" %>
<%
//set the page no cache
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
out.clear();
// set the width and height of the image
int width=48, height=22;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// get the graphics from the image
Graphics2D g = image.createGraphics();
Random random = new Random();
// set the back color white and draw rect
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
g.setColor(new Color(100,100,200));
g.drawRect(0, 0, width-1, height-1);
//set the font of the array generated randomly
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
// generate the random integer
String srand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
srand+=rand;
// set a random color for the random integer
g.setColor(new Color(20+random.nextInt(100),20+random.nextInt(110),20+random.nextInt(120)));
//draw the to the graphic
g.drawString(rand,10*i+4,16);
}
// put the value of validatecode to session
session.setAttribute("randomConformWord",srand);
// complete the image
g.dispose();
response.setContentType("image/jpeg");
// output the image
ServletOutputStream outstream = response.getOutputStream();
Iterator ite = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter imageWriter = (ImageWriter) ite.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(outstream);
imageWriter.setOutput(ios);
imageWriter.write(image);
ios.flush();
outstream.close();
%>
Tags: 图片验证
系统工程师 | 评论:1
| 阅读:2947