StevenBot-Saltsam

眼睛能装下世界,为何却装不下眼泪? 一只风筝一辈子只为一根线冒险。 那不是一场游戏,为何总有一根线牵着心怀,隐隐作疼? 那不是一段邂逅,为何飘在桥上的影子,总缠进梦乡? 那不是一个梦境,为何你的温柔私语,总是不经意的响起?

导航

<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

datas link

OSChinal Sources codes Library

搜索

最新评论

阅读排行榜

评论排行榜

2011年10月7日 #

Spring 学习

     摘要: 1.spring属性的注入配置1.      属性的注入配置Bean文件的配置,即为bean的各属性赋值 <bean id="sone" class="edu.yzu.entity.Student" init-method="initialMethod" parent="sbean" ...  阅读全文

posted @ 2011-11-16 01:16 Steven_bot 阅读(528) | 评论 (0)编辑 收藏

Platform来获取一些系统的路径和参数

在Eclipse的插件开发中,可以通过Platform来获取一些系统的路径和参数。 
假定Eclipse的安装路径为:D:/Java/eclipse 
创建的Workspace路径为:D:/Java/eclipse/workspace 

Platform.getNL():zh_CN 
Platform.getWS():win32 
Platform.getOS():win32 
Platform.getOSArch():x86 
Platform.getStateStamp():155 
Platform.getUserLocation().getURL():file:/D:/Profiles/windowsloginname/user/ 
Platform.getInstallLocation().getURL():file:/d:/Java/eclipse/ 
Platform.getConfigurationLocation().getURL():file:/d:/Java/eclipse/configuration/ 
Platform.getInstanceLocation().getURL():file:/D:/Java/eclipse/workspace/ 
Platform.getLocation():D:/Java/eclipse/workspace 
Platform.getLocation().toOSString():D:/Java/eclipse/workspace 
Platform.getLogFileLocation():D:/Java/eclipse/workspace/.metadata/.log 
Platform.getLogFileLocation().toOSString():D:/Java/eclipse/workspace/.metadata/.log 
Platform.getPluginStateLocation(Platform.getPlugin("NamedPlugin")):D:/Java/eclipse/workspace/.metadata/.plugins/NamedPlugin 
Platform.getPlugin("NamedPlugin").getStateLocation():D:/Java/eclipse/workspace/.metadata/.plugins/NamedPlugin 
Platform.getPlugin("NamedPlugin").getDescriptor():NamedPlugin_1.0.0 
Platform.getPlugin("NamedPlugin").getDescriptor().getLabel():Plug-in Name 
Platform.getPlugin("NamedPlugin").getDescriptor().getProviderName():ProviderName 
Platform.getPlugin("NamedPlugin").getDescriptor().getUniqueIdentifier():NamedPlugin 
Platform.getPlugin("NamedPlugin").getDescriptor().getInstallURL():platform:/plugin/NamedPlugin_1.0.0/ 
Platform.getPlugin("NamedPlugin").getDescriptor().getInstallURL().getPath():/plugin/NamedPlugin_1.0.0/

posted @ 2011-10-25 10:49 Steven_bot 阅读(1503) | 评论 (0)编辑 收藏

Tomcat的参数配置及一般问题的解决

     摘要: 如何解决端口冲突导致tomcat无法启动的问题Tomcat在启动时主要使用下面的3个端口<Server port="8005" shutdown="SHUTDOWN" debug="0"><Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8...  阅读全文

posted @ 2011-10-08 09:34 Steven_bot 阅读(1856) | 评论 (0)编辑 收藏

tomcat启动jvm内存设置(转载)

Linux:
在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh
添加:JAVA_OPTS=''-Xms512m -Xmx1024m''
要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m 
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms300m -Xmx350m  
重起tomcat服务,设置生效

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/2008215/99782.html

posted @ 2011-10-08 09:31 Steven_bot 阅读(740) | 评论 (0)编辑 收藏

合理配置tomcat内存-java.lang.OutOfMemoryError: PermGen space及其解决方法

