czmchen

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  17 随笔 :: 0 文章 :: 24 评论 :: 0 Trackbacks

2009年12月17日 #

web.xml加入
<taglib>
    <taglib-uri>/WEB-INF/c.tld</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>

c.tld一般在jstl JAR里面可以找到!

在JSP中加入文件头
<%
@ taglib  uri="/WEB-INF/c.tld" prefix="c"%>
<%@ page isELIgnored="false" %>

接着就可以使用EL表达式了
posted @ 2010-04-19 17:33 陈周敏 阅读(570) | 评论 (0)编辑 收藏

SQL语句:
1 select * from tableName where tableName.id in (select max(tableName.id) from tableName group by tableName.name having count(tableName.id) >1 )


posted @ 2010-04-15 16:23 陈周敏 阅读(281) | 评论 (0)编辑 收藏

标记下,总结下经验


select清空option
1 document.getElementById("type").options.length = 0;
select创建option
1 
2 function addOption(objSelect,optionVal,optionText)      {
3                 var   _o = document.createElement("option"); 
4                  _o.text = optionText;
5                  _o.value = optionVal;
6                  objSelect.add(_o);
7  }
8 


posted @ 2010-04-06 17:52 陈周敏 阅读(216) | 评论 (0)编辑 收藏

由于开发的需要,要用到xfire,对于开发我比较关心的是安全和速度!所以就找了xfire中的ws-security,利用它的安全证书和key,安全足够了

先到网上下载最新版的xfire,一般都去官方网站下载,了解下详情!其官网为http://xfire.codehaus.org
现在最新版为1.2.6,把xfire-all-1.2.6.jar xfire-distribution-1.2.6.zip下载

准备前,先看看ws-securitye的步骤,在http://xfire.codehaus.org/WS-Security里面可以看到,它提示我们installed Unlimited Strength Jurisdiction Policy Files,我就在http://java.sun.com/j2se/1.5.0/download.jsp里面下载两个包,因为我安装的是jdk1.6最新版,在http://java.sun.com/j2se/1.5.0/download.jsp最下面的Other Downloads的Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 5.0,点击下载,下载下来后,按照里面的步骤,把这两个jar放到
Java/jre6/lib/security里面,修改java.security,把
security.provider.6=com.sun.security.sasl.Provider改为
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
其效果为
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
#security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.mscapi.SunMSCAPI



准备工作做好后,解压xfire-distribution-1.2.6.zip,然后你会看到xfire-1.2.6这个文件夹,进去,你会看到有个examples文件夹,再进去,你就发现很多demo啦,在这里就找到了ws-security的demo

启动Myeclipse,看到里面的.classpath和.project文件,这个是eclipse的项目!用myeclipse打开,你发现都不正确,这些错误我就不理!

新建一个Web Progect项目,项目名随你命名。设置下该项目,点击该项目,右键,properties,找到Java Compiler,修改项目的jdk为1.5以上(里面用到的有注入)!解压xfire-distribution-1.2.6.zip,进入ws-security文件夹下,进入src下,再进入main的文件夹,把里面的文件全部都拷贝到你新建的项目的src下。点中该项目,右键,新建Source Folder,命名为test。后退,找到test的文件夹,把里面的文件全部拷贝到项目test的文件夹下。后退,再把web-inf里面的web.xml拷贝到项目里面,替换。最后在项目中加入jar,在xfire-1.2.6根文件夹下面有个lib,把这些lib全部放到项目的web-inf下的lib文件夹中,把xfire-all-1.2.6.jar也加入到项目中。整个项目的结构为:



生成key:在ws-security根目录下有个keys的文件夹,双击进去,运行generateServerKey.bat,将默认的key生成。里面的参数让你们研究,很好用(上面我跳过不安装j2se1.4就是因为有这个)!生成后,将serverKey.rsa和serverStore.jks扔到META-INF\xfire下,有个相同的那就替换,clientStore.jks同理

修改服务器参数:在org.codehaus.xfire.client下的BookClient.java,把变量SERVICE_NAMESPACE的值改为
http://localhost:端口号/上下文路径/BookService,下面的都同理。要修改到的文件META-INF\xfire下的services.xml。记得把http://xfire.codehaus.org修改为http://localhost:端口号/上下文路径/BookService。因为http://xfire.codehaus.org不开放那些接口


