警告:不能读取 AppletViewer 的属性文件

警告:不能读取 AppletViewer 的属性文件: C:\Documents and Settings\用户名\.hotjava\properties 使用默认值。
解决方法:
1.打开命令提示窗口(cmd)
2.打入PolicyTool并按Enter
3.在PolicyTool对话框中,点击Add Policy Entry按钮(添加规则项目)
4.点击Add Permission 按钮(添加权限)
5.点击许可下拉菜单选择 All Permission
6.点击ok(确认)
7.点击Done(完成)
8.从file菜单中选择Save as(文件菜单选择另存为)
9.在 C:\Documents and Settings\Administrator(当前操作系统用户名)\中保存.java.policy文件(这个要根据情况来 如果没有.java.policy文件开始会弹出个提示说是在什么地方找不到.java.policy 你就把它存在提示的那个目录下面)

转自:http://hi.baidu.com/%B3%C2%E8%B4/blog/item/4917738da2f97e14b31bbacd.html

Linux Ubuntu设置Java环境变量

1. 下载 jdk的bin文件 例如:jdk-1_5_0_12-linux-i586.bin

2. 打开一个terminal, 到bin文件所在的文件夹, 执行 chmod +x jdk-1_5_0_12-linux-i586.bin

3. 执行 ./jdk-1_5_0_12-linux-i586.bin

4. 提示版权信息,选yes

5. 程序会成生一个jdk1.5.0_12的文件夹

6. 打开一个命令窗口, 执行 vi .bashrc

7. 在文件的最后加上两行,等号后面是jdk1.5.0_12的文件路径

export JAVA_HOME=/home/user/bin/jdk1.5.0_12

export PATH=$JAVA_HOME/bin:$PATH

8. 保存文件.

9.打开另外一个命令窗口 执行java -version

出现版本信息的话就是成功了

TOMCAT集群配置

准备软件:Tomcat 5.5.9   JDK1.5.0

一.配置过程

1、安装JDK1.5.0。采用默认安装就可以。

2、安装tomcat到C:\ tomcat 50,采用完全安装,该程序用于实现负载均衡功能。

3、将tomcat50的内容进行完全复制,生成C:\ tomcat 51、C:\ tomcat 52、C:\ tomcat 53,分别用做集群中的节点。

4、修改负载均衡规则,使其遵循轮循算法(RoundRobin)。

4.1将testLB.jsp复制到c:\tomcat50\webapps\balancer文件夹中

4.2将文件夹classes复制到c:\tomcat50\webapps\balancer\WEB-INF文件夹中

4.3修改c:\web\tomcat50\webapps\balancer\WEB-INF\web.xml文件如下:

BalancerFilter
/LoadBalancer

5、在集群中每个节点下,部署clusterapp应用。Clusterapp包含sessiondata.jsp,test.jsp,脚本。 test.jsp是用来验证节点状态的页面;sessiondata.jsp是用来响应用户所发送的请求,同时记录会话ID,会话的起始和最后时间,提供 用户增加、修改、删除会话的属性字段和属性值,可以通过此来判断会话的持续与否。

6、将log4j的log4j-1.2.9.jar复制到每个%tomcat%/common/ lib下,使其将会话日志统一存储到指定的文件中。

7、修改每个tomcat的server.xml配置文件,参数如下表所示。

配置              Instance 1    Instance 2       Instance 3    Instance 4
Instance Type    Load Balancer    Node 1       Node 2             Node 3
Code name             TC-LB             TC01       TC02             TC03
Home Directory    c:/tomcat50    c:/tomcat51      c:/tomcat52    c:/tomcat53
Server Port    8005          9005      10005            11005
Connector             8080         9080               10080            11080
JK2 AJP Connector    8009         9009               10009            11009
Cluster mcastAddr    228.0.0.4         228.0.0.4    228.0.0.4           228.0.0.4
Cluster mcastPort    45564        45564              45564           45564
tcpListenAddress    127.0.0.1        127.0.0.1    127.0.0.1           127.0.0.1
Cluster tcpListenPort 4000        4001             4002           4003

8、修改c:\web\tomcat50\webapps\balancer\WEB-INF\config\ruler.xml文件如下:

serverInstance=”1″
maxServerInstances=”3″
tcpListenAddress=”127.0.0.1″
tcpListenPort=”4001″
testWebPage=”http://localhost:9080/clusterapp/test.jsp”
redirectUrl=”http://localhost:9080/clusterapp/sessiondata.jsp” />

serverInstance=”2″
maxServerInstances=”3″
tcpListenAddress=”127.0.0.1″
tcpListenPort=”4002″
testWebPage=”http://localhost:10080/clusterapp/test.jsp”
redirectUrl=”http://localhost:10080/clusterapp/sessiondata.jsp” />
serverInstance=”3″
maxServerInstances=”3″
tcpListenAddress=”127.0.0.1″
tcpListenPort=”4003″
testWebPage=”http://localhost:11080/clusterapp/test.jsp”
redirectUrl=”http://localhost:11080/clusterapp/sessiondata.jsp” />

redirectUrl=”http://localhost:8080/balancer/testLB.jsp” />

9、启动tomcat的应用。手动双击每个tomcat/bin的startup.bat程序。

二.Web请求集群环境下流程

1、启动访问起始页(http://localhost:8080/balancer/testLB.jsp)
2、JSP重定向请求到负载均衡过滤文件(http://localhost:8080/balancer/LoadBalancer)

3、负载均衡的tomcat接受请求,根据制定的负载均衡算法,重定向到可用的集群节点(TC01、TC02、TC03)

4、对应集群中节点的sessiondata.jsp(位于clusterapp应用下)页面将启动。

5、sesiondata.jsp将在web上显示会话的详细信息(如会话ID,最后访问时间)
在测试的过程中采用RoundRobin算 法,通过对Instance 1发起多个http://localhost:8080/balancer/testLB.jsp测试请求,发现每个请求返回页面的端口号不完全一致,在 9080、10080、11080端口不规则的出现,即客户端的访问请求按照RoundRobin算法被重定向到不同的服务器上进行处理,说明该负载均衡规则在这个测试中得到正确的体现。在关闭集群中一个节点后再启用它,能够自动发现该节点,并为该节点分配请求。

JSP内置对象详解

3.1 对象与内置对象
对象是典型的具有方法,属性和集合的事物
对象的属性反映了对象的状态,可以读取或设置.对象的集合是由很多不同的与对象有关系的属性和值的配对组成的.
对于一般的对象,要想使用它,必须先声明一个类,再将它实例化,就会得到一个可以使用的对象.
下面我们通过一个例子来讲解一般对象的使用方法.
文件useobject.jsp _____
JSP程序中8个默认的内置对象
对于它们而言,不用声明就可以直接使用.这8个对象分别是request,response,pageContext,session,application,out,config和page.
page
实现处理本页当前请求的类的实例
java.1ang.Object
page
page
本 JSP 的 ServletConfig
javax.servlet.ServletConfig
config
page
向输出流写入内容的对象
Javax.servlet.jsp.JspWriter
out
application
从 servlet 配置对象获得的 servlet 上下文(如在 getServletConfig() ,getContext()的调用中)
Javax.servlet.ServletContext
application
session
为请求的客户创建的session对象
Javax.servlet.http.HttpSession
session
page
本 JSP 的页面上下文
Javax.servlet.jsp.PageContext
pageContext
page
对请求的应答
依赖协议的java.servlet.ServletResponse 子类(例如,javax.servlet.HttpServletResponse)
response
request
触发服务调用的请求
依赖协议的java.servlet.ServletRequest 子类(例如,javax.servlet.HttpServletRequest)
Request
范围
代表内容
类型
内置对象
3.2 request对象
request对象是ServletRequest的一个实例.当客户端请求一个JSP网页时,JSP引擎会将客户端的请求信息包装在这个request 对象中,请求信息的内容包括请求的标题头(Header),信息(如浏览器的版本信息,语言和编码方式等),请求的方式(如HTTP方 法:GET,POST,PUT等),请求的参数名称,参数值和客户端的主机名称等,然后将request对象当作jspService方法的 HttpServletRequest参数值,所以我们可以通过这个对象来取得有关客户端的请求信息.
3.2.1 request对象的方法
方法
返回接收请求的端口
getServerPort
返回接收请求的服务器的主机名
getServerName
返回发出请求的 URL 的机制
getScheme
返回发送请求的接口程序的完全限定的主机名
getRemoteHost
返回发送请求的接口程序的 IP 地址
getRemoteAddr
返回运用替换规则从虚拟地址中获得的实际地址
getRealPath
返回从请求体中读取的文本的缓存数据
getReader
返回请求的协议和版本号
getProtocol
返回作为字符串列举的指定参数的值
getParameterValues
返回本次请求的参数名字
getParameterName
返回包含指定参数的单独值的字符串
getParameter
返回在请求体中读取二进制数据的输入流
getlnputStream
返回请求实体数据的 InternetMedia 类型
getContenType
返回请求实体数据的大小
getContentLength
返回为请求的输入进行编码的字符集合
getCharacterEncoding
返回请求的给出名字的属性的值
getAttribute
描述
方法
request对象使用示例
1. request对象获取服务器及客户端的信息
文件 request1.jsp
2. 用request对象来获取和处理表单传过来的参数值
(1) 建立HTML表单
(2) 使用GET和POST方法
(3) 用request对象处理
用户输入的数据用来存放在request对象里,用javax.servlet.HttpServletRequest来执行,你可以在JSP代码中直接访问request对象.并且处理表单传送过来的数据.
文件 request3.htm request3.jsp
3. 用request对象来获取和处理表单传过来的中文参数值的处理
文件 request2.htm request2.jsp
3.3 response对象
response对象的类型是javax.servlet.ServletResponse类的实例,JSP引擎会根据客户端的请求信息建立一个默认的 response对象.它用于将浏览器参考信息,如回应的Header,回应本体(HTML的内容)以及服务器端的状态码等信息提供给客户端.
3.3.1 response对象的方法
重定向客户端的地址
sendRedirect
设定指定名字的HTTP文件头的值
setHeader
向客户端发送错误信息
sendError
判断指定的HTTP文件头是否存在
containsHeader
添加HTTP文件头(Header),将会传送到客户端
addHeader
添加一个Cookie对象,用来保存客户端的用户信息
addCookie
为应答设置内容类型
setContentType
为应答设置内容长度
setContentLength
返回用于格式化文本应答的打印程序
getWriter
返回用于书写二进制应答数据的输出流
getCharacterEncoding
返回用于MIME编码的字符集合
getCharacterEncoding
3.3.2 response对象使用示例
下面的示例程序实现了定时刷新页面的功能
文件refresh.jsp
这个程序指定页面每隔5秒钟自动刷新一遍,服务器重新执行这个程序,产生新的当前时间,然后输出到客户端.所以,页面上显示的时间每隔5秒钟就增加5秒钟,实现了类似时钟的功能.
下面的示例程序实现了页面重定向功能
文件request2.htm
输入用户名为admin,进入管理界面;否则,则进入普通用户界面.
3.4 session对象
session对象是JSP中一个很重要的内部对象,我们使用它来保存某个特定客户端(访问者)一次访问的一些特定信息.
在JSP网络编程中,有多种方法可以保存客户信息,但是最常用,最实用的还是session对象.
3.4.1 session对象介绍
session对象,实际上就是服务器与客户端之间的”会话”
(1) session可以用来储存访问者的一些特定信息.主机服务器就是根据session来跟踪这些信息的.
(2) session可以创建访问者信息容器.
(3) session可以用来跟踪访问者的访问路径,从中挖掘有用的信息,如访问者的兴趣爱好,访问目的.
用户在Web应用程序中访问同一页面时,session变量始终存在,当用户在应用程序的页之间跳转时,存储在session对象中的变量也不会清除,当然也可以使用session方法显式地结束一个会话和设置空闲会话的超时期限.
session在JSP程序中是一个内置的对象
每一个客户端都有一个session对象用来存放于这个客户端相关的数据.
在JSP的程序中,通常不用任何代码,就可以直接使用session对象.不过为了确认,可以加入以下代码,以表示需要启动session功能.

如果设置上述的session值为false,则说明禁用session功能.
session对象的类为HttpSession,它提供了很多使用的方法.
3.4.2 session对象的方法
session对象的类是HttpSession.HttpSession由服务器的程序实现,提供HTTP服务器和HTTP客户端之间的会话.会话,就是在给定时间段内持续进行多路连接和请求.会话被用来在多页面请求中保持状态和用户认证.
session对象的常用方法
移去和会话应用层数据中指定名字相连的对象
removeValue
将指定的对象和使用指定名字的会话应用层数据相连
putValue
检查是否客户端参加了会话
isNew
使会话无效,并将其从上下文中移出
invalidate
返回和会话相连的应用层数据对象的名字
getValueNames
返回和应用层数据中指定名字相联系的对象
getValue
返回会话相连的上下文
getSessionContext
返回客户端上一次发送携带会话账号的时间
getLastAccessTime
返回会话标识符
getId
返回会话创建的时间
getCreationTime
3.4.3 session对象使用示例
为说明session对象的具体应用,以用三个页面模拟一个多页面的Web应用为例
(1) 第一个页面(q1.html)仅包含一个要求输入用户名字的HTML表单 .
文件q1.htm
(2)第二个页面是一个JSP页面(q2.jsp),它通过request对象提取q1.html表单中的thename值,将它存储为name变量,然后将这个name值保存到session对象中.q2.jsp的另外一个任务是询问第二个问题.
(3) 第三个页面也是一个JSP页面(q3.jsp),主要任务是显示问答结果,另外一个任务是提取在第二个页面中的用户输入并显示它.

通常会话管理是通过服务器将SessionID作为一个cookie存储在用户的Web浏览器中来唯一标识每个用户会话
如果浏览器不支持cookie,或者将浏览器设置为不接受cookie,我们可通过URL重写来实现会话管理.
文件hello1.jsp
使用session对象在3个不同的JSP文件中保存信息
文件example0.htm(在accountBalance中必须输入数字)
3.5 application对象
application对象保存了一个应用系统中一些公用的数据.与session对象相比,application对象是所有客户共享的,而 session对象则是每个客户专用的.application对象可以是javax.servlet.ServletContext类型 的.ServletContext接口让servlet访问关于其环境的信息.application对象的范围是application.
3.5.1 application对象的方法
方法
设置某个application对象的某个属性值
setAttribute
获得当前版本的Servlet编译器的信息
getServerInfo
返回application某个属性的值
getInitParameter
以Enumeration数据形式返回所有application对象的属性名称
getAttributeNames
以Object对象的形式返回对应名称的application对象的属性值
getAttribute
含义
对象
3.5.2 application对象的使用示例
一个使用了application对象的计数器
文件 appcount.jsp
应用application内建对象,将上面的session例子改为application的例子.
文件 application1.htm
3.6 out对象
out对象用于输出数据,它可以是javax.servlet.jsp.JspWriter的一个实例.out对象的范围是page.
从java.io.Writer拓展而来的公共抽象类JspWriter效仿了java.io.BufferedWriter和 java.Io.PrintWriter中的某些功能.但是,不同之处在于它会在打印方法中抛出(throw) java.Io.IOException异常,而PrintWriter不这样做.
JSP中的out对象就是这种类型的.如果page指令选择了autoflush=”true”,那么当出现由于当前的操作不清空缓存而造成缓冲区溢出的 情况时,这个类的所有I/O操作会自动清空缓冲区的内容.如果autoflush=”false”,那么当操作造成了缓冲区溢出时,这个类的所有的I/O 操作将抛出一个IOException.
3.6.1 out对象的变量
autoFlush
类型为protected boolean autoflush
如果变量值为真,则当当前的操作造成缓冲区溢出时,缓冲区会被清空.
如果变量值为假,则如果当前操作造成缓冲区溢出就会抛出一个IOException.
bufferSize
类型为protectedintbufferSize
表示缓冲区目前的大小.初始值根据不同的设备而不同,但是不少于8KB.
DEFAULT_BUFFER
类型为publicstaticfinalintDEFAULT_BUFFER
表示Writer正使用的缺省的缓冲区大小设置.
No_BUFFER
类型为Public static final int NO_BUFFER
表示Writer是否处于缓存输出状态.
3.6.2 Out对象的方法
方法
打印一个对象
Object
print
打印一个长整数
long
print
打印一个整数
int
print
打印一个浮点数
float
print
打印一个双精度浮点数
double
print
打印一个字符数组
char[]
print
打印一个字符
char
print
打印一个布尔值
boolean
print
写一行分隔符
_
newLine
获得autoFlush的当前值
_
isAutoFlush
获得缓冲区中未使用的字节数
_
getRemaining
获得缓冲区的大小
_
getBufferSize
清除缓冲区的流
_
clearBuffer
Clear 清除缓冲区内容
_
Clear
输出流
_
flush
关闭流,并输出
_
Close
描述
参数
方法
打印一个字符串,然后结束行
String
println
打印一个对象,然后结束行
Object
println
打印一个长整数,然后结束行
long
println
打印一个整数,然后结束行
int
println
打印一个浮点数,然后结束行
float
println
打印一个双精度浮点数,然后结束行
double
println
打印一个字符数组,然后结束行
char[]
println
打印一个字符,然后结束行
char
prinfln
打印一个布尔值,然后结束行
boolean
println
通过写一个行分隔符来结束当前行
_
println
打印一个字符串
String
print
3.6.3 Out对象的使用示例
用out对象输出多种不同类型的数据,包括输出中文
文件out.jsp
3.7 其他对象
pageContext对象
pageContext对象是javax.servlet.jsp.PageContext类的一个实例.pageContext对象提供了存取所有关于 JSP程序执行时所需要用到的属性和方法,如session,application,config,out等对象属性.对于pageContext对 象,它的范围是page.
page对象
page对象是java.lang.Object类型的,它是处理当前请求的JSP页的实现类的实例.page对象在页的正文中可以被看作”this”的同义词.page对象的范围是page.
config对象
config对象是javax.servlet.ServletConfig类型的.它提供存取servlet class初始参数及有关Server环境信息的ServletContext对象.config对象的范围是page.

JFreeChart使用时常见错误与解决方法

1、在编译程序的过程中,报出如下的错误:
BarChartDemo.java:51: cannot resolve symbol
symbol    : class CategoryDataset
location: class demo.BarChartDemo
private static CategoryDataset getDataSet() {
^
BarChartDemo.java:52: cannot resolve symbol
symbol    : class DefaultCategoryDataset
location: class demo.BarChartDemo
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
^
这是由于未找到相应的类,在程序前面加上以下两句即可解决这个问题:
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

2、The ‘quality’ must be in the range 0.0f to 1.0f

这是因为ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,graphWidth,graphHigh,null);

限制quality必须小于等于1,所以修改一下

把100改成 1.0f就可以显示了

houghtWorks发布功能测试自动化平台——Twist

ThoughtWorks Studios开发了一个针对Java应用的功能测试集成开发平台—— Twist。 这个工具将用户故事建档、抓取可执行的请求、开发、维护、做功能测试以及发送相关测试报告集中到同一个平台上。目前,您可以下载到Twist的免费版。

Twist的一个主要特性是支持领域特定语言(DSLs)。开发团队可以创建一种相对简单、且与英文类似的语言来描述。这样一来,业务部门的人也可以很容易就读懂,甚至也使用这种语言编写测试。就职于ThoughtWorks的Martin Fowler最近关于DSL方面,就说了很多。下面是在Twist中,一组DSL代码是如何映射到后台的自动化测试的截图。

Twist Screen Capture

Twist是基于Eclipse平台开发的,使用SeleniumFrankenstein来实现自动化,但并不限于此。只要您插入相关的插件,且用JAVA写相关的测试代码,您就可以使用Twist。

Twist使用标签(tag)来组织测试的运行。通过过滤那些和测试相关联的标签,可以选择性地运行测试子集。和测试关联的标签可以是:

  • 运行的测试类型所应该涵盖的测试——回归测试、冒烟测试、性能测试
  • 特性或者功能域
  • 发布
  • 平台

该产品还拥有报告功能。一旦测试失败,Twist提供的报告包含了所有失败的scenario,测试失败的时间、截屏和完整的关于失败原因的追踪栈。

下面这个表列出的是Twist的正式售价:

Single User Pack $1,000
5 User Pack $2,500
10 User Pack $4,500
20 User Pack $8,000

Twist是继MingleCruise之后,ThoughtWorks Studios推出的又一个系列产品。