转载自: http://it.chinawin.net/softwaredev/article-c4e1.html
不论是在开发还是在已经发布的项目中,我们经常会碰到的一个问题:
    java.lang.OutOfMemoryError: PermGen spacePermGen space的全称是Permanent Generation space,是指内存的永久保存区域,OutOfMemoryError: PermGen space从表面上看就是内存溢出,解决方法是加大内存。说说为什么会内存溢出:PermGen space用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APPLICATION会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。建议:将相同的第三方jar文件移置到tomcat/lib目录下,这样可以达到减少 jar 文档重复占用内存的目的。
改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 其中-Xms<size> 为JVM初始化堆的大小
        -Xmx<size> 为JVM堆的最大值
        -XX:MaxNewSize 为调大新对象区,以减少垃圾回收器回收次数但是有的时候可能这样的设置还会不行(比如,当Server应用程序加载较多类时,即jvm加载类时,永久域中 的对象急剧增加,从而使jvm不断调整永久域大小,为了避免调整),你可以使用更多的参数配置,如: java -Xms512m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m
其中,使用   -XX:MaxPermSize标志来增加永久域的大小,-XX:PermSize标志设置初始值
如 果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化,虚拟机就必须重复地增加内存来满足使用。由于这种原因,我们一般把-Xms和 -Xmx设为一样大,而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应用程序会使用持久对象,内存使用有可能迅速地增长。当应用程序需要的 内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。
在tomcat中redeploy时出现outofmemory的错误.
可以有以下几个方面的原因:
1,使用了proxool,因为proxool内部包含了一个老版本的cglib.
2, log4j,最好不用,只用common-logging
3, 老版本的cglib,快点更新到最新版。
4,更新到最新的hibernate3.2

--------------------------------------------------------------------------------------------------------------------------------

        主要包括避免死循环,应该及时释放种资源:内存, 数据库的各种连接,防止一次载入太多的数据。导致java.lang.OutOfMemoryError的根本原因是程序不健壮。因此,从根本上解决Java内存溢出的唯一方法就是修改程序,及时地释放没用的对象,释放内存空间。 遇到该错误的时候要仔细检查程序,嘿嘿,遇多一次这种问题之后,以后写程序就会小心多了。

            3)对resin容器,同样可以在启动时对jvm设置内存限度。在bin文件夹下创建一个startup.bat文件,内容如下:
                 @echo off
                  call "httpd.exe"  "-Xms128M" "-Xmx256M"
                  :end 
                  其中"-Xms128M"为最小内存,"-Xmx256M"为最大内存。

   2.    优化程序,释放垃圾。

           一次是用hibernate查询数据时,一次查询过多的数据,例如30000条,此时程序出错,该死的java.lang.OutMemoryError,后来调整了该部分的代码,每次只取出指定量的数据,成功的解决该问题。

            还有一次是当测试人员loadRunner做压力测试时,并发200个用户时,运行不到几分钟整个weblogic都瘫掉,真够狠的,又是java.lang.OutOfMemoryError, PM叫我检查同事写的代码,折腾了我好久,结果发现原来是由于session的资源一直没有被释放产生的,真把俺给气死!!!在该工程中在web.xml文件中设置了一个session的侦听期,当检测到session超时时,进入指定的类进行相应处理,而该同事在进行了自定义的处理后,没有通过session的invalidate()方法将session的资源释放,导致当大批量并发时,造成内存溢出。

            解决java.lang.OutOfMemoryError的方法有如下几种:

  1. 增加jvm的内存大小。方法有:

            1)在执行某个class文件时候,可以使用java -Xmx256M aa.class来设置运行aa.class时jvm所允许占用的最大内存为256M。
            2)对tomcat容器,可以在启动时对jvm设置内存限度。对tomcat,可以在catalina.bat中添加:
 "set CATALINA_OPTS=-Xms128M -Xmx256M
  set JAVA_OPTS=-Xms128M -Xmx256M",或者把%CATALINA_OPTS%和%JAVA_OPTS%代替为-Xms128M -Xmx256M



1、PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

2、在tomcat中redeploy时出现outofmemory的错误.

可以有以下几个方面的原因:

1,使用了proxool,因为proxool内部包含了一个老版本的cglib.

2, log4j,最好不用,只用common-logging

3, 老版本的cglib,快点更新到最新版。

4,更新到最新的hibernate3.2

3、

这里以tomcat环境为例,其它WEB服务器如jboss,weblogic等是同一个道理。
一、java.lang.OutOfMemoryError: PermGen space

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小

修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。

二、java.lang.OutOfMemoryError: Java heap space
Heap size 设置
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,
其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。 
解决方法:手动设置Heap size
修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"

三、实例,以下给出1G内存环境下java jvm 的参数设置参考:

JAVA_OPTS="-server -Xms800m -Xmx800m  -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "


三、相关资料

/show/3/7/20061112220131.htm

/show/3/7/20061112220054.htm

/show/3/7/20061112220201.htm

题外话:经常看到网友抱怨tomcat的性能不如...,不稳定等,其实根据笔者几年的经验,从"互联星空“到现在的房产门户网,我们
均使用tomcat作为WEB服务器,每天访问量百万多,tomcat仍然运行良好。建议大家有问题多从自己程序入手,多看看java的DOC文档
并详细了解JVM的知识。这样开发的程序才会健壮。

延伸阅读:

JVM 性能调整的一些基本概念

apache+Tomcat负载平衡设置详解[转]

java - the Java application launcher

JVM调优[转]
Java如何通过VC调用VB编写的COM - 

JNI完全手册 - 

JBuilder9制作EXE文件 - 

如何在Java中调用dll - 

JNI调用固有方法 - 

 

java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小、程序不严密,产生了过多的垃圾。

           在一年多的工作过程中,遇到该问题的印象最深有两次。

posted @ 2011-10-08 09:30 Steven_bot 阅读(9136) | 评论 (0)编辑 收藏

如何修改和查看tomcat内存大小

为了解决tomcat在大进行大并发请求时,出现内存溢出的问题,请修改tomcat的内存大小,其中分为以下两种方式:


一、使用 catalina.bat 等命令行方式运行的 tomcat

查看系统最大支持内存命令:java -Xmx1024m -version

1、修改 tomcat\bin\Catalina.bat 文件
windows环境下:

在166行左右
rem Execute Java with the applicable properties ”以下每行
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

在 %DEBUG_OPTS% 后面添加-Xms256m -Xmx512m

linux环境下:

打开在Tomcat的安装目录的bin文件的catalina.sh文件,进入编辑状态.
在注释后面加上如下脚本:
JAVA_OPTS='-Xms512m -Xmx1024m'
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"

其中 JAVA_OPTS='-Xms512m -Xmx1024m' 是设置Tomcat使用的内存的大小.

-XX:PermSize=64M -XX:MaxPermSize=256m 指定类空间(用于加载类)的内存大小 

保存后,重新以命令行的方式运行 tomcat ,即可,然后通过最后面介绍的如何观察tomcat现有内存情况的方法进行查看是否已经变更成功。

 

 

 

二、使用 系统中的 “服务”,或者开始菜单的可执行程序运行的tomcat

1、关闭 现在正在运行的tomcat


2.1 [注意]

[高版本tomcat配置方法]

如果是tomcat 5.5 或者是 5.0.28 之后的版本,在 Java 选项卡中,下方,会有
Inital memory Pool:   
Maximum memory Pool:
Thread stack size:
三个输入框,在这里即可不用做上面的操作,直接配置内存大小,只需要设置
Inital memory Pool 为 256
Maximum memory Pool 为 512

点击确定后,重启tomcat 生效

 

如果您是低版本的tomcat,发现没有上面那几个录入框,请看下面的操作步骤

 

[低版本tomcat配置方法]

在开始菜单中,找到“Apache Tomcat 5.0”,并选择“Configure Tomcat”,在弹出的对话框窗口中,切换到 Java VM 选项卡,并在 Java Options 输入框的最前面输入

-Xms256m -Xmx512m

即输入框中的内容会像下面的代码(与自己的环境有所区别)

-Xms256m -Xmx512m
-Dcatalina.home="C:\tomcat5"
-Djava.endorsed.dirs="C:\tomcat5\common\endorsed"
-Xrs