修改完毕后,把项目部署到tomcat,启动服务器后,org.codehaus.xfire.client下运行BookClientEnc.java
。运行后会报下面的错误
Running client : Encryption Client
Looking 
for isbn : 0123456789 .Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xml/utils/URI$MalformedURIException
    at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:
407)
    at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:
399)
    at org.apache.ws.security.message.WSSecEncrypt.encryptForInternalRef(WSSecEncrypt.java:
306)
    at org.apache.ws.security.message.WSSecEncrypt.build(WSSecEncrypt.java:
264)
    at org.apache.ws.security.action.EncryptionAction.execute(EncryptionAction.java:
62)
    at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:
192)
    at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:
158)
    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:
131)
    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:
79)
    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:
114)
    at org.codehaus.xfire.client.Client.invoke(Client.java:
336)
    at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:
77)
    at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:
57)
    at $Proxy0.findBook(Unknown Source)
    at org.codehaus.xfire.client.BookClient.executeClient(BookClient.java:
63)
    at org.codehaus.xfire.client.BookClientEnc.main(BookClientEnc.java:
23)
Caused by: java.lang.ClassNotFoundException: org.apache.xml.utils.URI$MalformedURIException
    at java.net.URLClassLoader$
1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
     
16 more

这是因为你还没把xalan.jar加入去,到http://www.apache.org/dyn/closer.cgi/xml/xalan-j 下载最新版
,现在最新去到2_7_1,找到xalan-j_2_7_1-bin.zip,把其下载后,添加xalan.jar到项目

再运行,如果出现下面的结果,那就正常啦
Running client : Encryption Client
Looking for isbn : 0123456789 ....Using XFire : Dan Diephouse


我的做好的示例文件在http://www.blogjava.net/Files/czmchen/ws-security.rar可以下载,下载后要做的事情就是把jar按上面的方法加进去,因为jar太大了,上传不上!还有要改下tomcat的端口为8001,再部署项目

posted @ 2010-01-15 09:51 陈周敏 阅读(1566) | 评论 (0)编辑 收藏

进入weblogic后台配置数据库连接池。因为我的项目数据库是ORACLE,那就以Oracle的配置作为示例:

我的示例weblogic是8.x,其他版本都同理,找到参数后即可

进入后台后,单击左边的mydomain—>Services—>JDBC—>Connection Pools
新建我就不说了,在我的文章里面有weblogic的数据源连接create

9.x的要解锁,那就先解锁。点击你想设置的数据源的名称进去。进去后点击上面的菜单Connections

看到参数设置了吧。

Initial Capacity:100   (初始化容器的连接数)
Maximum Capacity:1000  (容器中最大的连接数1000,如果超过/还没到1000就会报超出最大连接的错误,原因你的Oracle安装数据库的时候其池没设置大小,现在你也可以设置。设置方法:找到Oracle的init.ora文件这个文件一般在oracle/admin/数据库SID/pfile里面。找到large_pool_size这一句,把这一句删除,那就不受限制了。注意:没受限制的情况下不要调这个参数太大了,35000就OK了,太大的时候数据库会承受不起)
Capacity Increment:15   (一次增加多少个connection)
Statement Cache Size:50 (缓存大小)