设置完后,点击“确定”,并重启tomcat即可。

 

三、查看现有tomcat的内存大小情况

1、启动tomcat
2、访问 http://localhost:8080/manager/status ,并输入您在安装tomcat时输入的用户与口令,如 admin ,密码 admin(密码是您在tomcat安装时输入的)

注:添加用户,修改conf/tomcat-users.xml

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="admin" password="admin" roles="admin,manager"/>
</tomcat-users>

3、进入了Server Status页面,可以在JVM表格中看到 
Free memory: 241.80 MB Total memory: 254.06 MB Max memory: 508.06 MB

上面的文字即代表了,当前空闲内存、当前总内存、最大可使用内存三个数据。
确定了最大内存足够大时,tomcat即可正常运转

posted @ 2011-10-08 09:23 Steven_bot 阅读(60393) | 评论 (1)编辑 收藏

在tomcat上部署pentaho 1.5.3

1 . 首先需要下载pentaho-j2ee-deployment- , pentaho-data- 和 pentaho-solution- 三个包,分别解压到三个不同的地方
2 . 从命令行进入pentaho-j2ee-deployment 目录,运行ant -p 会列出所有的ant 任务,执行war-pentaho-tomcat-hypersonic任务,成功之后会生成4个war包,pentaho-portal-layout.war , pentaho-style.war 和 sw-style.war ,(sw-style.war 是steel-wheel-style ,是可选项,可能是pentaho的一个例子或者是pentaho的一种style风格),还有多出一个tomcat目录下的hsqldb目录下有一个pentaho.war ,如果你执行的是war-pentaho-mysql就是在tomcat目录下有个mysql5目录,里面一样是pentaho.war.我选用的是hsqldb .
3 . 在你的tomcat的安装目录下找到conf / server.xml 文件,在其中的host 元素下加上如下这一段,这一段是从pentaho的文档里面抄来的,manual-deployment-pentaho- ,其中它列出来的有些多余,这个文档应该使用confluence 用pdf 方式导出的,抄的时候注意检查一下xml 元素排版上的问题.它列出的resource 元素太多了,你查看pentaho-data- 包里面,应该只有四个数据库hibernate,sampledata,shark,quartz ,把不用的resource元素都删掉,(应该是最上面的四个).如果你的tomcat启动不了了,检查一下你添加的部分是不是有错。

xml 代码
  1. <Context path="/pentaho" docbase="webapps/pentaho/">
  2. <Resource name="jdbc/SampleData" auth="Container"
  3. type="javax.sql.DataSource" maxActive="20" maxIdle="5" maxWait="10000"
  4. username="pentaho_user" password="password"
  5. factory="org.apache.commons.dbcp.BasicDataSourceFactory"
  6. driverClassName="org.hsqldb.jdbcDriver"
  7. url="jdbc:hsqldb:hsql://localhost/sampledata" />
  8. <Resource name="jdbc/Hibernate" auth="Container"
  9. type="javax.sql.DataSource"
  10. factory="org.apache.commons.dbcp.BasicDataSourceFactory"
  11. maxActive="20" maxIdle="5" maxWait="10000" username="hibuser"
  12. password="password" driverClassName="org.hsqldb.jdbcDriver"
  13. url="jdbc:hsqldb:hsql://localhost/hibernate" />
  14. <Resource name="jdbc/Quartz" auth="Container"
  15. type="javax.sql.DataSource"
  16. factory="org.apache.commons.dbcp.BasicDataSourceFactory"
  17. maxActive="20" maxIdle="5" maxWait="10000" username="pentaho_user"
  18. password="password" driverClassName="org.hsqldb.jdbcDriver"
  19. url="jdbc:hsqldb:hsql://localhost/quartz" />
  20. <Resource name="jdbc/Shark" auth="Container"
  21. type="javax.sql.DataSource"
  22. factory="org.apache.commons.dbcp.BasicDataSourceFactory"
  23. maxActive="20" maxIdle="5" maxWait="10000" username="sa" password=""
  24. driverClassName="org.hsqldb.jdbcDriver"
  25. url="jdbc:hsqldb:hsql://localhost/shark" />
  26. Context>


4 . 把pentaho.war copy到tomcat 的webapps目录下,它会自动解压的,然后关闭tomcat , 找到pentaho/WEB-INF/web.xml 文件,找到solution-path元素,指向你解压后的pentaho-solution- 目录,注意java里面是用正斜杠 / ,如果你从windows的地址栏copy的话注意把反斜杠改一下.
5 . 修改pentaho/WEB-INF/classes 目录下的log4j.xml文件,把 里面的value改成INFO,或者更高,这一步是可选项,主要是启动的时候出现很多不必要的debug 信息.如果你启动的时候出错了,再改回来。(一般都是solution-path没有找对,我用7-zip解压的时候老是解压到一个新的目录,所以后来指定 solution-path 的时候,目录地址高了一级.) 
6 . 启动pentaho-data- 目录里面的hsqldb数据库.
7 . 这个时候启动tomcat ,应该是不报任何错误的.你把浏览器指向http://localhost:8080/pentaho ,会看到pentaho的界面的,只不过是没有什么颜色的那种.
8 . 把编译後的三个war文件copy到tomcat 的webapps目录下,等它们自动解压之后,再进去看,发现有了样式了。安装就完成了.

贴几张图:
pentaho成功启动后应该有 Pentaho BI 平台服务器就绪 这句话.

安装了style 和 portal 包之后的登录界面

在pentaho-data- 目录的lib 目录下执行java -cp hsqldb.jar org.hsqldb.util.DatabaseManager 出现的hsqldb 的manager 登录画面
用户名和密码都在相应目录的数据库文件里面,hsqldb的数据库文件是可以用
文本编辑器打开的,搜索password就可以找到用户名和密码了
sampledata 里面的数据
我在安装的时候也碰到了诸多的问题,
1 . 一开始编译的时候使用的ant war-pentaho-tomcat 任务,它直接报错,说找不到rdbms目录,后来猜想这个任务应该是留给其他数据库编译的时候扩展的.直接就换了war-pentaho-tomcat-hypersonic 任务重新编译了一次
2 . 后来从文档里copy出数据源的那句话出错了,导致tomcat启动不了,因为从pdf文件copy的那段话排版有问题,后来把它粘贴到eclipse(装了WTP插件的)里面,一格式化就看出来了,context 元素和后面的属性path中间的空格没了,还有多出来了几个resource元素.
3 . 指定solution-path的时候目录高了一级.
4 . 启动tomcat的时候出现了很多不必要的debug信息,修改log4j文件就可以了,它在tomcat/bin 目录下还会生成几个log文件,像是server.log 和ReportEngine_.log 文件。

关键还是要掌握学习的方法,学会思考问题 . 安装的时候也遇到了很多问题,但是只要你细细的分析问题的原因,总是可以找出解决的办法的.

posted @ 2011-10-07 22:06 Steven_bot 阅读(624) | 评论 (0)编辑 收藏

Eclipse debug模式

1.Step Into (also F5) 跳入 
2.Step Over (also F6) 跳过 
3.Step Return (also F7) 执行完当前method,然后return跳出
4.step Filter 逐步过滤 一直执行直到遇到未经过滤的位置或断点(设置Filter:window-preferences-java-Debug-step Filtering) 
5.resume 重新开始执行debug,一直运行直到遇到breakpoint 
6.hit count 设置执行次数 适合程序中的for循环(设置 breakpoint view-右键hit count) 
7.inspect 检查 运算。执行一个表达式显示执行值 
8.watch 实时地监视变量的变化 
9.我们常说的断点(breakpoints)是指line breakpoints,除了line breakpoints,还有其他的断点类型:field(watchpoint)breakpoint,method breakpoint,exception breakpoint. 
10.field breakpoint 也叫watchpoint(监视点) 当成员变量被读取或修改时暂挂 
11.添加method breakpoint 进入/离开此方法时暂挂(Run-method breakpoint) 
12.添加Exception breakpoint 捕抓到Execption时暂挂
|-断点属性: 
|-1.hit count 执行多少次数后暂挂 用于循环 
|-2.enable condition 遇到符合你输入条件(为ture\改变时)就暂挂 
|-3.suspend thread 多线程时暂挂此线程 
|-4.suspend VM 暂挂虚拟机 
13.variables 视图里的变量可以改变变量值,在variables 视图选择变量点击右键--change value.一次来进行快速调试。 
14.debug 过程中修改了某些code后--〉save&build-->resume-->重新暂挂于断点