按下下面的Advanced Options "Show",设置详细的配置
下面是JNDI的自动回收设置,比较重要,调几个重要的参数,其他的默认
Test Frequency:3600(测试频率,这个会消耗资源。这个看你的项目需要,一般代码写得比较好的可以设置长点时间
把下面三个都打上勾。通过测试,发现连接没关的就会被回收(详细说明可以看下面的参数说明)
Test Reserved Connections
Test Created Connections
Test Released Connections

Inactive Connection Timeout:60(无效连接超时!这个会在指定的时间内,回收无效连接)

网上有些人说设置这些参数后一定的时间会出现java.lang.OutOfMemoryError的错误
解决的方法就是调大JVM的内存,在启动时对jvm设置内存限度
通过修改commom\bin\commEnv.cmd文件来增加内存分配
修改的部分如下:
:bea
if "%PRODUCTION_MODE%" == "true" goto bea_prod_mode
set JAVA_VM=-jrockit
set MEM_ARGS=-Xms768m -Xmx1024m
set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
goto continue
:bea_prod_mode
set JAVA_VM=-jrockit
set MEM_ARGS=-Xms768m -Xmx1024m//这些看你内存定1G的就设置=-Xms256m -Xmx512m
goto continue

:sun
if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode
set JAVA_VM=-client
set MEM_ARGS=-Xms768m -Xmx1024m -XX:MaxPermSize=256m
set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
goto continue
:sun_prod_mode
set JAVA_VM=-server
set MEM_ARGS=-Xms768m -Xmx1024m -XX:MaxPermSize=256m//这个就解决了java.lang.OutOfMemoryError的错误
goto continue
将这里的内存分配修改后见效。

连接属性参数说明:

  * Initial Capacity:创建连接池时所创建的数据库连接的数目。
  * Maximum Capacity: 连接池中连接的最大数目。
  * Capacity Increment: 连接池容量在最大容量限制范围内的增量。
  * LoginDelay: 在创建每个物理数据库连接之前要延迟的秒数。
  * Allow Shrinking: 将该项设置为true时,如果没有使用额外的连接,则允许连接池把容量减小到InitialCapacity。
  * Shrink Frequency: 在减小连接池容量之前要等待的秒数。如果将Shrink Frequency设置为true,那么也必须将Allow Shrinking设置为true。
  * Test Frequency: 数据库连接测试之间间隔的秒数。在每个Refresh Period时间间隔之后,如果设置了TestTableName,就会使用TestTableName测试未使用的数据库连接。
  * Test Reserved Connections: 如果选择了这个选项,服务器会在把连接提供给客户端之前对其进行测试。
  * Test Created Connections: 如果选择了这个选项,就会在创建一个JDBC连接之后和在把它添加到JDBC连接池中的可用连接列表之前,对该JDBC连接进行测试。
  * Test Released Connections: 如果选择了这个选项,服务器就会在把连接返回给连接池之前对其进行测试。
  * Test Table Name: 用于JDBC连接测试的数据库表名。如果指定了Test Frequency,并且选择了Test Reserved Connections、Test Created Connections或Test Released Connections,则Table Name是必需的

连接属性参数说明来源于网上,大家从你项目角度设置
最后别忘记点最下面的APPLY按钮
posted @ 2010-01-08 17:22 陈周敏 阅读(2364) | 评论 (0)编辑 收藏

最近开发用的Weblogic的JNDI数据源连接,可是JNDI没有自动回收连接的功能!
项目不知道哪里代码写的时候没有关闭连接,造成有些连接是死连接
这样很容易造成数据库崩溃或者没连接

我的思路就是想把这个项目的用户都关闭,回收资源
我的PL/SQL中运行命令
SELECT s.Sid, s.Serial#,p.spid, s.USERNAME,s.OSUser,
s.Program  
FROM  V$Process p,V$session s WHERE p.addr=s.paddr(+ORDER BY s.Sid

有人用

alter system kill session 'sid,serial#' ;这个命令来杀死,可是资源不立刻回收


运行下面的语句就可以回收资源
查出连接用户后,在CMD中输入orakill 数据库名 SPID(EXP:orakill orcl XXX)


posted @ 2010-01-06 08:37 陈周敏 阅读(7298) | 评论 (0)编辑 收藏

记录dom的学习经验。下次忘记的时候直接来拿

<select id="typevalue" onChange="modifyType();">

<option value="1" id="0">11</option>

<option value="2" id="1">22</option>

<option value="3" id="2">33</option>

<option value="4" id="3">44</option>

<option value="5" id="4">55</option>

<option value="6" id="5">66</option>

<option value="7" id="10">77</option>

</select>



获取选中的option的text值
var typevalue = document.getElementById("typevalue");
var typevalueText = typevalue.options[typevalue.selectedIndex].text;

获取选中的option的ID值
var typevalue = document.getElementById("typevalue");
var typevalueId = typevalue.options[typevalue.selectedIndex].id;

posted @ 2009-12-17 15:01 陈周敏 阅读(865) | 评论 (0)编辑 收藏