posted @ 2011-10-07 21:36 Steven_bot 阅读(744) | 评论 (0)编辑 收藏

使用 Apache Wink、Eclipse 和 Maven 开发 RESTful Web 服务

     摘要: Apache Wink 是一个促进创建和使用 REST Web 服务的 Apache 孵化器项目。通过 REST Web 服务,客户机和服务之间的交互局限于一组预定义的操作,客户机和服务器之间的交互的复杂性限制为客户机和服务之间交换的资源表示。这种方法支持构建可互操作、可伸缩、可靠的、基于 REST 的分布式超媒体系统。常用缩略词API: 应用程序编程接口HTTP: 超文本传输...  阅读全文

posted @ 2011-10-07 18:18 Steven_bot 阅读(1547) | 评论 (0)编辑 收藏

Java 调用cmd.exe命令

java的Runtime.getRuntime().exec(commandText)可以调用执行cmd指令。 

cmd /c dir 是执行完dir命令后关闭命令窗口。 

cmd /k dir 是执行完dir命令后不关闭命令窗口。 

cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。 

cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。 

可以用cmd /?查看帮助信息。 

★CMD命令★ 
calc ---------------- 启动计算器 
charmap ---------- 启动字符映射表 
cmd.exe ----------- CMD命令提示符(我这不能用,不知乍地!) 
conf ---------------- 启动netmeeting 
explorer ----------- 打开资源管理器 
mspaint ----------- 画图板 
notepad ----------- 打开记事本 
nslookup ---------- IP地址侦测器 
odbcad32 --------- ODBC数据源管理器 
regedit ------------- 注册表 
services.msc ----- 本地服务设置 
wordpad ---------- 启动写字板
javac 其实执行了 只是没有输出执行结果 因为你没有输出执行结果的部分
如果你执行Runtime.getRuntime.exec("cmd");
也看不到结果 
因为它不是在java程序中执行的而是在操作系统上执行的
你可以这样Runtime.getRuntime.exec("cmd /c start javac ");
就可以看到一个命令行窗口

posted @ 2011-10-07 18:15 Steven_bot 阅读(858) | 评论 (0)编辑 收藏

JSTL 入门: 表达式语言

     摘要: JavaServer Pages(JSP)是用于 J2EE 平台的标准表示层技术。JSP 技术提供了用于执行计算(这些计算用来动态地生成页面内容)的脚本编制元素和操作。脚本编制元素允许在 JSP 页面中包括程序源代码,在为响应用户请求而呈现页面时可以执行这些源代码。操作将计算操作封装到很象 HTML 或 XML 标记的标记中,JSP 页面的模板文本通常包含这些标记。JSP 规范只将几种操作定义成了...  阅读全文

posted @ 2011-10-07 18:11 Steven_bot 阅读(266) | 评论 (0)编辑 收藏

servlet中的一些疑惑

因为Redirect的流程是这样的,  request 1  sent to server,  server return back to client,  request 2 then sent to server. But Forward 仅在server side处理, 对client side 是透明的. 由于Redirect 有两次传输, 所以效率低. 范围: 由于对request.setAttribute() 来说, 它携带的对象生存范围只在request内, 所以Redirect方式会导致request携带的对象丢失. 总结:  一般还是用Forward比较合适. 
ActionMapping

ActionMapping将对Struts应用中有效的业务逻辑进行分类,当一个请求到达时,ActionSevlet在ActionMapping目录中查找对应的信息。ActionMapping是Struts应用的一个核心设计,当需要了解一个Struts应用,或编写一个新的Struts应用的时候,都应该从ActionMapping入手。ActionMapping有较多的属性信息,具体参考相关文档。

ActionForward

ActionForward是Struts的核心类之一,其基类仅有4个属性:name / path / redirect / classname。在基于Struts的Web应用程序开发过程中,Action操作完毕后程序会通过Struts的配置文件struts- config.xml链接到指定的ActionForward,传到Struts的核心类ActionServlet,ActionServlet使用 ActionForward提供的路径,将控制传递给下一个步骤。ActionForward控制接下来程序的走向。ActionForward代表一个应用的URI,它包括路径和参数,例如:

path=“/modify.do?method=edit&id=10”

ActionForward的参数除了在struts-config.xml和页面中设置外,还可以通过在Action类中添加参数,或重新在Action中创建一个ActionForward。

在ActionForward中有一个重要的属性redirect,当redirect=false时,将保存存储在http请求和请求上下文中的所有内容,仅在同一个应用中可用。当redirect=true时,Web客户端进行一次新的http请求,请求的资源可以在同一个应用中,也可以不在,原来的请求参数不再保存,原来的请求上下文也被清除,新的http请求仅包含ActionForward的path属性里所包含的参数。如果在同一个应用中,用户会话的上下文会被维护。

ActionForward分为全局转发和局部转发,Action的Mapping对象的findForward方法首先会检查局部转发列表,查找失败就会到全局转发列表中查找。书写格式中,我们一般将全局变量定义为String常数,避免误解,使得转发列表结构清晰易读。

在项目开发过程中经常碰到一种情况,当页面已经改变了,浏览器中的地址如/modify.do或/modify.jsp却没有变化,当时没有考虑这么细,虽然存在疑问,但没有影响到程序功能的实现,因此忽略过去了,今天查找了一些资料才弄清楚。客户端浏览器显示的是浏览器最后被给定的URL,当URL被提交后,在某个组件返回一个响应给浏览器之前,Web应用可能已经转发请求多次,而这些过程都发生在服务器端,客户端浏览器并不知道有什么变化。当一个 http响应被返回时,它并没有包含地址栏的值,所以浏览器仅仅显示其用来作为初始请求的地址。通过使用redirect可以改变浏览器地址的显示,因为这样可以向浏览器提交一个新的请求,但付出的代价是数据不能通过请求上下文传递到页面,这也是使用forward和redirect的差异之一

posted @ 2011-10-07 18:04 Steven_bot 阅读(336) | 评论 (0)编辑 收藏

window.status 和 window.defaultStatus

在ie下面,设置了不设置window.status的时候,默认显示的是完成,碰到超链接以后,显示的是超链接,然后移除后,显示的是空白,如果指定了window.status之后,在空白的地方显示的是设置的值,而且永远保持这个值。

如果设置了defaultStatus属性后,那么只要把鼠标放到空白的地方,显示的都是defaultStatus的值,即使设置window.status也只是昙花一现,到了空白的地方显示的还是window.defautStatus的值.

 

 

firefox下面,本身不能使用window.status和window.defaultStatus,只有在about:config中将dom.disable_window_status_change设置为false之后,才能使这两个值生效,

但是firefox上面,本身默认的完成两个字不会被超链接清掉,然后window.status和window.defaultStatus的效果是一样的,只要指定了这两个值,那么

鼠标在空白的地方的时候,状态栏上显示的就是设置的值,任何一个都会把宁外的一个覆盖掉。这是与ie上的不同

posted @ 2011-10-07 17:32 Steven_bot 阅读(820) | 评论 (0)编辑 收藏

window.event对象解析

     摘要: event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。event对象只在事件发生的过程中才有效。event的某些属性只对特定的事件有意义。比如,fromElement 和 toElement 属性只对onmouseover 和 onmouseout 事件有意义。例子下面的例子检查鼠标是否在链接上单击,并且,如果shift键被按下,就取消链接的跳转。<html...  阅读全文

posted @ 2011-10-07 17:27 Steven_bot 阅读(360) | 评论 (0)编辑 收藏

js关于document和window对象

     摘要: [document对象]  该对象是window和frames对象的一个属性,是显示于窗口或框架内的一个文档。  属性  alinkColor 活动链接的颜色(ALINK)  anchor 一个HTMI锚点,使用<A NAME=>标记创建(该属性本身也是一个对象)  anchors array 列出文档锚点对象的数组(<A NAME=>)(该属性本身也是一个对象)  bgC...  阅读全文

posted @ 2011-10-07 17:24 Steven_bot 阅读(2756) | 评论 (0)编辑 收藏

JS中setTimeout()的用法详解

     摘要: 1. SetTimeOut()             1.1 SetTimeOut()语法例子             1.2 用SetTimeOut()执行...  阅读全文

posted @ 2011-10-07 17:20 Steven_bot 阅读(47449) | 评论 (2)编辑 收藏

JavaScript语言精粹---学习总结

     摘要: 一: 我们应该注意的1、== != 与 === !===JavaScript 有两组相等运算符:=== 和 !==,以及它们邪恶的孪生兄弟 == 和 !==。=== 和 !== 这一组运算符会按照你期望的方式工作。如果两个运算数类型一致且拥有相同的值,那么 ===&nb...  阅读全文

posted @ 2011-10-07 16:04 Steven_bot 阅读(398) | 评论 (0)编辑 收藏

JSTL(fn)

首先,我们要在页面的最上方引用:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 

下面是JSTL中自带的方法列表以及其描述 

 

fn:contains(string, substring)

假如参数string中包含参数substring,返回true

例如:<c:if test="${fn:contains(name, searchString)}">

 

fn:containsIgnoreCase(string, substring)

假如参数string中包含参数substring(忽略大小写),返回true

例如:<c:if test="${fn:containsIgnoreCase(name, searchString)}">

 

fn:endsWith(string, suffix)

假如参数 string 以参数suffix结尾,返回true

例如:<c:if test="${fn:endsWith(filename, ".txt")}">

 

fn:escapeXml(string)

将有非凡意义的XML (HTML)转换为对应的XML character entity code,并返回

例如: <字符应该转为&lt; ${fn:escapeXml(param:info)}

 

fn:indexOf(string, substring)

返回参数substring在参数string中第一次出现的位置

${fn:indexOf(name, "-")}

 

fn:join(array, separator)

将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。

${fn:join(array, ";")}

 

fn:length(item)

返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。假如是String类型,返回值是String中的字符数。

${fn:length(shoppingCart.products)}

 

fn:replace(string, before, after)

返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果

${fn:replace(text, "-", "•")}

 

fn:split(string, separator)

返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素

${fn:split(customerNames, ";")}

 

fn:startsWith(string, prefix)

假如参数string以参数prefix开头,返回true

<c:if test="${fn:startsWith(product.id, "100-")}">

 

fn:substring(string, begin, end)

返回参数string部分字符串从参数begin开始到参数end位置,包括end位置的字符

${fn:substring(zip, 6, -1)}

 

fn:substringAfter(string, substring)

返回参数substring在参数string中后面的那一部分字符串

${fn:substringAfter(zip, "-")}

 

fn:substringBefore(string, substring)

返回参数substring在参数string中前面的那一部分字符串

${fn:substringBefore(zip, "-")}

 

fn:toLowerCase(string)

将参数string所有的字符变为小写,并将其返回

${fn.toLowerCase(product.name)}

 

fn:toUpperCase(string)

将参数string所有的字符变为大写,并将其返回

${fn.UpperCase(product.name)}

 

fn:trim(string)

去除参数string 首尾的空格,并将其返回

${fn.trim(name)}

 

 下面是一个在页面显示时超过100个字符以后用......代替的方法:

<c:set var="testStr" value="${analyze.command}" />

              <c:choose>

                   <c:when test="${fn:length(testStr) > 100}">

                      <c:out value="${fn:substring(testStr, 0, 100)}" />  ......

                   </c:when>

                   <c:otherwise>

                      <c:out value="${testStr}" />

                   </c:otherwise>

              </c:choose>

posted @ 2011-10-07 15:46 Steven_bot 阅读(507) | 评论 (0)编辑 收藏