JBOSS 点滴

丰丰的博客

2009年7月16日 #

字符串型转换为JSON并获取值

@RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST)
@ResponseBody
public void updateInvestorApplyAccountNo(HttpServletRequest request,
HttpServletResponse response,
@RequestBody String requestBody) {
int num = 0;
String result = "";
//下面是把拿到的json字符串转成 json对象
JSONObject jsStr = JSONObject.parseObject(requestBody); //将字符串{“id”:1}
//int jsID = Integer.parseInt(jsStr.getString("id"));//获取id的值


/** 
* json对象转换成java对象 
*/ 
InvestorApplyModel stud = (InvestorApplyModel) JSONObject.toJavaObject(jsStr,InvestorApplyModel.class);

}

posted @ 2018-08-25 15:38 半导体 阅读(38) | 评论 (0)编辑 收藏

redirect_uri域名与后台配置不一样,错误码10003

微信获取openid时,如遇到以下错误

解决方法如下:
1、获取openid时,链接地址https://open.weixin.qq.com/connect/oauth2/authorize? 中redirect_uri一定要带上http,
   公众号设置->功能设置->网页授权域名中的域名与redirect_uri域名要一模一样,记得一定要加上http://

posted @ 2018-08-22 10:14 半导体 阅读(91) | 评论 (0)编辑 收藏

JAVA+ORACLE+BLOB+Mybatis

实体类:
    private  byte[] richContent;
    
public byte[] getRichContent() {
        
return richContent;
    }


    
public void setRichContent(byte[] richContent) {
        
this.richContent = richContent;
    }

Mapper.xml
    <result column="RICH_CONTENT" property="richContent" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler"/>

      <if test="richContent != null" >
        UPDATE_DATE = #{richContent,jdbcType=BLOB},
      
</if>
JSP
<td class="propname">发布内容:</td>
<td class="propvalue" colspan="6">
<div id="myEditor" type="text/plain" name='content' style="width: 900px;height:400px;"/>
</td>
CONTROL保存
    //利用content转换为二进制,存入richcontent
String strRich = newsBean.getContent();
if(strRich.length()>0) {
byte[] temp = strRich.getBytes();
newsBean.setRichContent(temp);
newsBean.setContent("");
}

CONTROL显示:
if(casNewsModel.getRichContent().length>0) {
content = new String(casNewsModel.getRichContent());
casNewsModel.setContent(content);
}



posted @ 2018-01-22 20:34 半导体 阅读(56) | 评论 (0)编辑 收藏

模拟登录解决方案

最近一直在做单点登录,随着客户需求不同,解决方案也是多种多样,来说说我总结的解决方案:
一、采用标准接口方式实现单点登录,由于夜已深,以后再上传。
二、采用模拟登录,在门户中让用户输入用户名密码,再模拟用户登录的方式实现系统登录。
当客户提出这种方式时,本人是表示不理解,考虑到安全性本想拒绝,但。。。客户永远是god。
说说这种方式实现的思路吧,用户登录无非几种,
第一:输入用户名密码然后uget或post提交,有密码在手,get方式大家都会,post也很容易,登陆页另存为,form action填远程登陆地址,正常就O了。   
        千万注意,如果用户传的中文,一定要保证不乱码,传输的编码要与系统对应,在<post 中增加编码格式就行了,如:
<form action="远程提交地址"   accept-charset="GB2312" onsubmit="document.charset='GB2312';"/>
第二:如果碰到先加密,再私钥配对这种,模拟他的整个过程,因为密码在手,他调什么方法,你也调,他怎么混,你也照着混。只是步骤多,其他都一样,

posted @ 2017-12-24 00:13 半导体 阅读(23) | 评论 (0)编辑 收藏

ajax调用方法

i不跨域调用

$(document).ready(function() {
$.ajax({
type : 'post',
url :' <%=path%>/mplat/InitAllMenu',
data : {},
cache : false,
dataType : 'json',
success : function(data, stats) {alert(data.menus);
// var returnData=JSON.parse(data);
/* var returnData = data;
appname = returnData.appname;
allTreeNodes = JSON.parse(returnData.menus);*/
},
error : function() {debugger;
alert( "加载应用名出现问题..");
}
})
;

跨域请用jsonp访问,由于回调时会报callback错误,请直接用jquery-jsonp插件;

做跨域数据处理的时候经常使用Jquery的getJSONP方法。但是这个方法跟普通的Ajax是完全不一样的,尽管指定了error,当请求发生错误的时候也不会去执行这个函数。

jQuery-JSONP 是一个支持 JSONP 调用的 jQuery 插件,它支持出错时的 Ajax 回调。下载地址:https://github.com/jaubourg/jquery-jsonp

使用方法很简单,直接引用Down到的文件到你的页面。

$.jsonp({
        url: "/Handler/demo",
        data: { yourdata: "data" },
        callback:"callbackAction",
        success: function (json) {
            //your code            
        },
        error: function (xOptions, textStatus) {
            //your code           
        }
    });

  

注意事项:


http://blog.csdn.net/function_jx_/article/details/47124815
  1. callback:假如指定的值是callbackAction,服务端返回的json数据必须包含在callbackAction()里面。(具体原因请了解一下Jsonp实现原理)

posted @ 2017-12-13 16:50 半导体 阅读(50) | 评论 (0)编辑 收藏

java文件上传工具

uploadify:文件可以切片存放,目前常用

http://www.plupload.com/examples/ 

webUploader

swfUpload:界面漂亮,但文件不能切片存放

posted @ 2017-11-20 16:51 半导体 阅读(47) | 评论 (0)编辑 收藏

powerdesigner反向工程时报错odbc驱动问题

找了很久终于找到64位的powerdesigner16.5了,网上基本所有的默认为32位的,但是现在数据库基本都是64位的了,这样在逆向生成pdm时就会报错,请叫我雷锋。

链接:http://pan.baidu.com/s/1slwAjSh

提取密码:d4gw

需要破解文件的可以在我的上传资源里找到,绝对可以用,本人亲测的!

转自:http://blog.csdn.net/danfeixia123/article/details/53381733

posted @ 2017-11-07 15:17 半导体 阅读(111) | 评论 (0)编辑 收藏

IDE环境配置

oracle 下载地址:http://blog.itpub.net/16886618/viewspace-1365348/
MAVEN安装:http://www.cnblogs.com/izecsonLee/p/6155868.html   最后setting文件localRepository改为 本机地址。

posted @ 2017-10-17 23:43 半导体 阅读(79) | 评论 (0)编辑 收藏

微信公众平台申请测试接口URL和TOKEN的配置,怎么在本地让微信能通过80端口访问

  最近开始微信公众平台的捣鼓,但相信和很多新手一样,遇到的第一件事就是如何配置url,主要是微信的80端口的蛋疼限制,我想这其中的流程应该是这样 的。我们在申请测试帐号时,微信需要指定一个URL和TOKEN,这样微信就可以根据分配给你的APPID和SECRET来通过你提供的URL来认证并且 通过这个接口返回你要的数据,所以也就是我们的程序和微信是能过这个URL来完成交互的,根据这个思路,我们需要一个能让微信访问到你项目的URL,至于 TOKEN可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)

在公司,首先应当解决的是怎么让外网访问你的项目,我用的是JAVA语言来做开发,刚 开始想通过3322动态解析平台让外网映射到公司来,然后用路由来做一个映射到我的tomcat 8080端口,但尝试后发现3322这个是不能用80端口做映射(很多都这样),所以没办法,也不能直接上公司的服务器来开发,而且80会被其他端口占 用,如果把项目托管到云服务器上也不方便开发,幸好在一个群里遇到高手,建议用ngrok直接把本地开放给外网(大喜),下载后直接把这个解压(我用的是ubuntu,所以下的linux版),在终端里运行./ngrok 8080,这样ngrok会返回一个动态的URL,果然可以访问了,但问题是我在微信里填写的这个URL不可能每次都变呀,于是运行./ngrok -subdomain=test 8080,但这个需要注册才可以用,于是去官网注册。 再根据提示运行一次验证,然后运行这个就OK了,这样我的URL就固定为http://test.ngrok.com。于是乎,我填写微信的URL为 http://test.ngrok.com/mywork/app/action/service(项目访问路径), 打开这tomcat,这样不要做任何更改就可以让外网访问了,然后点击申请认证,就可以看到微信平台已经访问到这我的项目了,接下来做一些验证(下篇贴出 验证代码-java版),OK。这下可以看到配置成功了。至此结束,开始微信之旅,这里感谢群里的老K,和其他的一些兄弟。


来源:
http://blog.csdn.net/aj1031689/article/details/17436125

posted @ 2015-10-23 13:11 半导体 阅读(253) | 评论 (0)编辑 收藏

android软银盘始终显示,并显示在焦点上

//强制显示软银盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//edittext默认焦点
scanbill.setFocusable(true);
scanbill.requestFocus();
scanbill.setFocusableInTouchMode(true);

posted @ 2015-07-03 20:09 半导体 阅读(122) | 评论 (0)编辑 收藏

安卓安装

http://wenku.baidu.com/link?url=7c2-Fo9694hJtWxlwsab09f8fv81BPQmrWMQD8z1zxUSnvnM2FfECc4gN0yewgxkSUhLkdbrG4euc2CULcjQHY7fUn5xzjDedELXAcY-2sG&qq-pf-to=pcqq.c2c

posted @ 2015-06-03 12:17 半导体 阅读(102) | 评论 (0)编辑 收藏

[Android实例] 查找手机中所有的APK,并点击其中任一应用程序进入其中

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=203302

posted @ 2015-05-26 11:37 半导体 阅读(87) | 评论 (0)编辑 收藏

android跳转到另一个类再返回当前类和值

第一步:在A类中点击按钮时调用B类
A类中:
int OUTBILL_CODE = 10;//全局啊
  case R.id.diyoutbill:
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   intent.setClass(ctx, Itemdiydown.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   startActivityForResult(intent,OUTBILL_CODE);
   break;
第二步:
B类中:
      Bundle bundle = new Bundle();   
      bundle.putString("downtype",pubdowntype);
      bundle.putString("startDate",pubstartDate);
      bundle.putString("endDate", pubendDate);
   Itemdiydown.this.setResult(RESULT_OK, this.getIntent().putExtras(bundle));   
   Itemdiydown.this.finish();//关闭当前窗口 
第三类:
返回A类中:
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == OUTBILL_CODE&& resultCode == RESULT_OK) {//
    Bundle bundle = data.getExtras();
          startDate = bundle.getString("startDate");
          endDate = bundle.getString("endDate");
          downtype = bundle.getString("downtype");
          //执行事件
  }
 }

posted @ 2015-05-23 16:59 半导体 阅读(109) | 评论 (0)编辑 收藏

android连接数据库sqllist基础操作学习:

基础学习:
http://blog.csdn.net/liuhe688/article/details/6715983/

Android 数据存储——SQLite实例、判断数据库中表是否存在
http://www.2cto.com/kf/201502/375368.html

posted @ 2015-05-23 11:19 半导体 阅读(156) | 评论 (0)编辑 收藏

SharedPreferences存储和读取数据

     摘要: 转自:http://blog.sina.com.cn/s/blog_4f1c99de0101hur1.html除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPrefer...  阅读全文

posted @ 2015-05-21 13:14 半导体 阅读(105) | 评论 (0)编辑 收藏

JAVA获取配置信秘

java.util.Properties props = new java.util.Properties();
  in = getClass().getResourceAsStream("/HotelBeContextDAO.properties");
  try {
   props.load(in);
    props.getProperty("officeCode")
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

posted @ 2015-05-20 09:33 半导体 阅读(74) | 评论 (0)编辑 收藏

用webview写界面,加载本地js,js,html文件

转自:http://www.tuicool.com/articles/3mE7BzR
以jquery mobile为例

1.在android界面拖入一个webview,然后添加一个internet权限

<uses-sdk  
    android:minSdkVersion="8"  
    android:targetSdkVersion="18" />  
<uses-permission android:name="android.permission.INTERNET"/>  
  
<application  
            .............................  
View Code

2.  在assets目录里面放入js,css,html资源文件

3.在写本地html的时候引入assert里的对应路径

<!DOCTYPE html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<meta name="viewport" content="width=device-width, initial-scale=1">   
<title> 标题 </title>  
<link rel="stylesheet" type="text/css" href="file:///android_asset/css/jquery.mobile-1.4.2.min.css">  
<script src="file:///android_asset/js/jquery-1.7.1.min.js"></script>  
<script src="file:///android_asset/js/jquery.mobile-1.4.2.min.js"></script>  
</head>  
<body>  
  
  
 <div data-role="page">  
   <div data-role="header">  
    <h1>My Title</h1>  
   </div>  
     
   <div data-role="content">  
    <ul data-role="listview" data-inset="true" >  
      <li><a href="#">Acura</a></li>  
      <li><a href="#">Audi</a></li>  
      <li><a href="#">BMW</a></li>  
      <li><a href="#">Cadillac</a></li>  
      <li><a href="#">Ferrari</a></li>  
    </ul>   
   </div>  
 </div><!-- /page -->  
  
</body>  
</html>
View Code

4.在代码里访问页面

package com.example.asd_webview;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.webkit.WebSettings;
import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebView;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    WebView webview = (WebView)findViewById(R.id.webView1);
    WebSettings wv_setttig = webview.getSettings();
    wv_setttig.setJavaScriptEnabled(true);
    //wv_setttig.setRenderPriority(RenderPriority.HIGH);
    
    String url = "file:///android_asset/index.html";
    webview.loadUrl(url);
    
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

}
View Code

5.最后效果如下:

posted @ 2015-05-15 17:03 半导体 阅读(331) | 评论 (0)编辑 收藏

CSS图片适应DIV或TD

img{
max-width:100%;height:auto;
}

posted @ 2015-05-15 12:19 半导体 阅读(107) | 评论 (0)编辑 收藏

android在布局中图片大小自适应

一、适应某控制:
      XML:

                <WebView
                    android:id="@+id/awaimage"
                    android:layout_width="90dp"
                    android:layout_height="80dp"
                    android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:scaleType="fitXY"

     JAVA:
/*            WebSettings webSettings = holder.imageView.getSettings();    
            webSettings.setUseWideViewPort(true); //设置加载进来的页面自适应手机屏幕 
            webSettings.setLoadWithOverviewMode(true); 
*/

            
//允许使用javascript  
       
//     webSettings.setJavaScriptEnabled(true); 

二、自动适应屏幕大小:
         WebSettings webSettings = holder.imageView.getSettings();   
         webSettings.setUseWideViewPort(true); //设置加载进来的页面自适应手机屏幕
         webSettings.setLoadWithOverviewMode(true); 
         //允许使用javascript  
         webSettings.setJavaScriptEnabled(true);

posted @ 2015-05-13 14:39 半导体 阅读(73) | 评论 (0)编辑 收藏

Android图片处理内存溢出学习

    

        Android图片处理内存溢出学习             

原文:

http://blog.csdn.net/huangbiao86/article/details/8072128

最近遇到一个问题,在Android机器上,调用自带的相机拍摄后获得相处,并且对获得的相片进行缩放,旋转,截取等操作,看似很简单,但是却遇到了一个,让人心疼的问题,我这里用五能手机进行测试,当然,功能测试是没有问题,当发给客户去测试的时候,却出现了内存溢出,哎无言啊...

原来他用的是三星的G3手机进行测试的,我们没有这款手机,后来借别人的G3手机测试,果然也出现这个问题:

  1. java.lang.OutOfMemoryError  
  2. at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)  
  3. at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:518)  
  4. at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:535)  
  5. at com.yippeearts.flashcards.CameraPage$1.onPictureTaken(CameraPage.java:73)  
  6. at android.hardware.Camera$EventHandler.handleMessage(Camera.java:734)  
  7. at android.os.Handler.dispatchMessage(Handler.java:99)  
  8. at android.os.Looper.loop(Looper.java:137)  
  9. at android.app.ActivityThread.main(ActivityThread.java:4514)  
  10. at java.lang.reflect.Method.invokeNative(Native Method)  
  11. at java.lang.reflect.Method.invoke(Method.java:511)  
  12. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)  
  13. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)  
  14. at dalvik.system.NativeStart.main(Native Method)  

这个在不同的手机上出现这种错误还是有点尴尬的。一直以为是对图片的逻辑处理出了什么问题,经过总结发现,估计是因为G3手机拍摄相片分辨率过高,使图片过大,造成过程中内存溢出,通过网上搜索若干解决加载大图片时内存溢出的问题:

 

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。
如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常
另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应, 使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。


内存溢出解决办法:

1、模拟器RAM比较小,只有8M内存,当我放入的大量的图片(每个100多K左右),就出现上面的原因。由于每张图片先前是压缩的情况,放入到Bitmap的时候,大小会变大,导致超出RAM内存,具体解决办法如下:

  1. // 解决加载图片 内存溢出的问题  
  2. // Options 只保存图片尺寸大小,不保存图片到内存  
  3. BitmapFactory.Options opts = new BitmapFactory.Options();  
  4. // 缩放的比例,缩放是很难按准备的比例进行缩放的,其值表明缩放的倍数,SDK中建议其值是2的指数值,值越大会导致图片不清晰  
  5. opts.inSampleSize = 4;  
  6. Bitmap bmp = null;  
  7. bmp = BitmapFactory.decodeResource(getResources(), mImageIds[position],  
  8.                 opts);  
  9. // 回收  
  10. bmp.recycle();  

2、优化Dalvik虚拟机的堆内存分配

 

对于Android平台来说,其托管层使用的Dalvik JavaVM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法:   private final static floatTARGET_HEAP_UTILIZATION = 0.75f; 在程序onCreate时就可以调用VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);即可。

Android堆内存也可自己定义大小

对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的dalvik.system.VMRuntime类来设置最小堆内存为例:

  1. private final static int CWJ_HEAP_SIZE = 610241024 ;  
  2.   
  3. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理  

bitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError的优化方法
★android 中用bitmap 时很容易内存溢出,报如下错误:Java.lang.OutOfMemoryError : bitmap size exceeds VM budget

 

主要是加上这段:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;

 eg1:(通过Uri取图片)

  1. private ImageView preview;  
  2. BitmapFactory.Options options = new BitmapFactory.Options();  
  3. options.inSampleSize = 2;//图片大小,设置越大,图片越不清晰,占用空间越小  
  4. Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri), null, options);  
  5. preview.setImageBitmap(bitmap);  

eg2:(通过路径去图片)

 

  1. private ImageView preview;  
  2. private String fileName= "/sdcard/DCIM/Camera/2010-05-14 16.01.44.jpg";  
  3. BitmapFactory.Options options = new BitmapFactory.Options();  
  4. options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一  
  5. Bitmap b = BitmapFactory.decodeFile(fileName, options);  
  6. preview.setImageBitmap(b);  
  7. filePath.setText(fileName);  

在图片处理的时候,确保图片引用及时回收。

posted @ 2015-05-12 18:54 半导体 阅读(129) | 评论 (0)编辑 收藏

安卓 html显示时,图片无法加载

<!--  hardwareAccelerated解决4.0启动了硬件加速 ,HTML网络图片无法正常显示的问题-->
android:hardwareAccelerated="false"

posted @ 2015-05-05 20:57 半导体 阅读(97) | 评论 (1)编辑 收藏

安卓显示HTML

方法1、使用 CDATA(推荐)
<string name="demoStr"><Data><![CDATA[ <b>ABC</b> ]]> </Data></string>
方法2、转义HTML标签
<string name="myHeadStr">&lt;b>&lt;u>bold, underline &lt;/u>&lt;/b></string>
在程序里引用:
Html.fromHtml(getResources().getString(R.string.myHeadStr));
效果图
android string html标签用法
string.xml代码
Code   ViewCopyPrint
  1. <string name="test"><Data><![CDATA[ <b><font color="#ff0000">ABC</font></b> ]]></Data></string>  

java代码:

Code   ViewCopyPrint
  1. import android.app.Activity;   
  2. import android.app.AlertDialog;   
  3. import android.content.DialogInterface;   
  4. import android.os.Bundle;   
  5. import android.text.Html;   
  6.   
  7. public class testActivity extends Activity {   
  8.     public void onCreate(Bundle savedInstanceState) {   
  9.         super.onCreate(savedInstanceState);   
  10.         AlertDialog.Builder dialog = new AlertDialog.Builder(testActivity.this);   
  11.         dialog.setTitle("测试HTML标签").setMessage(Html.fromHtml(getString(R.string.test))).setPositiveButton(getString(R.string.btn_confirm), new DialogInterface.OnClickListener() {   
  12.             public void onClick(DialogInterface dialog, int which) {   
  13.   
  14.             }   
  15.         }).create().show();   
  16.     }   
  17. }   

posted @ 2015-05-05 13:39 半导体 阅读(46) | 评论 (0)编辑 收藏

eclipse luna+tomcat7.0+JDK7.0+maven环境配置

eclipse luna+tomcat7.0+JDK7.0+maven环境配置

一、下载相关包:

eclipse luna下载地址 :  http://www.eclipse.org/downloads/

JDK7.0下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Tomcat7.0下载地址:

http://tomcat.apache.org/download-70.cgi

MAVEN下载地址:http://maven.apache.org/

二、环境变量配置(根据软件安装位置配置如下)

JAVA_HOME: D:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_11\;

PATH: D:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_11\bin;

M2_HOME:  D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5

PATH D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5\bin

三、    运行eclipse luna

绿色环保,直接运行eclipse.exe就行了


四、导入maven项目前配置

    
A,tomcat
配置





B,JDK配置


C,MAVEN
安装:


D,
导入maven项目:


E,
导入后如果项目报错,请执行:

在项目上右击,选择菜单maven->update project MAVEN会自动搜索项目中需要的jar包)

   F、运行服务:

选择run on server->tomcat 7

iE上输入:http://localhost:8080/项目名   测试一下吧。

posted @ 2015-02-12 10:04 半导体 阅读(2701) | 评论 (1)编辑 收藏

MAVEN环境变量配置

一、JDK配置:JAVA_HOME  PATH 
二、新建M2_HOME环境:  如:D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5
三、PATH:如:D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5\bin
     测试Maven环境是否搭建成功,在CMD下输入命令:
      mvn -v
     编译maven项目方法:cmd下指向项目目录下,运行命行:mvn compile
     mvn te

posted @ 2015-02-11 17:41 半导体 阅读(116) | 评论 (0)编辑 收藏

sqlserver创建用户,指定数据库,指定表的权限

http://www.cnblogs.com/gaizai/archive/2011/07/14/2106617.html
记住要选择dbo_owner 别选sysadmin

posted @ 2014-12-03 16:57 半导体 阅读(151) | 评论 (0)编辑 收藏

IREPORT报表实现

     摘要: 一、在JSP中通过传参数实现源代码:(在jasper模板中定义好查询条件及参数) Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><%@ page language="java" import="java.util...  阅读全文

posted @ 2014-11-19 11:47 半导体 阅读(230) | 评论 (0)编辑 收藏

Spring MVC程序中得到静态资源文件css,js,图片文件的路径问题总结

Spring MVC程序中得到静态资源文件css,js,图片

文件的路径


问题总结

用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题,那就是程序数据都已经查询出来了,但界面样式仍然十分丑陋,加载不了 css,js,图片等资源文件。当你在浏览器上直接输入某个css文件的路径时,直接得到404错误,而路径肯定没有错,其原因就在于在web.xml 中配置了类似如下的 spring servlet:
程序代码 程序代码

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

请注意  <url-pattern>/</url-pattern> 这表示这个servlet 拦截了所有的请求,包括css,js等。所以出现上面描述的情况。如何解决这个css,js等路径问题呢,有如下几种解决方案.

1. 使用spring mvc resource 去读取静态文件
比如在 WEN-INF 下建立static 文件夹,并在 static 文件夹里面建立css 文件夹,然后建立 1.css  文件.
修改 mvc-dispatcher-servlet.xml 文件
程序代码 程序代码

<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>

这样配置之后,可以通过 http://your-ip:port/your-app/static/css/1.css 直接访问了。

2. 采用 default servlet
在 web.xml  里面配置
程序代码 程序代码

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

这样做了之后,所有前缀为static 的请求都交给default servlet 去处理。如果你请求  http://your-ip:port/your-app/static/css/1.css ,就表示在 webcontent 目录下的css文件夹下的1.css文件。

3. 通过文件扩展名进行处理
在 web.xml 里面配置
程序代码 程序代码

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>


4. 对spring servlet 不用restful 风格。在url 上加上前缀
程序代码 程序代码

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/app</url-pattern>
</servlet-mapping>

这样做的目的是让 dispatchservlet 去拦截以/app 开头的那些 URL,并不拦截css,js等。

5. 对spring servlet 不用restful 风格。在url 上加上后缀
程序代码 程序代码

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

这样做的目的是让 dispatchservlet 只拦截*.do 的url. 并不拦截css,js等。

上面介绍的5种方法,根据情况自己任意选择一种,现在没办法说那种好,那种方法不好,都有可取之处,用在不同的场景而已。

posted @ 2014-08-24 23:12 半导体 阅读(22591) | 评论 (3)编辑 收藏

easy ui API中文文档

http://www.cnblogs.com/Philoo/archive/2011/10/01/jeasyui_api_layout.html

posted @ 2014-08-20 15:01 半导体 阅读(86) | 评论 (0)编辑 收藏

ajax easy ui总结

1、重新刷新替换iframe:
$("#childRightFrame1").attr('src',"http://www.baidu.com");
2、

取到easyui的tab下iframe方法

http://liuna718-163-com.iteye.com/blog/1672182

3、Easy UI 点击TAB 标签 刷新内容

$('#tabs').tabs({
        onSelect: function (title) {
            var currTab = $('#tabs').tabs('getTab', title);
            var iframe = $(currTab.panel('options').content);
            var src = iframe.attr('src');
            $('#tabs').tabs('update', { tab: currTab, options: { content: createFrame(src)} });
        }
    });

4、页面显示固定值

{
      field : 'tools',
      title : '操作',
      width : 100,
      formatter:function(value,rowData,index){
      var values ="<input type='button' value='设备控制方案'/>";
      return values
      }
      
     }
5、获取选中行的值
  1. var row = grid.datagrid('getSelected');   
  2. if (row){   
  3.   alert(row.id);   
  4. }  

 6、

利用原生JSON对象,将对象转为字符串

 

 

  1. var jsObj = {};  
  2. jsObj.testArray = [1,2,3,4,5];  
  3. jsObj.name = 'CSS3';  
  4. jsObj.date = '8 May, 2011';  
  5. var str = JSON.stringify(jsObj);  
  6. alert(str);  

 

从JSON字符串转为对象

 

 

  1. var jsObj = {};  
  2. jsObj.testArray = [1,2,3,4,5];  
  3. jsObj.name = 'CSS3';  
  4. jsObj.date = '8 May, 2011';  
  5. var str = JSON.stringify(jsObj);  
  6. var str1 = JSON.parse(str);  
  7. alert(str1);  

posted @ 2014-08-20 10:38 半导体 阅读(86) | 评论 (0)编辑 收藏

在JS方法中返回多个值的三种方法 转

在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现:

1 使用数组的方式,如下:

<html>
<head>
    <title>JS函数返回多个值--oec2003</title>
</head>
<body>
    <input type="button" onclick="getNames()" value="test" />

    <script type="text/javascript">
function getData()
{
    var names=new Array("oec2003","oec2004");
    return names;
}
function getNames()
{
    var names=getData();
    alert(getData()[0]); //返回oec2003
}
</script>

</body>
</html>

 

2 将数据封装到Json中返回,如下:

<html>
<head>
<title>JS函数返回多个值--oec2003</title>
</head>
<body>
<input type="button" onclick="getInfo()" value="test"/>
<script type="text/javascript">
function getData()
{
    var info={"name":"oec2003","age":"25"};
    return info;
}
function getInfo()
{
    var info=getData();
    var name=info["name"];
    var age=info["age"];
    alert("姓名:"+name+" 年龄:"+age);
}
</script>
</body>
</html>

更详细的Json的介绍请看这里

3 这是最简单的一种方法,看下面代码:

<html>
<head>
<title>JS函数返回多个值--oec2003</title>
</head>
<body>
<input type="button" onclick="getInfo()" value="test"/>
<script type="text/javascript">
    function getData()
    {
        return ["oec2003", 25]
    }
    function getInfo()
    {
        var info = getData();
        alert("姓名:" + info[0] + "年龄:" + info[1]);
    }
</script>
</body>
</html>

posted @ 2014-08-18 08:23 半导体 阅读(87) | 评论 (0)编辑 收藏

Tomcat部署发布多个工程详细配置;

 

  apache-tomcat-7.0.40配置:

     一、配置解决多个项目出现内存溢出的问题:
 
      找到:D:\apache-tomcat-7.0.40\bin\catalina.bat
      添加:
              set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
    
     在:   echo Using CATALINA_BASE:   "%CATALINA_BASE%"  的上一行;
    
    找到:D:\apache-tomcat-7.0.40\bin\catalina.sh
    添加:
            JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
   
   在:  echo "Using CATALINA_BASE:   $CATALINA_BASE"  的上二行;
    
  二、配置项目路径:
       
     1.找到:D:\apache-tomcat-7.0.40\conf\server.xml
     2.注释掉原来的  Host  标签及标签内的所有:
   eg: 
  <!-- <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"> -->
   <!-- SingleSignOn valve, share authentication between web applications
    Documentation at: /docs/config/valve.html -->
   <!--
   <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
   -->

   <!-- Access log processes all example.
    Documentation at: /docs/config/valve.html
    Note: The pattern used is equivalent to using pattern="common" -->
   <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt"
    pattern="%h %l %u %t &quot;%r&quot; %s %b" />

        </Host> -->
      3.添加:(同级位置)
     <Host name="localhost" debug="0" appBase="webapps"
                    unpackWARs="true"  xmlValidation="false" xmlNamespaceAware="false">
         <Context path="/sxzx" docBase="D:\apache-tomcat-7.0.40\webapps\sxzx"  reloadable="true"   caseSensitive="false"   debug="0"></Context>
      <Context path="/ywgl" docBase="D:\apache-tomcat-7.0.40\webapps\ywgl" reloadable="true"   caseSensitive="false"   debug="0"></Context>
     </Host>
  
      附:Host标签内的属性及值不用修改;
       只改变Context标签内的值:path:访问时候的工程名;
                             docBase:工程部署的位置;
           其他属性及值不用修改;
  
                                                         \ywgl\
   三、两个部署的项目:D:\apache-tomcat-7.0.40\webapps\sxzx\WEB-INF\web.xml中分别添加:(区别另一个项目)
    
    <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>web1.root</param-value>
          </context-param>
   
    <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>web2.root</param-value>
          </context-param>
   
   
  *四、一定注意环境变量JDK的版本 :JAVA_HOME=jdk1.6.0_11、JRE_HOME=jre6: 下发布会有启动报错,只能发布成功一个的情况;  
              JAVA_HOME=jdk1.6.0_16、JRE_HOME=jre6: 下启动一闪而过或则启动失败;
                                      JAVA_HOME=jdk1.7.0_17、JRE_HOME=jre7: 下发布成功,没有报错信息; 
   
   

posted @ 2014-05-21 14:23 半导体 阅读(1064) | 评论 (0)编辑 收藏

项管万能模板

摘要:
2011 年8 月(记住,一定要写和考试时间接近的),我作为项目经理参与了xx 省公安厅
xxxxx项目,该项目投资共500 万元人民币(一定需要写),建设工期为1年,通过该项目的建
设,实现了该省公安信息化工作的……..(自己补充完善),该项目于2012 年8 月,通过了业主
方的验收,赢得了用户的好评。本文结合作者的实际经验,以该项目为例,讨论了信息系统项
目建设过程中的xx 管理(具体根据考试题目来),主要从如下几个方面进行了阐述:(一定要
根据题目,如果说是写进度管理的过程,那就是活动定义,活动排序,资源等等----一定要和下
面正文里的提纲对应上。)------摘要就是这个格式,可以写350-400 字。
正文:
2011年8月,我作为项目经理参与了xx 省公安厅xxxxx项目,该项目投资共500万元人
民币,建设工期为1 年,通过该项目的建设,实现了该省公安信息化工作的……..(自己补充完
善),该系统采用java 语言开发,数据库采用oracle 10g,用到了什么中间件、采用什么架构,
数据库服务器、应用服务器分别采用什么??这些大家根据自己的项目去写,写个500字左右,
别太多,别太少。
由于本项目的顺利上线涉及到业务的考核,因此,在本项目中,xx 管理尤为重要,在本项
目中,我作为项目经理特别除了对其余管理领域进行克制恪守的管理外,特别对xx 管理从如
下几个方面进行了管理-----这是一个过渡段,非常重要。

结尾:(这2 个字在论文里可以不写,我这里写,是让大家好看)
经过我们团队不懈的努力,历时1 年,本项目终于于2012 年8 月,通过了业主方组织的
验收,为用户解决了什么问题,或者是达到了什么目的(根据自己的项目去写)得到了业主的
好评。本项目的成功得益于我成功的xx 管理。当然,在本项目中,还有一些不足之处,比如:
在项目的实施过程中,由于项目组2 名成员因为自身原因突然离职,导致项目的团队建设出现
一些小问题,还有,曾经由于需要购买的服务器由于连日暴雨的不可抗力导致环境搭建进度出
现些许异常(自己去想一些小问题,切忌,别出现什么大问题),不过,经过我后期的纠偏,
并没有对项目产生什么影响。在后续的学习和工作中,我将不断的充电学习,和同行进行交流,
提升自己的业务和管理水平,力争为我国信息化建设做出自己的努力。

posted @ 2014-03-27 10:47 半导体 阅读(91) | 评论 (0)编辑 收藏

spring事务配置及事务测试

方法一:
事务配置:applicatoncontext.xml
 1<!-- 配置事务管理器 -->
 2    <bean id="transactionManager"
 3        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
 4        <property name="sessionFactory">
 5            <ref local="sessionFactory" />
 6        </property>
 7    </bean>
 8    <!---->
 9    <bean id="txProxyTemplate" abstract="true"
10        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
11        <property name="transactionManager">
12            <ref bean="transactionManager" />
13        </property>
14        <property name="transactionAttributes">
15            <props>
16                <prop key="query*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
17                <prop key="find*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
18                <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
19                <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
20                <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
21                <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
22            </props>
23        </property>
24    </bean>
事务测试(BO继承事务):applicationcontext.xml
<bean id="SysJobBO" parent="txProxyTemplate">
        
<property name="target">
            
<bean
                
class="com.gzlt.sys.user.bo.impl.SysJobBOImpl">
                
<property name="commonDAO"
                    ref
="CommonDAO">
                
</property>
            
</bean>
        
</property>
    
</bean>

BOIMPL中:

    @Override
    public boolean updates(SysJob sysJob) throws Exception {
        // TODO Auto-generated method stub
        commonDAO.add(sysJob);
        sysJob.setIsLeaf("453322222222222222ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
        commonDAO.add(sysJob);
        return true;
    }

如果事务未起作用,请查看:
1、action中的方法是不是不以add,update,。。开头。
2、有可能是抛出的异常将事务舍弃了。 如果try catch   异常为 applicationException  请改为  applicationException 试试。

方法二:
 

posted @ 2014-03-26 16:46 半导体 阅读(164) | 评论 (0)编辑 收藏

映射文件配置org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():

引起问题的原因:

由Hibernate根据数据库表自动生成的"类名.hbm.xml"映射文件引起的。

首先我的表(Info)由两个字段组成,即:

int id;//主建

String name;

(自己做测试,所以就简单的建了个表)

由Hibernate生成的Info.hbm.xml中是这样写的:

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

<id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="assigned"/>
</id>

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

<id>这个是必须有的。它是用来定义实体的标识属性(对应数据库表的主键)

而我这里由于id本身就是主键,所以column的属性便是id

下面是很关键的一点<generator>,由于一时兴趣,于是找了很多资料,关于它的解释是:用于指定主键的生成策略。它的值有多,下面是转来的:

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

“assigned”
主键由外部程序负责生成,在   save()   之前指定一个。
   
“hilo”
通过hi/lo   算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
   
“seqhilo”
与hilo   类似,通过hi/lo   算法实现的主键生成机制,需要数据库中的   Sequence,适用于支持   Sequence   的数据库,如Oracle。
   
“increment”
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。
   
“identity”
采用数据库提供的主键生成机制。如DB2、SQL   Server、MySQL   中的主键生成机制。
   
“sequence”
采用数据库提供的   sequence   机制生成主键。如   Oralce   中的Sequence。
   
“native”
由   Hibernate   根据使用的数据库自行判断采用   identity、hilo、sequence   其中一种作为主键生成方式。
   
“uuid.hex”
由   Hibernate   基于128   位   UUID   算法   生成16   进制数值(编码后以长度32   的字符串表示)作为主键。
   
“uuid.string”
与uuid.hex   类似,只是生成的主键未进行编码(长度16),不能应用在   PostgreSQL   数据库中。
     
“foreign”
使用另外一个相关联的对象的标识符作为主键。

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

看了上面的介绍,再看看代码,原来是<Generator>属性设置有问题。

然后改为"identity"、"native"问题便解决。



   在Hibernate中的映射文件配置中,如果在数据库中设置一列为自动增长列,但又不是主键,则在配置时需要设置 property 节点的 "insert" 和“update” 属性为false. 即: <property column="ID" name="id" type="int" insert="false" update="false"/>

posted @ 2014-03-16 22:20 半导体 阅读(379) | 评论 (0)编辑 收藏

myeclipse编译慢的问题

删除.project配置中

1、javascript validation和jtds 选项。
  <buildCommand>
   <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
   <arguments>
   </arguments>
  </buildCommand>

2、打开myeclipse时,会提示是否加入javascriptvalidation 选择否。

再编译时,速度会快很多倍。

posted @ 2014-01-08 15:43 半导体 阅读(228) | 评论 (0)编辑 收藏

ORACLE转为sqlservr碰到的问题集

1、更改配置:application.xml

 <!-- PROXOOL连接池的设置数据源sqlserver -->
 
 <bean id="dataSource"
  class="org.logicalcobwebs.proxool.ProxoolDataSource">
  <property name="driver">
   <value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value>
  </property>
  <property name="driverUrl">
   <value>jdbc:sqlserver://127.0.0.1:1433; DatabaseName=ctts</value>
  </property>
  <property name="user">
   <value>sa</value>
  </property>
  <property name="password">
   <value>sadmin</value>
  </property>
  <property name="alias">
   <value>ctts</value>
  </property>

        <property name="maximumActiveTime" value="300000"/> 
        <property name="prototypeCount" value="0"/> 
        <property name="maximumConnectionCount" value="12000"/> 
        <property name="minimumConnectionCount" value="1"/> 
        <property name="simultaneousBuildThrottle" value="2000"/> 
        <property name="houseKeepingTestSql" value="select CURRENT_DATE"/> 
 </bean>
2、hibernate配置更改:
  <property name="dialect">
   org.hibernate.dialect.SQLServerDialect
  </property>
3、oracle字段类型为DATE,牵移到sqlserver下,会出现类型转换错误,如:

           将 nvarchar 值转换为 JDBC 数据类型 TIMESTAMP 时发生错误   
        sqlserver反映射后,date类型为:java.sql.Timestamp

         oracle反映射后,date类型为:java.util.Date    

    解决办法:方法一:oracle转换为sqlserver时,DATE类型全部转换为DATETIME.
                    方法二:oracle日期类型全部用varchr(7)  ,这样就不存在转换问题。


 

posted @ 2014-01-08 11:28 半导体 阅读(201) | 评论 (0)编辑 收藏

ROW_NUMBER() OVER函数的基本用法

ROW_NUMBER() OVER函数的基本用法

ROW_NUMBER() OVER函数的基本用法用法

 转自:http://www.cnblogs.com/icebutterfly/archive/2009/08/05/1539657.html

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
示例:
xlh           row_num
1700              1
1500              2
1085              3
710                4

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

实例:

初始化数据

create table employee (empid int ,deptid int ,salary decimal(10,2))
insert into employee values(1,10,5500.00)
insert into employee values(2,10,4500.00)
insert into employee values(3,20,1900.00)
insert into employee values(4,20,4800.00)
insert into employee values(5,40,6500.00)
insert into employee values(6,40,14500.00)
insert into employee values(7,40,44500.00)
insert into employee values(8,50,6500.00)
insert into employee values(9,50,7500.00)

数据显示为

empid       deptid      salary
----------- ----------- ---------------------------------------
1           10          5500.00
2           10          4500.00
3           20          1900.00
4           20          4800.00
5           40          6500.00
6           40          14500.00
7           40          44500.00
8           50          6500.00
9           50          7500.00

需求:根据部门分组,显示每个部门的工资等级

预期结果:

empid       deptid      salary                                  rank
----------- ----------- --------------------------------------- --------------------
1           10          5500.00                                 1
2           10          4500.00                                 2
4           20          4800.00                                 1
3           20          1900.00                                 2
7           40          44500.00                               1
6           40          14500.00                               2
5           40          6500.00                                 3
9           50          7500.00                                 1
8           50          6500.00                                 2

SQL脚本:

SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

 

转自:http://www.cnblogs.com/digjim/archive/2006/09/20/509344.html

我们知道,SQL Server 2005和SQL Server 2000 相比较,SQL Server 2005有很多新特性。这篇文章我们要讨论其中的一个新函数Row_Number()。数据库管理员和开发者已经期待这个函数很久了,现在终于等到了!


 通常,开发者和管理员在一个查询里,用临时表和列相关的子查询来计算产生行号。现在SQL Server 2005提供了一个函数,代替所有多余的代码来产生行号。

 我们假设有一个资料库[EMPLOYEETEST],资料库中有一个表[EMPLOYEE],你可以用下面的脚本来产生资料库,表和对应的数据。

 USE [MASTER]
GO

IF  EXISTS (SELECT NAME FROM SYS.DATABASES WHERE NAME = N'EMPLOYEE TEST')
DROP DATABASE [EMPLOYEE TEST]
GO
CREATE DATABASE [EMPLOYEE TEST]
GO
USE [EMPLOYEE TEST]
GO

IF  EXISTS SELECT * FROM SYS.OBJECTS HERE OBJECT_ID = OBJECT_ID(N'[DBO].[EMPLOYEE]') AND TYPE IN (N'U'))
DROP TABLE [DBO].[EMPLOYEE]
GO

CREATE TABLE EMPLOYEE (EMPID INT, FNAME VARCHAR(50),LNAME VARCHAR(50))
GO
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021110, 'MICHAEL', 'POLAND')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021110, 'MICHAEL', 'POLAND')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021115, 'JIM', 'KENNEDY')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2121000, 'JAMES', 'SMITH')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2011111, 'ADAM', 'ACKERMAN')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (3015670, 'MARTHA', 'LEDERER')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (1021710, 'MARIAH', 'MANDEZ')
GO

 我们可以用下面的脚本查询EMPLOYEE表。

 SELECT EMPID, RNAME, LNAME FROM EMPLOYEE

 这个查询的结果应该如图1.0 

2021110

MICHAEL

POLAND

2021110

MICHAEL

POLAND

2021115

JIM

KENNEDY

2121000

JAMES

SMITH

2011111

ADAM

ACKERMAN

3015670

MARTHA

LEDERER

1021710

MARIAH

MANDEZ


图1.0

 在SQL Server 2005,要根据这个表中的数据产生行号,我通常使用下面的查询。 

SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME INTO EMPLOYEE2 FROM EMPLOYEE ORDER BY EMPID

 这个查询创建了一个新的表,用identify函数来产生行号。我们用下面的查询来看看这个表的数据。 

SELECT ROWID, EMPID, FNAME, LNAME FROM EMPLOYEE2

 上面的查询结果如图1.1 

1

1021710

MARIAH

MANDEZ

2

2011111

ADAM

ACKERMAN

3

2021110

MICHAEL

POLAND

4

2021110

MICHAEL

POLAND

5

2021115

JIM

KENNEDY

6

2121000

JAMES

SMITH

7

3015670

MARTHA

LEDERER


图1.1

 这个查询结果很明显EMP=2021110的行是重复的数据。

 要删除EMPID=2021110的重复数据,我们必须在EMPLOYEE2表中删除,不能直接在EMPLOYEE中删除。

 SQL Server 2005提供了一个新的函数(Row_Number())来产生行号。我们可以使用这个新函数来删除原来表中的重复数据,只用通常的表达方式再加上Row_Number()函数。

 让我们用Row_Number()函数根据EMPID来产生ROWID。

 SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE

 上面的查询结果如图1.2 

1

1021710

MARIAH

MANDEZ

2

2011111

ADAM

ACKERMAN

3

2021110

MICHAEL

POLAND

4

2021110

MICHAEL

POLAND

5

2021115

JIM

KENNEDY

6

2121000

JAMES

SMITH

7

3015670

MARTHA

LEDERER


图1.2

 在这个结果中,我们可以区别EMPID是2021110的重复数据。

 我们可以用通用表查询表达式和Row_Numner()函数来选出重复的那行数据。

 WITH [EMPLOYEE ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)
SELECT * FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID =4

上面的查询结果如图1.3 

4

2021110

MICHAEL

POLAND


图1.3

 这一行重复的数据可以用下面这个通用表和Row_Number()函数来删除。

 WITH [EMPLOYEE ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)
DELETE FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID =4

 删除以后,我们可以用下面的查询语句看一下结果。

 SELECT * FROM EMPLOYEE

 这个查询结果如图1.4 

2021110

MICHAEL

POLAND

2021115

JIM

KENNEDY

2121000

JAMES

SMITH

2011111

ADAM

ACKERMAN

3015670

MARTHA

LEDERER

1021710

MARIAH

MANDEZ


图 1.4

 这里我们可以看到,重复的数据已经被删除了。

 总结

在这篇文章中,我们讨论了SQL Server 2005 的新特性Row_Number()函数,还有通常的表表达式,然后如何使用这两个来删除重复的行。

posted @ 2014-01-08 11:21 半导体 阅读(83) | 评论 (0)编辑 收藏

发送邮件时,报错:Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

如果你用myEclipse进行开发的话,运行时可能会出现以下的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
原因是jar包版本不统一,解决方法如下:

删除Java EE 5 Libraries/javaee.jar/mail里的包有东西.

具体方法如下:
用rar打开X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar
,然后删除mail,一切就ok了.

posted @ 2013-12-23 23:12 半导体 阅读(204) | 评论 (0)编辑 收藏

struts的html标签和html中的标签有什么区别 .

struts的html标签<html:form></html:from>和html标签<form></from>有什么区别


1、无论是struts1还是struts2的标签,都提供了他们对于验证框架的支持,给我们实现验证提供了很多方便。
struts的html标签<html:form></html:from>和Struts2的<s:form></s:form>标签是对form标签的封装,是struts框架自己定义的标签,便于和他的mvc中的form结合使用。但经过查看两个框架的源码发现,最好还是用html标签,建议少用struts标签,因为一个标签就一位一个class,那必然占用jvm的内存,造成页面加载速度缓慢。

就效果而言,他们达到的效果是一样的,struts 的html标签不能脱离动态form而独立运用。但是我们在平时的开发过程中,有的情况下并不需要struts form的校验功能,但同时希望能把页面的值保留下来,比如:查询条件的输入。所以他有他的局限性


<html:form>的三个特有作用
1.自动生成html文档的<form>标签,其focus属性还可以生成相应的JavaScript代码
2.自动获取action属性中路径所对应的scope域中的FormBean,存在则获取,不存在则创建新的,再把这个FormBean以一个特殊关键字保存在request中,以便其中的<html:xxx>获取值是使用
3.自动检查Session中是否存在Token,是则生成隐藏表单域,以防止表单的重复提交
还有些标签用起来要比普通的html标签方便的多(代码量变少了),比如html_link 、 html_optionsCollection 、 html_checkbox 、 html_multibox 等,像这些下拉列表、复选框等的回显用Struts的html标签非常容易实现,普通html也简单,但代码一大堆。

posted @ 2013-12-19 19:25 半导体 阅读(107) | 评论 (0)编辑 收藏

EL表达式语法 JSTL语法

IF表达式判断:
     <c:choose><c:when test="${param.type=='1'}">星级</c:when><c:otherwise>酒店名称</c:otherwise></c:choose>

获取LIST值:
获取一个:
${roomList[0].roomTypeName}
循环获取:
<select
              name="myOrderform.roomTypeName" id="roomTypeName"
              onChange="fuzhi(this)" isnull="2" desc="房间种类"
              style="width:110px;">

 

               <c:forEach var="rooms" items="${roomList}">
                <option value="${rooms.roomTypeName}|${rooms.lowPrice}">${rooms.roomTypeName}</option>

               </c:forEach>
</select>


 

posted @ 2013-12-14 12:44 半导体 阅读(123) | 评论 (0)编辑 收藏

取得某个文件夹的真实路径

String rootPath = ServletActionContext.getServletContext().getRealPath("/upload_files");

posted @ 2013-12-14 11:00 半导体 阅读(166) | 评论 (0)编辑 收藏

List和arrayList ,Map和HashMap的区别

 

 一个 List<Map>变量的内部数据结构

[{F_CITY_NAME=徐州, CNT=1141}, {F_CITY_NAME=镇江, CNT=577}]

一个Map变量的内部数据结构

{泰州非边界=7, 宿迁无=26, 无锡省边界=6, 常州非边界=10, 淮安地市边界=70, 南京null=21}

 


jsp页面中不能通过${list.size}取列表长度,而是
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
list
的长度是:${fn:length(list)}


List
是接口,List特性就是有序,会确保以一定的顺序保存元素.
ArrayList
是它的实现类,是一个用数组实现的List.
Map
是接口,Map特性就是根据一个对象查找对象.
HashMap
是它的实现类,HashMaphash表实现的Map,就是利用对象的hashcode(hashcode()Object的方法)进行快速散列查找.(关于散列查找,可以参看<<数据结构>>)


一般情况下,如果没有必要,推荐代码只同List,Map接口打交道.
比如:List list = new ArrayList();
这样做的原因是list就相当于是一个泛型的实现,如果想改变list的类型,只需要:
List list = new LinkedList();//LinkedList
也是List的实现类,也是ArrayList的兄弟类
这样,就不需要修改其它代码,这就是接口编程的优雅之处.
另外的例子就是,在类的方法中,如下声明:
private void doMyAction(List list){}
这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.


如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类.

PS:MAP是存在内存中,所以他的读取速度要比List快。

 

posted @ 2013-11-28 15:36 半导体 阅读(107) | 评论 (0)编辑 收藏

ServletContextListener使用详解 .

摘自:http://blog.csdn.net/zhaozheng7758/article/details/6103700
Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。

Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由 ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。

l  contextInitialized(ServletContextEvent sce) :当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。

l  contextDestroyed(ServletContextEvent sce) :当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的ServletFilter 过滤器。

下面通过两个具体的例子来介绍 ServletContextListener 的用法。

例一:在服务启动时,将数据库中的数据加载进内存,并将其赋值给一个属性名,其它的 Servlet 就可以通过 getAttribute 进行属性值的访问。有如下两个步骤:

1 ServletContext 对象是一个为整个 web 应用提供共享的内存,任何请求都可以访问里面的内容  

2 :如何实现在服务启动的时候就动态的加入到里面的内容:我们需要做的有:  

1 实现 servletContextListerner 接口 并将要共享的通过 setAttribute name,data )方法提交到内存中去  

2 )应用项目通过 getAttribute(name) 将数据取到

package ServletContextTest; 

 

import java.sql.Connection; 

import java.sql.PreparedStatement; 

import java.sql.ResultSet; 

import java.util.HashMap; 

import java.util.Map; 

 

import javax.servlet.ServletContext; 

import javax.servlet.ServletContextEvent; 

import javax.servlet.ServletContextListener; 

 

import util.ConnectTool; 

 

public class ServletContextLTest implements ServletContextListener{ 

    // 实现其中的销毁函数

    public void contextDestroyed(ServletContextEvent sce) { 

        System.out.println("this is last destroyeed");    

    } 

    // 实现其中的初始化函数,当有事件发生时即触发

    public void contextInitialized(ServletContextEvent sce) { 

        ServletContext sct=sce.getServletContext(); 

        Map<Integer,String> depts=new HashMap<Integer,String>(); 

        Connection connection=null; 

        PreparedStatement pstm=null; 

        ResultSet rs=null; 

         

        try{ 

            connection=ConnectTool.getConnection(); 

            String sql="select deptNo,dname from dept"; 

            pstm=connection.prepareStatement(sql); 

            rs=pstm.executeQuery(); 

            while(rs.next()){ 

                depts.put(rs.getInt(1), rs.getString(2)); 

            } 

            // 将所取到的值存放到一个属性键值对中

            sct.setAttribute("dept", depts); 

            System.out.println("======listener test is beginning========="); 

        }catch(Exception e){ 

            e.printStackTrace(); 

        }finally{ 

            ConnectTool.releasersc(rs, pstm, connection); 

        } 

    } 

在完成上述编码后,仍需在 web.xml 中进行如下配置,以使得该监听器可以起作用。

<listener> 

   <listener-class>ServletContextTest.ServletContextLTest</listener-class> 

</listener> 

在完成上述配置后, web 服务器在启动时,会直接加载该监听器,通过以下的应用程序就可以进行数据的访问。

package ServletContextTest; 

import java.io.IOException; 

import java.io.PrintWriter; 

import java.util.*; 

import javax.servlet.ServletContext; 

import javax.servlet.ServletException; 

import javax.servlet.http.HttpServlet; 

import javax.servlet.http.HttpServletRequest; 

import javax.servlet.http.HttpServletResponse; 

public class CreateEmployee extends HttpServlet{ 

 

    @Override 

    protected void service(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

        ServletContext sct=getServletConfig().getServletContext(); 

// 从上下文环境中通过属性名获取属性值

        Map<Integer,String> dept=(Map<Integer,String>)sct.getAttribute("dept"); 

        Set<Integer> key=dept.keySet(); 

        response.setContentType("text/html;charset=utf-8"); 

        PrintWriter out=response.getWriter(); 

        out.println("<html>"); 

        out.println("<body>"); 

        out.println("<form action='/register' action='post'>"); 

        out.println("<table alignb='center'>"); 

        out.println("<tr>"); 

        out.println("<td>"); 

        out.println("username:"); 

        out.println("</td>"); 

        out.println("<td>"); 

        out.println("<input type='text' name='username'"); 

        out.println("</tr>"); 

        out.println("<tr>"); 

        out.println("<td>"); 

        out.println("city:"); 

        out.println("</td>"); 

        out.println("<td>"); 

        out.println("<select name='dept'"); 

        for(Integer i:key){ 

            out.println("<option value='"+i+"'>"+dept.get(i)+"</option>"); 

        } 

        out.println("</select>"); 

        out.println("</td>"); 

        out.println("<tr>"); 

        out.println("</table>"); 

        out.println("</form>"); 

        out.println("</body>"); 

        out.println("</html>"); 

        out.flush(); 

    } 

例二:书写一个类用于统计当Web 应用启动后,网页被客户端访问的次数。如果重新启动Web 应用,计数器不会重新从1 开始统计访问次数,而是从上次统计的结果上进行累加。在实际应用中,往往需要统计自Web 应用被发布后网页被客户端访问的次数,这就要求当Web 应用被终止时,计数器的数值被永久存储在一个文件中或者数据库中,等到Web 应用重新启动时,先从文件或数据库中读取计数器的初始值,然后在此基础上继续计数。

向文件中写入或读取计数器的数值的功能可以由自定义的 MyServletContextListener 类来完成,它具有以下功能:

1 、在 Web 应用启动时从文件中读取计数器的数值,并把表示计数器的 Counter 对象存放到 Web 应用范围内。存放计数器的文件的路径为helloapp/count/count.txt

2 、在Web 应用终止时把Web 应用范围内的计数器的数值保存到count.txt 文件中。

package ServletContextTest; 

import javax.servlet.ServletContext; 

import javax.servlet.ServletContextEvent; 

import javax.servlet.ServletContextListener; 

public class MyServletContextListener implements ServletContextListener{

  public void contextInitialized(ServletContextEvent sce){

    System.out.println("helloapp application is Initialized.");

    // 获取 ServletContext 对象

    ServletContext context=sce.getServletContext();

    try{

       // 从文件中读取计数器的数值

       BufferedReader reader=new BufferedReader(

           new InputStreamReader(context.

           getResourceAsStream("/count/count.txt")));

       int count=Integer.parseInt(reader.readLine());

       reader.close();

       // 创建计数器对象

       Counter counter=new Counter(count);

       // 把计数器对象保存到 Web 应用范围

       context.setAttribute("counter",counter);

       } catch(IOException e) {

          e.printStackTrace();

       }

   }

   public void contextDestroyed(ServletContextEvent sce){

       System.out.println("helloapp application is Destroyed.");

       // 获取 ServletContext 对象

       ServletContext context=sce.getServletContext();

       // Web 应用范围获得计数器对象

       Counter counter=(Counter)context.getAttribute("counter");

       if(counter!=null){

       try{

          // 把计数器的数值写到 count.txt 文件中

          String filepath=context.getRealPath("/count");

          filepath=filepath+"/count.txt";

          PrintWriter pw=new PrintWriter(filepath);

          pw.println(counter.getCount());

          pw.close();

         } catch(IOException e) {

             e.printStackTrace();

         }

     }

   }

}

将用户自定义的 MyServletContextListener 监听器在 Servlet 容器进行注册, Servlet 容器会在启动或终止 Web 应用时,会调用该监听器的相关方法。在 web.xml 文件中, <listener> 元素用于向容器注册监听器:

<listener>
<listener-class>
ServletContextTest
.MyServletContextListener<listener-class />
</listener>

通过上述两个例子,即可以非常清楚的了解到 ServletContextListener 接口的使用方法及技巧。 Container 加载Web 应用程序时(例如启动 Container 之后),会呼叫contextInitialized() ,而当容器移除Web 应用程序时,会呼叫contextDestroyed () 方法。 通过 Tomcat 控制台的打印结果的先后顺序,会发现当 Web 应用启动时,Servlet 容器先调用contextInitialized() 方法,再调用lifeInitinit() 方法;当Web 应用终止时,Servlet 容器先调用lifeInitdestroy() 方法,再调用contextDestroyed() 方法。由此可见,在Web 应用的生命周期中,ServletContext 对象最早被创建,最晚被销毁。  

posted @ 2013-11-20 10:13 半导体 阅读(134) | 评论 (0)编辑 收藏

航信接口碰到的问题锦集

1、加入包:httpcore-4.2.1.jar hotelbe-pure-sdk-6.1.1.jar  date4j-1.0.0.jar包   httpclient-4.2.1.jar

重点说一下import org.apache.http.Consts;
这个类在httpcore-4.2.1.jar这个包中,以前的版本如httpcore-4.0.1.jar 没有。(找S我了)

posted @ 2013-11-15 19:20 半导体 阅读(120) | 评论 (0)编辑 收藏

配置sqlserver2000数据源

1、sqlserver2000配置加入包:msbase.jar,mssqlserver.jar,msutil.jar
用得tomcat6.0配置数据库连接池
并在tomcat的lib下加入上文件
和WebRoot\WEB-INF\lib下加入上文件
 
dbcp连接池程序包,要在同一目录下即web-inf/lib下
 
 
 
SQL Server2000的JDBC驱动程序的DriverClassName是 "com.microsoft.jdbc.sqlserver.SQLServerDriver"

SQL Server2005的JDBC驱动程序的DriverClassName是 "com.microsoft.sqlserver.jdbc.SQLServerDriver"

Tomcat *\conf\context.xml配置
 <Resource name="jdbc/pubs" auth="Container" type="javax.sql.DataSource" maxActive="100" maxldle="30"
    maxWait="10000" username="sa" password="sa" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    url="jdbc:microsoft:sqlserver://localhost:1433;tabaseName=webshop"
    factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"/>
    <ResourceLink global="jdbc/pubs" name="jdbc/pubs" type="javax.sql.DataSource"/>
并web.xml里配置
<resource-ref>
      <description>DataSource</description>
      <res-ref-name>jdbc/pubs</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
   </resource-ref>
applicationContext.xml
设置
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
     <property name="jndiName" value="java:/comp/env/jdbc/pubs"/>
 </bean>


2、SQL Error: 208, SQLState: 42S02
HBM中catalog scheme的配置问题.

posted @ 2013-11-03 11:15 半导体 阅读(279) | 评论 (0)编辑 收藏

DIV切换 标签页切换

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function aa(){
 contain.style.visibility=contain.style.visibility=="hidden"?"visible":"hidden";
}
</SCRIPT>
</HEAD>
<BODY>
<button onclick=aa()>test</button>
<div id="contain">
<iframe id="iframe1" name="iframe1" src="http://www.51js.com" style="width:400px;height:200px"></iframe>
</div>
</BODY>
</HTML>

posted @ 2013-10-31 13:37 半导体 阅读(95) | 评论 (0)编辑 收藏

连接池配置

配置连接池

 本文旨在给程序开发人员提供一个比较具体的Tomcat连接池参考方案,为了提高文章的可读性,文章前端引用了一位前辈的话,如果构成误解,请多多谅解,本文不是从商业考虑的。有问题请联系作者MSN:hpj2001(at)hotmail.com,Email:tocow(at)google.com。

连接池简介
   程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
      数据库连接池(connection pool)的工作原理:
      由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。
对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配、释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发、测试及性能调整提供依据。
一、Tomcat一般性说明
1、本压缩包内的tomcat为apache-tomcat-5.5.20,截止到2006-10-12,是www.apache.org上最新的tomcat版本。
2、Tomcat使用的端口都是默认的。两个比较重要的端口说明,shutdown port:8005;non-SSL HTTP/1.1 Connector port:8080。
3、涉及到修改的文件:
   a../ conf下server.xml、web.xml
   b../common/lib下增加ms-sql jdbc的三个jar包msbase.jar、mssqlserver.jar、msutil.jar
二、Tomcat配置连接池方案
       本文针对的是tomcat 5.5版本的连接池介绍,其它版本可能不适用。
       数据源可以配置成全局的和局部的:可以在任意Context中引用全局的数据源,在某一Context配置的数据源,不能在其它Context引用它。理解了全局和局部数据源的关系,下面就来介绍一下详细配置说明,如下:
1、编辑打开./confCatalina/localhost/gdczsam.xml可以看到:
<!--F hpj 2006-10-12 
    Defualt, we set all different Resources as Global-Resource[which defined in server.xml <GlobalNamingResources></GlobalNamingResources>], 
    and get special Resource we needed in per-web-application contexts from Global-Resource.
    otherwise,we can set Resource we needed in any special Context, all two solutions are offered.

    A.during application development set reloadable="true", when deployed production set reloadable="false"

    B.many other datebase, url and driverClassName like underside list:
      1.ms-sql       driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                     url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
加载包mssqlserver.jar、msbase.jar、msutil.jar.

      2.oracle       driverClassName="oracle.jdbc.driver.OracleDriver"
                     url="jdbc:oracle:thin:@127.0.0.1:1521:SAM_GDCZ"

      3.postgresql   driverClassName="org.postgresql.Driver"
                     url="jdbc:postgresql://127.0.0.1:5432/SAM_GDCZ"

      4.mysql        driverClassName="org.gjt.mm.mysql.Driver"[old mySql jdbc driver]
                     driverClassName="com.mysql.jdbc.Driver"
                     url="jdbc:mysql://127.0.0.1:3306/SAM_GDCZ"
-->

<Context docBase="setup directory" path="/gdczsam" reloadable="true" cookies="true" crossContext="true" privileged="true" antiResourceLocking="false" antiJARLocking="false">

<!--
    <Resource name="jdbc/mssql-SAM_GDCZ"
              auth="Container"
                type="javax.sql.DataSource"
                driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
                username="sa"
                password=""
                maxIdle="30"
                maxWait="10000"
                maxActive="100"/>
-->

<!--F hpj 2006-10-12 
    name: The name of the resource link to be created, which will be used in this web-application context environment.
    global: The name of the linked global resource in the global JNDI context.
    type: The fully qualified Java class name expected by the web application when it performs lookup for this resource link.
-->
   <ResourceLink name="mssql-SAM_GDCZ" global="jdbc/mssql-SAM_GDCZ" type="javax.sql.DataSource"/>

</Context>
         本文提供的tomcat连接池的默认配置如上述,代码的说明性很强,既采用在./ conf/server.xml配置的全局数据源,然后在指定的Context中调用的方式。
         server.xml中的数据源就是上述代码段注释的Resource节点,被包含在server.xml中的GlobalNamingResources节点中。
         其中需要注意的是,该数据源需要在./conf/web.xml中加入一段声明,如下:
    <resource-ref>
        <descrīption>DB Connection</descrīption>
        <res-ref-name>jdbc/mssql-SAM_GDCZ</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
2、第二种tomcat数据源的配置方式是本人推荐的:不在server.xml的GlobalNamingResources节点中加入Resource节点,而是对每个指定的Context配置数据源,这样结构比较清晰。采用这种方式的gdczsam.xml配置如下:
<Context docBase="setup directory" path="/gdczsam" reloadable="true" cookies="true" crossContext="true" privileged="true" antiResourceLocking="false" antiJARLocking="false">

    <Resource name="jdbc/mssql-SAM_GDCZ"
             auth="Container"
                type="javax.sql.DataSource"
                driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
                username="sa"
                password=""
                maxIdle="30"
                maxWait="10000"
                maxActive="100"/>

</Context>
3、以上两种方式,只要是不同的数据源都必须在./conf/web.xml中加入resource-ref声明。
4、产品部署时,不论使用什么方式来部署程序,都需要在./confCatalina/localhost中加入类似gdczsam.xml的文件来配置数据源。

posted @ 2013-10-26 16:39 半导体 阅读(106) | 评论 (0)编辑 收藏

Eclipse 格式化时不自动换行 Ctrl+shift+f .

Java代码

打开Eclipse的Window菜单,然后Preferences->Java->Code Style->Formatter->Edit/Show(根据不同版本可用的按钮会不一样) ->Line Wrapping->Maximum line width:由80改成800就行了。

2.Html代码

Window->Preferences->MyEclipse->Files and Editors->Html->Html Source->Line width->加个0以后保存

posted @ 2013-10-18 21:44 半导体 阅读(343) | 评论 (0)编辑 收藏

用GET方法时出现乱码的问题。URL传中文出现乱码时:。

最近遇到一个问题:用get方法传递中文有问题,用post没有问题。
问题简单的描述是这样的:
<a href="userGroup.jsp?userGroupName=<%=userGroupName%>">aa</a>
这里userGroupName是中文

在userGroup.jsp页面得到的userGroupName却是乱码。
每个页面也都有<%@ page language="java" pageEncoding="GBK" %>说明。

后来上网找了一下才知道:pageEncoding这个只对post起作用。get方法提交时,大家可以从地址栏里看到提交的参数,这是因为get方法传递是作为报文头提交的,而pageEncoding对报文头是没有作用的,所以仍然按照 iso8859-1编码,才出现了刚才的乱码问题。而post提交的是form表单的内容,pageEncoding指定了它的编码,所以他会按照指定编码传递。

问题清楚了,下面就来解决它:

由于tomcat的servlet实现中ServletRequest.setCharacterEncoding方法未对HTP报文头的内容进行解码,因此
使用HTTP的GET方法提交的数据将不能正确的解码.解决方案为修改其服务器的配置server.xml文件中对HTTP协议的
Connector配置,加上URIEncoding="GBK"属性,配置完成以后"可能"的内容为
< Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" 
disableUploadTimeout="true" URIEncoding="GBK" /> 


URL传中文出现乱码时:
问题:
如传类似这样的地址" index.jsp?ddurl="+"我们是";ddurl获得的就是乱码。
解决办法:这种传值方式相当于get传值,在传值时对他加密:
encodeURI(url);

posted @ 2013-10-17 11:47 半导体 阅读(111) | 评论 (0)编辑 收藏

数据库查询时间没有了时分秒的解决办法

数据库查询时间没有了时分秒的解决办法

转自:http://www.cnblogs.com/lidabo/archive/2013/03/08/2950107.html

    
    问题出处,公司一个项目中使用动态sql方式查询Oracle数据库,在展示时Date类型字段只展示日期,无时分秒。
    
    分析:
    
    1、众所周知Oralce的日期类型有很多种,Date ,Timestamp等。其中Date类型对用的是java.sql.Date类型,Timestamp对用的是java.sql.Timestamp类型。这两个类型均继承自java.util.Date,其中java.sql.Date是没有时分秒的大家可以查看一下javaApi
    
    2、ResultSet 的getObject(*)方法对用Date类型默认返回的是java.sql.Date
    
    3、网上很多人提供的解决方案是将数据库Date类型改为Timestamp类型,显示当中数据库类型DBA是不会允许你改动的,且Oracle中对于时分秒要求不严格的地方DBA反而是建议用Date而不用Timestamp以节省资源
    
    4、ibatis的ResultMap中对Date类型指定为Timestamp却能够正常显示
    
    经过一番思考后发现对用Date类型的字段使用rs.getTimestamp(*)即可正常显示
    
    方案二、
    
    增加服务器/Java应用的虚拟机参数:-Doracle.jdbc.V8Compatible=“true” 

posted @ 2013-10-12 15:08 半导体 阅读(198) | 评论 (0)编辑 收藏

启动参数放MAP,转换为对象,用户编码找到用户名

方法一:类转换为map
JAVA中编写类CacheManager,方法如下:
    

 public void contextInitialized(javax.servlet.ServletContextEvent arg0) {
  WebInfoDBO webInfoDBO = (WebInfoDBO) SpringContext.getBean("WebInfoDBO");
  List list = webInfoDBO.queryBySql(" select detail_id as \"detailId\", genre_id as \"genreId\",type_two as \"typeTwo\", " + "title_name as \"titleName\",is_issue  as \"isIssue\",is_hot  as \"isHot\",content  as \"content\"" + "from   (select detail_id,genre_id,type_two, title_name, is_issue,is_hot,(select content from web_content c where web_info_d.detail_id=c.detail_id and is_hot='1') content,"
    + "rank() over(partition by genre_id order by sort_code,upt_date desc) rn      from web_info_d where is_issue='1') where rn<=1", WebInfoD.class);
  for (int i = 0; i < list.size(); i++) {
   WebInfoD webInfoD = (WebInfoD) list.get(i);
   tableComent.put("webInfoD", webInfoD);
  }

 }
在JSP页面获取值方法:CacheManager:
CacheManager cm = new CacheManager();
WebInfoD webInfoD = (WebInfoD) cm.tableComent.get("webInfoD");
out.println(webInfoD.getDetailId());
out.println(cm.tableComent.get("detailId"));

方法二:类转换为map中KEY,VALUE
JAVA中:

 public void contextInitialized(javax.servlet.ServletContextEvent arg0) {
  SysDictBO sysDictBO = (SysDictBO) SpringContext.getBean("SysDictBO");
  List list = sysDictBO.queryBySql(" select TYPE_DESC_ID as \"typeDescId\", TYPE_DESC_NAME as \"typeDescName\"  from  Sys_Dict_d d,sys_dict h where h.type_id=d.type_id", SysDictD.class);
  for (int i = 0; i < list.size(); i++) {
   SysDictD sysDictD = (SysDictD) list.get(i);
   tableComent.put(sysDictD.getTypeDescId(),sysDictD.getTypeDescName());
  }

 }

JSP中:
<%@ page import="com.gzlt.framework.cache.CacheManager" %>

CacheManager cm = new CacheManager();
WebInfoD webInfoD = (WebInfoD) cm.tableComent;

out.println(cm.tableComent.get("402881c9405be55f01405c12f8240003"));


posted @ 2013-09-06 16:00 半导体 阅读(132) | 评论 (0)编辑 收藏

对象取值,无属性名称的取值。

             Object[] o = (Object[]) page.getListSum().get(0);//这里是对象
             System.out.println("==="+o[1]);


01.在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:  
02.  
03.1.查询全部字段的情况下,如"from 实体类",list中封装的对象为实体类本身,各属性都将得到填充。  
04.  
05.2.只查询一个字段,默认情况下,list中封装的是Object对象。  
06.  
07.3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。  
08.  
09.对于后两种情况,用标签遍历时不太方便,因为无法直接转换成实体类的对象。  

3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。
  
set的时候,list里面保存的是对象[]

posted @ 2013-09-03 15:26 半导体 阅读(117) | 评论 (0)编辑 收藏

判断是什么类型

.getClass().getName()

posted @ 2013-09-03 15:20 半导体 阅读(93) | 评论 (0)编辑 收藏

获取值方法

application.getRealPath("/");    获取项目根目录,如:D:\apache-tomcat-7.0.23\webapps\sxzx\
   String baseURL = request.getContextPath();
   String uri = request.getRequestURI();

posted @ 2013-08-22 17:25 半导体 阅读(81) | 评论 (0)编辑 收藏

ajax实现获取文件内容并写入

       <div id="formcontent"></div>
        <script type="text/javascript">
        //发文呈报模板
       $.get("../formfiles/export/402881c9405ba15a01405bc2f0fe000a.txt",
       function(data){//写入到对应ID
        document.getElementById("formcontent").innerHTML=data;
        });   
       </script>

posted @ 2013-08-22 16:42 半导体 阅读(112) | 评论 (0)编辑 收藏

oracle管理员身份登录

//用sys用户登录

C:\Users\Administrator>sqlplus

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 8月 19 16:25:18 2013

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

请输入用户名:  sys/sys as sysdba

//用操作系统登录:

C:\Users\Administrator>sqlplus  / as sysdba

 

posted @ 2013-08-19 16:28 半导体 阅读(183) | 评论 (0)编辑 收藏

ORACLE中常用语法

生成UUID:sys_guid()
字符转换为小写:NLS_LOWER()

查看'_"字符:instr(english_name,'_')
字符全部转换为大写:NLS_UPPER(x[,y])
首字母转换为大写:NLS_INITCAP

posted @ 2013-08-16 17:15 半导体 阅读(109) | 评论 (0)编辑 收藏

取实体类的属性名

  Map<String, String> classColumnMap = new HashMap();
  Class classType=null;
  classType = Class.forName(beanName); 
  Field allFields[]=classType.getDeclaredFields();
    for(int i=0;i<allFields.length;i++)
    {

     classColumnMap.put(allFields[i].getName(),allFields[i].getType());

    }

posted @ 2013-08-16 15:17 半导体 阅读(104) | 评论 (0)编辑 收藏

把对象传入session在JSP页面取值方法:

JAVA中:
super.getSession().put("sysobject", list);
JSP中:、
    <select id="def" name="def">
    <c:forEach var="sysobject" items="${session.sysobject }" >
      <option name="" value=" ${sysobject.englishName}" datevalue="ddd"> ${sysobject.chnName}</option>
   </c:forEach>
   </select>
或用struct标签实现:
<s:iterator value="#session.list">

posted @ 2013-08-16 10:40 半导体 阅读(134) | 评论 (0)编辑 收藏

JAVA规范写法

更新某个对象时: 
// 发布
 public String issue() throws Exception {
  String defineId = super.getRequest().getParameter("defineId");
  try {
   boolean isSuccess = false;
   // 修改
   if (defineId != null && !Utility.isEmpty(defineId)) {
    //更新某个字段时,先清空对象。
    fmDefine = new FmDefine();
    fmDefine.setDefineId(defineId);
    fmDefine.setState("已发布");
    isSuccess = fmDefineBO.update(fmDefine);
   }
   if (isSuccess) {
    super.addActionMessage("发布成功!");
   } else {
    super.addActionMessage("保存失败!");
   }
//   super.getRequest().setAttribute("isSuccess", isSuccess);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return query();
 }

posted @ 2013-08-15 15:11 半导体 阅读(117) | 评论 (0)编辑 收藏

文件上传

         FileWriter writer;
         try {
          String path = System.getProperty("user.dir")+"/../webapps/sxzx/formfiles/"+session.get("objectID")+".txt";
             writer = new FileWriter(path);
             writer.write(content);
             writer.flush();
             writer.close();
         } catch (IOException e) {
             e.printStackTrace();
         }

posted @ 2013-08-15 11:30 半导体 阅读(148) | 评论 (0)编辑 收藏

数据库最大连接数原理

1、JAVA做一个循环,每做一次事务(CRUD)加一个连接,一个连接相当于占2M内存。
50秒后自动释放。
如果超过最大连接数报错如下:
ORA-12519: TNS:no appropriate service handler found 解决  

有时候连得上数据库,有时候又连不上.

可能是数据库上当前的连接数目已经超过了它能够处理的最大值.


select count(*) from v$process --当前的连接数
select value from v$parameter where name = 'processes' --数据库允许的最大连接数
修改最大连接数:
alter system set processes = 300 scope = spfile;
重启数据库:
shutdown immediate;
startup;
--查看当前有哪些用户正在使用数据
SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;

连接数配置在:applicationcontext.xml中
另一种解决办法:直接用存储过程,一个存储过程只占一个连接。

查看当前最大连接数:
BasicDataSource dataSource = (BasicDataSource)SpringTools.getBean("dataSource");
System.out.println(dataSource.getNumActive());

posted @ 2013-08-14 17:07 半导体 阅读(157) | 评论 (0)编辑 收藏

myeclipse环境配置

当myeclipse慢时,请查看以下原因:
1、检查:.project文件,去掉<nature>org.eclipse.wst.jsdt.core.jsNature</nature>。
    或:右键项目 -> properties -> Builders 去掉JavaScript Validator 前面的勾

posted @ 2013-08-14 09:32 半导体 阅读(106) | 评论 (0)编辑 收藏

Jquery Eeay UI Validatebox 常用自定义效验

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->$.extend($.fn.validatebox.defaults.rules, {         ...  阅读全文

posted @ 2013-07-26 23:01 半导体 阅读(173) | 评论 (0)编辑 收藏

中文排序

import java.text.Collator;
import java.util.Arrays;


public class Test2 {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        String[] names ={"王飞","李明","赵六"};
        Arrays.sort(names, Collator.getInstance(java.util.Locale.CHINA));
        System.out.println(Arrays.toString(names));

    }

}

posted @ 2013-07-26 22:39 半导体 阅读(92) | 评论 (0)编辑 收藏

输出日志。myeclipse中

1、在hibernate.cfg.xml中配置如下:
  <property name="hibernate.jdbc.batch_size">0</property>
  <property name="format_sql">false</property>
  <property name="use_sql_comments">false</property>
  
  <property name="show_sql">true</property>

posted @ 2013-07-03 16:18 半导体 阅读(150) | 评论 (0)编辑 收藏

struct2.0语法

字符串条件判断:
   <s:if   test="%{#listD.genreId == '402881b73e11d5f5013e11dc118f000a'}">
数字型判断:
   <s:iterator value="list" id="listD" status="ind1">
   <s:if test="#ind1.getIndex()<=6"   >
对象的取值方法:
        <s:iterator value="page" id="list" status="ind1">
      <s:iterator value="list" id="listD" status="ind1">
        <s:if test="#ind1.getIndex()<=5"   >
         <li> <a href="#"><span
           class="news">${listD.titleName}</span> </a> <span class="right"><s:date
            name="issueDate" format="yyyy-MM-dd" /> </span>
       </s:if>
      </s:iterator>
     </s:iterator>
在一个页面重复取list对象(不要id,,var,status):
        <s:iterator value="#list">
      <s:if test="%{genreId == '402881b73e11d5f5013e11dd21ea000c'}">
       <li><a href="../opt/PortalInfoDAction_queryContent.do?detailId=${detailId}"><span class="news">${titleName}</span> </a>
        <span class="right"><s:date name="issueDate"
          format="yyyy-MM-dd" /> </span>
      </s:if>
     </s:iterator>
sql条件的取值方法:
<s:iterator value="#a19list" var="a19list" status="ind1">
           <s:if test="#ind1.getIndex()<4">
           <li>
            <a
             href="<c:url value="/web/WebHomeAction_content.do?detailId=${detailId}"/>">${titleName}</a>
           </li>
          </s:if>
         </s:iterator>

判断大小: <s:property value="sysRegisterList.size()"/>

下拉框获取值:            
<select id="radioName" name="radioName"    >
    <c:forEach var="sysobject" items="${session.sysobject }" >
      <option name="" value="${sysobject.englishNames}" typeCode="${sysobject.dictName}" >${sysobject.chnName}</option>
   </c:forEach>
   </select> 
session取值:
JAVA中:ActionContext.getContext().getSession().put("sum2", (String)sumObject[1]);
取值:${session.sum2}

在struts中用#来访问ActionContext中的对象。

posted @ 2013-05-14 17:15 半导体 阅读(105) | 评论 (0)编辑 收藏

样式表学习

1、文字太长,加省略号。
li{
  white-space:nowrap;
  text-overflow:ellipsis;
  -o-text-overflow:ellipsis; /*opera*/
  overflow: hidden;
 }

posted @ 2013-05-14 16:33 半导体 阅读(86) | 评论 (0)编辑 收藏

jerichoTab 加载完默认选中最后一个,如何让他选择第一个

第一步:

改代码吧。 改文件jquery.jerichotab.js 第205行, 原为

.animate({ 'opacity': '1', width: opts.tabWidth }, function() {

$.fn.setTabActive(curIndex);

});

直接删除205行,或注解掉205行

//$.fn.setTabActive(curIndex);
第二步:改JSP页面
     把activeTabIndex:1改为activeTabIndex:0

posted @ 2013-05-03 15:56 半导体 阅读(466) | 评论 (1)编辑 收藏

javascript常用函数 HTML常用关键

双击:ondblClick="edit_on('I104120130400011')"
单击:onclick="lightonRow(this);"


嵌入页面:<iframe  allowtransparency="true" width=420 height=330 frameborder=0 scrolling=auto src=URL></iframe>
 
           allowtransparency:代表透明景色

posted @ 2013-04-12 14:24 半导体 阅读(83) | 评论 (0)编辑 收藏

网站安全性考虑

用户输入内容 输出用 htmlspecialchars
服务端 sql过滤
xss漏洞过滤

使用工具:Acunetix Web Vulnerability Scanner 7

posted @ 2013-02-01 10:09 半导体 阅读(172) | 评论 (0)编辑 收藏

明宇报表安装

卸载客户端已经安装的插件,升级服务器上的插件到最新版本,再访问服务器上的报表下载新的插件
卸载插件方法:
如果是从服务器自动下载安装的插件:首先关闭浏览报表的浏览器窗口,重新打开一个浏览器窗口,选择浏览器的菜单:
工具-->Internet选项-->设置-->查看对象-->Ming-WebReport Viewer-->右键菜单-->删除
如果是在客户端运行安装程序安装的插件:在客户端运行 regsvr32 /u "C:\.....\MRViewer.ocx"卸载安装的插件。


升级插件到最新版本    windows7
正式版下载地址是http://www.soft2web.com/v4/MRLic/opendownload.asp,下载V3版本
解压缩以后(不需要运行安装程序),更新服务器上报表应用程序下的文件
    报表根目录下的MREngine.prop文件;
    报表根目录\Viewer\MRViewer.CAB文件;
更新以后,重启一下。
服务器上文件正确升级以后,客户端会自动下载安装新版本的插件

注意客户端需要管理员帐户登陆以后再安装浏览器插件。

windows7下   按F8  禁用数字签名驱动。

posted @ 2013-01-24 16:29 半导体 阅读(2698) | 评论 (2)编辑 收藏

获取父窗口的值

获取父窗口的名称
parent.frames["otherframe"].name
parent.frames["otherframe"].location.href
parent.frames["otherframe"].document.all.控件ID.value
获取父窗口内容:
$(parent.window.frames["frameMain"].document.body).html()
 
在body中增加内容:
当前页的body增加内容:$("body").append('4444'); 
增加父窗口代码:parent.frameContent.$(parent.frameContent.document).find("body").append('<font size="17" color="red">类别编码: </font>'); 

posted @ 2013-01-16 16:45 半导体 阅读(290) | 评论 (0)编辑 收藏

工作流表单自定义的误区

 

本人觉得写得很有道理,值得学习。
转自【IT168知识库】

表单自定义功能看似非常方便,可以不用写代码即可完成表单的开发设计,表面上看的确是减少不少开发成本,但深入研究,发现是有不少误区的。

1、              对于整体成本来讲,当表单自定义功能能满足实际客户需求的60%时,会为另外的40%需求付出多少成本。现实中所见到的表单自定义工具一般至多能满足实际客户需求的50%。一般容易实现的仅布局、字段的增减、简单的脚本控制等,但有很多诸如复杂脚本控制、自动计算、特殊逻辑验证、主从关系,复杂基础数据选择(过滤、合并)、与其它功能模块的交互等等需求,自定义工具都不能实现。最终可能带来的代价是重做,甚至推翻整个系统架构重新实现,付出成本是预计成本的2-4倍以上均有可能;

2、              表单自定义功能实现的方式一般是数据库表中预制了很多字段或者是一个表中的记录存储为 ID、字段名、值、字段类型,而且值的类型往往是字符型,这些做法给数据的查询统计及SQL优化带来的是非常大的性能损失和阻力,业务系统数据量不大的时候看不出,一旦数据业务表大到一定程度的时候,性能瓶颈就会出现。我们知道需要工作流的业务系统都是大量用户和大规模业务数据的。对于表单自定义做法,性能瓶颈是一定要考虑的;

3、              表单自定义往往实现的是一个数据实体的增、删、改,但对于一个系统来讲一个表单仅仅是一个功能点而已,这个功能点对于整个系统来讲远不是那么单纯的,有可能一个数据实体的资料分别在多个表单里进行更新和维护,自定义逻辑往往是处理不了它们之间的冲突,还有查询和统计分析,这些是需要关联很多基础数据、关联其它业务数据。自定义表单功能本身也只是从功能特性的角度去出发,对于系统复杂的实体关系、业务模式、设计模式的支持几乎为零,一个高质量系统需要的因素基本实现不了;

4、              我们企业使用表单自定义工具的时候往往已经有了很多的系统,比如HRCRM甚至ERP系统,我们很多关联数据会是来自于这些系统的数据。表单自定义工具往往无法提供高可靠性的集成方案,即使能集成也是勉强的,后续会付出很多手工同步、统计口径不一致等代价,为企业整体的信息化效果大打折扣;

5、              另外从实际的使用情况而言,我们实现一个表单自定义功能的目标往往是为了方便用户实现自己的业务逻辑,但实际上很少客户会自己去自定义这些表单。而开发人员都会热忠于实现一个表单自定义工具,但不会愿意长期去做表单的定制工作,从开发人员的成长角度来说是不利的。对于团队的管理者来说用程序员的工资去做表单配置工作也是不划算的;

6、              透过这些现象的分析,假如我们一定要去实现一个好的表单自定义工具,一定是有很多事件接口的、一定是要能支持调试的、布局一定要能有足够的细致、自定义过程中要有提供给业务人员的自动向导(比开发人员需要的向导更加傻瓜化)、一定能做到足够的优化或支持优化的实现、能支持缓存、调用程序集、从WebService获取信息、能对页面交互过程进行优化。。。。。。这些都实现后,会发现做的表单定义工具其实就是大软件公司研发的IDE开发环境,如:visual studio开发环境,我们是否有这个能力呢?

 

表单自定义工具在软件投标过程中实现快速原型有帮助,但实际应用系统还是需要用大厂商提供的开发工具进行开发,假如一个表单自定义工具真那么容易实现的话,而且那么有用的话,为什么微软、IBM等公司不去做这样的工具呢?

posted @ 2013-01-11 16:57 半导体 阅读(123) | 评论 (0)编辑 收藏

ECLIPSE插件安装,防乱码

eclipse classic 是eclipse的标准版:标准版;

Eclipse Classic的带有source

建议使用Eclipse Classic,需要插件自己安装配置即可

安装相应插件:
1.安装wtp,方便web开发
打开菜单help->Install new Software,单击“add..”按钮,弹出框的name和location都填入“http://download.eclipse.org/webtools/updates/”,等待一会,勾选“Web Tools Platform (WTP) 3.1.2”

2.安装“java decompiler”
打开菜单help->Install new Software,单击“add..”按钮,弹出框的name和location都填入“http://java.decompiler.free.fr/jd-eclipse/update”,等待一会,勾选“Java Decompiler Eclipse Plug-in”,按向导进行安装。

相关配置:
1.统一设置为utf-8编码,Window->Preferences->General->Workspace->Text file encoding->Other->UTF-8。

2.修改jsp等默认编码为utf-8,打开Window->Preferences->Web->Jsp Files,修改右面的encoding为(utf-8)。

3.统一设置为utf-8编码,Window->Preferences->General->Content Types,在右面选择“Text”,在default encoding输入“UTF-8”,点“update”按钮更新。

经过配置后,所有的新建的java、jsp、txt、html、xml、文件夹等编码都是utf-8,这样在jsp、html等文件中设定编码为utf-8,可以避免乱码。

posted @ 2012-12-06 15:10 半导体 阅读(198) | 评论 (0)编辑 收藏

JAVA中类型转换

1,Long转换为BigDecimal.
    btn.setSortCode(BigDecimal.valueOf(2l));

posted @ 2012-11-22 10:25 半导体 阅读(140) | 评论 (0)编辑 收藏

ORACLE启动与停用

一、oracle启动:把以下代码另存为批处理文件(.bat)
@echo off
@ ECHO 启动 Oracle 11g 服务
net start "OracleDBConsoleorcl"
net start "OracleOraDb11g_home1TNSListener"
net start "OracleServiceORCL"
@ ECHO 启动完毕 按任意键继续
exit

二、oracle停止:把以下代码另存为批处理文件(.bat)

@echo off
@ ECHO 停止 Oracle 11g 服务
net stop "OracleDBConsoleorcl"
net stop "OracleOraDb11g_home1TNSListener"
net stop "OracleServiceORCL"
@ ECHO 停止完毕 按任意键继续
pause
exit

posted @ 2012-11-21 10:21 半导体 阅读(130) | 评论 (0)编辑 收藏

IREPORT安装、使用

一。安装ireport,到iReport的官方网站:http://ireport.sourceforge.net/去下载。
二。安装完后制作report模板文件:
   1.新建一个文件:档案-->开启新档
   2.配置数据源:data-->连接资源来源-->new-->DataBase JDBC connection,输入名称,选择驱动,填写url.
   3.插入数据,选择data-->报表查询,在这里写要查询的sql,写好后会在field里自动生成查后的列;
    4.拖动field到detail里。这样就制作完成了。
    5.建立--->编译会在ireport的安装目录下生成.jasper结尾的文件。这就是我们需要的模板文件。
   很简单的一个报表例子。
三。写jsp文件: (偶用的是IREPORT300,包请在IREPORT300中lib里找吧)
   1。导入需要的降包:itext-1.3.1.jar,iTextAsian.jar,jasperreports-1.0.1.jar,poi-2.0-final-20040126.jar,classes12.jar。注意:不要是classes12.zip,我导入classes12.zip就是报找不到OracleDriver错误。
   2.写jsp文件:
Java代码 复制代码 收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>   
  2. <%@ page import="java.sql.*"%>   
  3. <%@ page import="java.io.*"%>   
  4. <%@ page import="net.sf.jasperreports.engine.JasperFillManager"%>   
  5. <%@ page import="net.sf.jasperreports.engine.JasperPrint"%>   
  6. <%@ page import="net.sf.jasperreports.engine.JRException"%>   
  7. <%@ page import="net.sf.jasperreports.engine.JRExporterParameter"%>   
  8. <%@ page import="net.sf.jasperreports.engine.export.JRXlsExporterParameter"%>   
  9. <%@ page import="net.sf.jasperreports.engine.export.JRXlsExporter"%>   
  10.   
  11. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  12. <html>   
  13.     <body>   
  14.   
  15.         <%   
  16.             String Name = "aa";//初始化变量   
  17.             Class.forName("oracle.jdbc.driver.OracleDriver");   
  18.             Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","lshh","lshh");   
  19.             //装载jasper文件application   
  20.             File exe_rpt = new File(application.getRealPath("/test.jasper"));   
  21.             //rowid就是iReport的变量$P{rowid}的名称   
  22.             Map parameters = new HashMap();   
  23.             parameters.put("Name", Name);   
  24.             try {   
  25.                 // fill   
  26.                 JasperPrint jasperPrint = JasperFillManager.fillReport(exe_rpt   
  27.                 .getPath(), parameters, conn);   
  28.                 // excel输出   
  29.                 ByteArrayOutputStream oStream = new ByteArrayOutputStream();   
  30.                 JRXlsExporter exporter = new JRXlsExporter();   
  31.                 exporter.setParameter(JRExporterParameter.JASPER_PRINT,   
  32.                 jasperPrint);   
  33.                 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,   
  34.                 oStream);   
  35.                 exporter.setParameter(   
  36.                         JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,   
  37.                         Boolean.TRUE); // 删除记录最下面的空行   
  38.                 exporter.setParameter(   
  39.                 JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,   
  40.                 Boolean.FALSE);// 删除多余的ColumnHeader   
  41.                 exporter.setParameter(   
  42.                 JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,   
  43.                 Boolean.FALSE);// 显示边框   
  44.                 exporter.exportReport();   
  45.   
  46.                 byte[] bytes = oStream.toByteArray();   
  47.   
  48.                 if (bytes != null && bytes.length > 0) {   
  49.                     response.reset();   
  50.                     response.setContentType("application/vnd.ms-excel");   
  51.                     response.setContentLength(bytes.length);   
  52.                     ServletOutputStream ouputStream = response   
  53.                     .getOutputStream();   
  54.                     ouputStream.write(bytes, 0, bytes.length);   
  55.                     ouputStream.flush();   
  56.                     ouputStream.close();   
  57.   
  58.                 } else {   
  59.                     out.print("bytes were null!");   
  60.                 }   
  61.                 conn.close();   
  62.             } catch (JRException ex) {   
  63.                 out.print("Jasper Output Error:" + ex.getMessage());   
  64.             }   
  65.         %>   
  66.   
  67.   
  68.     </body>   
  69. </html>  
强烈强调一句,如果你要在线显示PDF,excel直接把response.setHeader("Content-disposition", "attachment; filename="     + fileName);
改为:response.setHeader("Content-disposition","inline; filename=MyExcel.pdf");     就行了,
再强调一点,首先确定一定要安装adobe reader阅读器啊(别说,我就因为没装这个,折腾了二天,呵呵。。。)

升级处理:
需要包:iText-2.1.7.jar、iTextAsian.jar、jasperreports-5.5.0.jar、poi-3.9-20121203.jar
 

posted @ 2012-10-25 16:40 半导体 阅读(305) | 评论 (0)编辑 收藏

EL表达式

相当于request.getparameter()的EL语句:
1、 ${param.method}
2、 <s:property value="#parameters.method"/>
3、 <s:if test="%{#parameters.method[0]=='delete'}">
4、<%    String sysCode = (String)request.getSession().getAttribute("sysCode");%>
     <c:url value="/${sysCode}/LoginAction_left.do"/>

posted @ 2012-09-27 12:06 半导体 阅读(264) | 评论 (0)编辑 收藏

解决Myeclipse不能自动编译的问题

Myeclipse不能自动编译java类,造成这种状况的原因很多。以下是解决方案: 1. 确保 project->build automatically 已经被选上.这时候可以使用两种方法,一个是在未选中build automatically之前,手动编译项目文件;然后选中build automatically自动编译文件。 2. 如果选上了,也不好使, 使用这一招: project->clean..->选第2个clean select project, 勾上start build immediatelly 3.如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来class文件的情况,可以把所有包都删除,然 后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果. 4. 想删掉某个class文件重新生成,删除class文件后,但classes目录下的文件夹被其它程序打开,比如Total Commander。此时编译 也不会通过,在problems下可能会提示“con''t delete classes ……”。关掉其它程序重新编译即可。 5.还有种情况是remove掉 JRE System Library,重新导入即可编译。但是什么原因导致的还不清楚。 6.把build path中所有包都remove掉。然后又add jars,add libraries把需要的加进去,居然又开始编译了。。。 7.project->properties->java build path->source->.../WEB-INF/src的output folder不要默认,编辑让它指向../WEB-INF/classes 然后重新点击build工程即可自动编译。 8.实在不行就新建项目吧!嘿嘿

posted @ 2012-08-31 11:57 半导体 阅读(438) | 评论 (0)编辑 收藏

JQUERY1.4与jquery1.7区别

jquery1.4: $(this).attr("checked")返回当前元素的checked属性值 $(this).attr("checked", true)返回的则是当前对象 jquery1.6的用法: $(this).prop("checked")

posted @ 2012-08-29 16:24 半导体 阅读(758) | 评论 (0)编辑 收藏

jquery获取cookie值

cookie里保存的是键值对。要用JQuery里的cookie要调一下jquery.cookie.js文件。 取值跟赋值分别是 $.cookie("name"); $.cookie("name","赋值"); 具体的还有保存cookie的天数跟路径等等。 现在用cookie做一个小例子:保存皮肤颜色
red
gray
yellow
------------------------------------------------------- 引用jquery文件跟cookie文件

posted @ 2012-08-29 16:23 半导体 阅读(907) | 评论 (1)编辑 收藏

javascript 获取值

HTML页面: 获取复选框名字全为chk的对象值: function lightonRow(obj){ var tablelist=obj.parentElement;//parentElement 获取对象层次中的父对象。 var objsCheckBox=tablelist.all("chk");}

posted @ 2012-08-20 15:40 半导体 阅读(133) | 评论 (0)编辑 收藏

oracel 数据源配置 PDM反向工程

打开 Windows NT 控制面板。 双击数据源(ODBC)图标。将显示 ODBC 数据源管理器对话框。 选择系统 DSN 选项卡。(记住一定是系统DSN) 单击添加。 选择与 Oracle 数据库客户机一同安装的 ODBC 驱动程序。 单击完成。 在数据源字段中输入数据库的名称。 在描述字段中输入数据源的描述。 在服务器名称字段中输入 RDBMS 服务器的主机全限定名称。 单击确定。 PDM反向工程 文件->反向工程->数据库

posted @ 2012-08-07 16:31 半导体 阅读(194) | 评论 (0)编辑 收藏

报表工具比较

Ireport BIRT IWEB 明宇 正在研中,不知道哪个最好用!

posted @ 2012-08-01 15:02 半导体 阅读(229) | 评论 (0)编辑 收藏

javascript金额计算

在JSP页中中增加 onChange="check_sum()" /**数量*单价=金额*/ function check_sum(){ var num,item_price,item_money; num = trim(myform.num.value); item_price =trim(myform.item_price.value); if(num == "") num=0.0; alert("dd="+num); if(item_price == "") item_price=0.0; item_money=num*item_price; window.parent.record_handler.myform.item_money.value=item_money.toFixed(2); }

posted @ 2012-07-23 12:10 半导体 阅读(285) | 评论 (0)编辑 收藏

错误:java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

错误: description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
解决办法: 关于在Hibernate里使用select count(*) 返回值的问题说明 由于我使用的是Hibernate 3.2版本,经确认,这个版本已经把以前返回 Integer的改成了 Long, 因为JPA里面的返回值规定是Long, Hibernate为了兼容这个,所以修改了返回值。 如果你从Hibernate 3.0.x/3.1.x升级到最新的3.2版,一定要注意,3.2版的很多sql函数如count(), sum()的唯一返回值已经从Integer变为Long,如果不升级代码,会得到一个ClassCastException。 这个变化主要是为了兼容JPA,可以在hibernate.org的最新文档中找到说明。 Hibernate Team也提供了一个与原来兼容的解决方案: Configuration classicCfg = new Configuration(); classicCfg.addSqlFunction( "count", new ClassicCountFunction()); classicCfg.addSqlFunction( "avg", new ClassicAvgFunction()); classicCfg.addSqlFunction( "sum", new ClassicSumFunction()); SessionFactory classicSf = classicCfg.buildSessionFactory();
详见:http://topic.csdn.net/u/20080725/14/239ee1ee-c1c7-4489-b752-22e884476b61.html

posted @ 2012-07-05 18:06 半导体 阅读(1474) | 评论 (0)编辑 收藏

java单点登录的实现 --摘自 http://blog.163.com/litianyichuanqi@126/blog/static/11597944120121119163128/

     摘要: java单点登录的实现    2012-02-11 09:19:00 |  分类: Java |  标签: java  web单点登录   | 字号大中小   订阅 ...  阅读全文

posted @ 2012-06-20 17:10 半导体 阅读(842) | 评论 (1)编辑 收藏

明宇脚本语法

1,基本语法
begin
if  Frac([usp_pickbill_order."plan_num"])>0 then
  memo15.memo:= CNumber([usp_pickbill_order."plan_num"],1)+'吨 '
  else
  memo15.memo:= CNumber([usp_pickbill_order."plan_num"],1)+'吨整' ;
end

posted @ 2012-05-16 14:42 半导体 阅读(131) | 评论 (0)编辑 收藏

Visio画图时技巧

1,Visio画图时提示:
此UML形状所在的绘图页不是UML模型图的一部分
解决办法:
1、将保护里的文本勾掉,设置双击的行为为编辑图形文本.

posted @ 2012-05-05 10:50 半导体 阅读(1593) | 评论 (1)编辑 收藏

Struct 1.0语法说明:

1,满足hsClass<>2时,执行中间内容.
<logic:notEqual name="auth" property="hsClass" value="2">
 中间内容
</logic:notEqual>

posted @ 2011-12-14 11:22 半导体 阅读(128) | 评论 (0)编辑 收藏

一台机器上跑多个JBOSS

文章来源:http://dzq2008.iteye.com/blog/627078
一台机器运行多个
jboss

环境(一): jboss4·0·1sp1 JDK1.5

步骤一、

打开 $JBOSS_HOME/server/default/conf/jboss-service.xml

       1、  查找到: mbean - ServiceBindingManager ,将其注释去掉。

       2、  修改 8083 1098 1099 4444 4445 端口值。

步骤二、

打开 $JBOSS_HOME/server/default/conf/jboss-minimal.xml
      
修改 1099 1098 端口值,与“步骤一”中保持一致。

步骤三、

打开 $JBOSS_HOME/docs/examples/binding-manager/sample-bindings.xml

修改 ports-01 端口,避免出现 port 冲突的问题。

步骤四、

打开 $JBOSS_HOME/server/default/deploy/jbossweb-tomcat50.sar/server.xml
      
修改 8080 8009 8443 端口值。

步骤五、

打开 $JBOSS_HOME/server/default/deploy/jms/uil2-service.xml
      
修改 8093 端口值。

环境 (二) jboss-4.2.3.GA JDK1.5 ,配置如下:

步骤一、

打开 $JBOSS_HOME/server/default/conf/jboss-service.xml

       1、  查找到:mbean - ServiceBindingManager,将其注释去掉。

       2  修改808310981099444444454446端口值。

步骤二、

打开 $JBOSS_HOME/server/default/conf/jboss-minimal.xml
      
修改 1099 1098 端口值,与“步骤一”中保持一致。

步骤三、

打开 $JBOSS_HOME/docs/examples/binding-manager/sample-bindings.xml

修改 ports-01 端口,避免出现 port 冲突的问题。

步骤四、

打开 $JBOSS_HOME/server/default/deploy/jboss-web.deployer /server.xml
      
修改 8080 8009 8443 端口值。

步骤五、

打开 $JBOSS_HOME/server/default/deploy/jms/uil2-service.xml
      
修改 8093 端口值。

步骤六、

打开 $JBoss_home/server/default/deploy/ejb3.deployer/META-INF/jboss-service.xml

修改 3873 端口的值

JBoss 官方文档如下连接:

http://www.jboss.org/community/docs/DOC-9384

posted @ 2011-12-13 14:58 半导体 阅读(272) | 评论 (0)编辑 收藏

、The type java.lang.Object cannot be resolved.It is indirectly referenced from required.class files。

1、The type java.lang.Object cannot be resolved.It is indirectly referenced from required.class  files。 
     出现以上信息的原因是因为你装了多个版本的jre或jdk的关系。本来Eclipse在建立工程时,会自动参  照你的jre路径,但多个版本就没办法了。
  你只能手动建立…
   a. 进入window\preferences\java\Installed JREs
       1)按Add
       2)输入JRE Name, 例JDK1.5.0.03
       3)JRE home directory, 选择安装的路径
       4)按OK
  b. 进入Project\properties\Java Bulid Path
      1)Add library
      2)选JRE System Library后按Next
     3)选workplace default JRE后按finish...
2、The import javax.servlet cannot be resolved
   上面问题的解决办法如下:将servlet-api.jar(在%TOMCAT_HOME%/\common\lib目录下面可以找  到 这个文件)或者javaee.jar导入每个动态web工程。

posted @ 2011-12-05 16:05 半导体 阅读(367) | 评论 (0)编辑 收藏

sqlserver 语法归纳

1,--更改默认值:
alter table tablename_h add default ('0') for state with values

posted @ 2011-11-17 10:48 半导体 阅读(78) | 评论 (0)编辑 收藏

SVN错误问答

编号
出错信息
问题剖析
解决方案

1.
svn: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS request for 'http://svn.moon.ossxp.com/svn/test'
错误的用户名
检查登录的用户名是否输入错误

svn: 服务器发送了意外的返回值(500 Internal Server Error),在响应 “OPTIONS” 的请求 “http://svn.moon.ossxp.com/svn/test” 中

2.
svn: OPTIONS of 'http://svn.moon.ossxp.com/svn/test': authorization failed: Could not authenticate to server: rejected Basic challenge (http://svn.moon.ossxp.com)
错误的口令
用正确的用户名/口令登录

svn: 方法 OPTIONS 失败于 “http://svn.moon.ossxp.com/svn/test”: 认证失败: Could not authenticate to server: rejected Basic challenge (http://svn.moon.ossxp.com)

3.
svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://svn.moon.ossxp.com/svn/test'
用户无权限
联系管理员,为用户分配权限

svn: 服务器发送了意外的返回值(403 Forbidden),在响应 “OPTIONS” 的请求 “http://svn.moon.ossxp.com/svn/test” 中

4.
svn: OPTIONS of 'http://www.moon.ossxp.com/svn/test': 200 OK (http://www.moon.ossxp.com)
服务器地址错误,是普通Web页面,不支持SVN的 WebDAV 协议
确认输入正确的 SVN 服务地址。可以在浏览器中输入该地址进行确认

svn: 方法 OPTIONS 失败于 “http://www.moon.ossxp.com/svn/test”: 200 OK (http://www.moon.ossxp.com)

5.
The version of your subversion (client) is below 1.5.0, upgrade to 1.5.0 or above. SVN below 1.5.0 can not handle mergeinfo properly. It can mess up our automated merge tracking!
是由于客户端的软件版本低于1.5.0造成的。服务器端对客户端软件版本进行了限制,以免对合并跟踪破坏。
升级本地的Subversion客户端软件到1.5.0或以上版本。

6.
svn: This client is too old to work with working copy '.'. You need to get a newer Subversion client, or to downgrade this working copy. See http://subversion.tigris.org/faq.html#working-copy-format-change for details.
安装了多个版本的SVN客户端(TSVN,Subclipse,...),且各个客户端的版本不一致。高版本的SVN客户端会自动更新本地工作目录中的 .svn 目录下的文件格式,导致旧版本的SVN客户端不能继续访问该本地工作目录
将本机安装的所有的SVN客户端都更新到同一个大版本,以避免本地工作目录的格式不一致

svn: 此客户端对于工作副本 “.” 太旧。你需要取得更新的 Subversion 客户端,或者降级工作副本。 参见 http://subversion.tigris.org/faq.html#working-copy-format-change 以获得更详细的信息。

7.
svn: Working copy 'trunk/src' locked svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)
异常操作导致目录没有解锁。
一个简单的重现方法:在 .svn 目录下创建空的名为 lock的文件
使用命令行 "svn cleanup" 或者类似的“清理”动作删除锁定

svn: 工作副本“trunk/src”已经锁定 svn: 运行“svn cleanup”删除锁定 (输入“svn help cleanup”得到用法)

8.
日志中没有作者信息: ------------------------------------ r9 | (没有作者信息) | … ossxp.com anonymous commit test
匿名提交导致没有作者信息
检查版本库权限控制,禁止匿名提交

9.
正在发送 ... 传输文件数据.svn: 提交失败(细节如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: 提交说明至少应包含 4 个字符, 或者太简单了。
这是由于用户提交的提交说明(commit log),太过简单了。在提交时需要输入有意义的 commit log。
写有意义的提交说明,或者请求管理员更改版本库插件

10.
增加 Logger.c 传输文件数据.svn: 提交失败(细节如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: Wide character in print at /opt/svn/svnroot/myrepos/hooks/scripts/check-case-insensitive.pl line 259. 发现文件名大小写冲突: trunk/src/Logger.c 已经存在于 logger.c
管理员设置了对新增文件是否重名(只有大小写不同)的文件进行检查。文件名只有大小写不同,在Windows上进行检出会造成麻烦
不要添加重名(仅大小写不同)文件

增加 src/文件aBc.txt 传输文件数据.svn: 提交失败(细节如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: Clash: '/trunk/src/文件aBc.txt' '/trunk/src/文件abc.txt'

11.
svn: While preparing '/home/jiangxin/tmp/svn.test/trunk/src/README.txt' for commit svn: Inconsistent line ending style
提交的文件已经设置了 svn:eol-style 属性,但是该文本内的换行符有DOS的换行符CRLF,也有Unix换行符LF,不一致!
统一该文本文件内的换行符。Linux 下可以用dos2unix, unix2dos, sed等命令。Windows下可用UltraEdit 进行转换。

svn: 当为提交操作准备“/home/jiangxin/tmp/svn.test/trunk/src/README.txt”时 svn: 不一致的行结束样式

12.
svn: Failed to add file 'Makefile': an unversioned file of the same name already exists
执行更新(svn up)时报错。因为其他人新增一个文件到服务器,而本地却存在一个同名文件(未版本控制)
先将本地重名文件改名,再执行"svn up",之后再比较、合并文件。或者执行 "svn up --force"

svn: 增加文件 'Makefile' 失败: 同名未版本控制的文件已存在

13.
Adding src/Makefile svn: Commit failed (details follow): svn: File '/svn/test/trunk/src/Makefile' already exists
添加新文件,提交时报错。因为其他人已经先于我增加了该文件。
先执行更新操作("svn up"),再根据提示进行操作:合并/提交...

增加 src/Makefile svn: 提交失败(细节如下): svn: 文件“/svn/test/trunk/src/Makefile”已存在

14.
$ svn up Conflict discovered in 'Makefile'. Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: p C Makefile Updated to revision 5. Summary of conflicts: Text conflicts: 1
多人同时编辑同一个文件时,可能会遇到冲突。别人先于我提交,则当我提交时要先更新。更新可能遇到不能自动解决的冲突
使用工具进行冲突解决

$ svn up 在 “Makefile” 中发现冲突。 选择: (p) 推迟,(df) 显示全部差异,(e) 编辑, (mc) 我的版本, (tc) 他人的版本, (s) 显示全部选项: p C Makefile 更新到版本 5。 冲突概要: 正文冲突:1

15.
svn: Commit failed (details follow): svn: File 'Makefile' is out of date svn: File not found: transaction '6-d', path '/trunk/src/Makefile'
提交的文件已被他人删除
先执行更新操作("svn up"),再根据提示解决该树冲突:删除文件或继续添加...

svn: 提交失败(细节如下): svn: 文件 “Makefile” 已经过时 svn: File not found: transaction '6-c', path '/trunk/src/Makefile'

16.
svn: Commit failed (details follow): svn: File or directory '/trunk/XXX' is out of date; try updating svn: resource out of date; try updating
基于旧版本修改是不允许的
先更新("svn update"),再提交

svn: 提交失败(细节如下): svn: 文件或目录 “/trunk/XXX” 已经过时;请先更新 svn: resource out of date; try updating

17.
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent svn: At least one property change failed; repository is unchanged svn: Error setting property 'log': Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook
修改提交说明等操作属于高风险操作,因为该操作没有被版本控制,属于不可恢复的操作。缺省禁止。
请联系管理员,启用该版本的相关钩子,允许修改“版本属性”。参见 管理员钩子设置

svn: DAV 请求失败;可能是版本库的 pre-revprop-change 钩子执行失败或者不存在 svn: 至少有一个属性变更失败;版本库未改变 svn: 设置属性 “log” 出错: Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook

18.
传输文件数据.svn: 提交失败(细节如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: ==================== trunk/src/File.c : 属性 svn:mime-type 或者 svn:eol-style 没有设置 ==================== 管理员已经启用换行符属性检查。每一个新添加的文件必须 指定换行符。如果 svn:mime-type 属性为文本文件,则 必须设置 svn:eol-style 属性。 对于二进制文件,执行如下命令: svn propset svn:mime-type application/octet-stream path/of/file 对于文本文件,可以执行如下命令: svn propset svn:mime-type text/plain path/of/file svn propset svn:eol-style native path/of/file 为了避免每次添加文件手动设置,可以启用自动属性设置 ...
管理员启用了检查新文件换行符的扩展
为新增文件设置正确的 svn:mime-type 和/或 svn:eol-style 属性

posted @ 2011-08-04 15:45 半导体 阅读(409) | 评论 (0)编辑 收藏

页面导出到EXCEL

转自:http://hi.baidu.com/fableking/blog/item/39a33ac7ee78e8dcd10060d5.html
网上倒是找到了不少的资料,发现一段javascript的功能实现代码,很不错:
var elTable = document.getElementById("tb");
var oRangeRef = document.body.createTextRange();
oRangeRef.moveToElementText( elTable );
oRangeRef.execCommand( "Copy" );

var appExcel = new ActiveXObject( "Excel.Application" );
appExcel.Visible = true;
appExcel.Workbooks.Add().Worksheets.Item(1).Paste();
appExcel = null;

实现功能就是把id为tb的表格内的数据都生成为excel,我试试了可行,但是放到服务器来运行就是script error的提示,然后网上到处求问,也找了百度空间的几位高手朋友问了下,可是还是不得其法。。不过还是很感谢他们的热心帮助

没办法,我只能用别的方法来实现了,其实满喜欢上面的这个javascript的功能的,比较人性化。。可惜我黔驴技穷,无法用上它,哎!~

既然我帮客户用jsp写的程序,那么我就还是用jsp来实现这个功能吧。。

于是找到了这么一个方法:
原文出自:http://www.jsp.mlc.edu.tw/viewitem.jsp?itemid=0000000065

***************************************************************************************************
一、将网页资料以excel报表以线上浏览方式呈现
xls651.jsp原始码如下


<%@ page contentType="application/msexcel" %>
<!-- 以上这行设定本网页为excel格式的网页 -->
<%
   response.setHeader("Content-disposition","inline; filename=test1.xls");
   //以上这行设定传送到前端浏览器时的档名为test1.xls
   //就是靠这一行,让前端浏览器以为接收到一个excel档
%>
<html>
<head>
<title>Excel档案呈现方式</title>
</head>
<body>
  <table border="1" width="100%">
    <tr>
      <td>姓名</td><td>身份证字号</td><td>生日</td>
    </tr>
    <tr>
      <td>李玟</td><td>N111111111</td><td>1900/11/12</td>
    </tr>
    <tr>
      <td>梁静如</td><td>N222222222</td><td>1923/10/1</td>
    </tr>
    <tr>
      <td>张惠妹</td><td>N333333333</td><td>1934/12/18</td>
    </tr>
  </table>
</body>
</html>

二、将网页资料以excel报表以下载的方式呈现
这个jsp档和上一个差不多,只有差别在这一行:
线上浏览的方式: response.setHeader("Content-disposition","inline; filename=test1.xls");
下载的方式: response.setHeader("Content-disposition","attachment; filename=test2.xls");
附注: 1.以上纯以静态网页的方式呈现excel档,配合资料库,你便能以动态的报表方式做出excel报表了
2.完全不用安装任何元件,或只能受限於win平台,一个简单的方式解决你的报表需求
3.聪明的你,应该能举一反三,知道如何将网页资料以word的doc格式展现了吧!
(是不是只要把contentType改成"application/msword"以及filename的副档名改成.doc就可以了!)

***************************************************************************************************

posted @ 2011-08-01 17:03 半导体 阅读(289) | 评论 (1)编辑 收藏

出现乱码时

MyEclipse打开文件乱码处理。
由于文件编码不一致。解决方法:

Windows -->Preferences --> Content Types

比如我打开一个js文件是乱码。那我就在Content Types下面的列表框内找到"JavaScript"
在下边的File associations列表中选择 *.js
它默认的编码方式为:ISO-8859-1,改为GBK即可


posted @ 2011-07-28 17:42 半导体 阅读(81) | 评论 (0)编辑 收藏

sqlserver中文说明

sqlserver中文说明查询:
select P.smallid,C.ID,O.name   表名,     C.Name   列名,     P.Value   中言语描述     from sysobjects   O 
   left   outer   join   syscolumns   C   on   O.ID=C.ID     left   outer   join   sysproperties   P
  on   C.ID=P.ID   and   C.colid=P.smallid     where O.Type='U' and P.Value='tte4'

posted @ 2011-06-30 17:58 半导体 阅读(65) | 评论 (0)编辑 收藏

I/O exception

环境说明:
        在测试webservice上报时,本机与服务器程序及软件版本一致,但本机调试不报错,服务器报错信息如下:
18:45:09,110 INFO  [HttpMethodDirector] I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect
18:45:09,110 INFO  [HttpMethodDirector] Retrying request
18:45:10,673 WARN  [RequestProcessor] Unhandled Exception thrown: class org.apache.catalina.connector.ClientAbortException
只有info信息,没有error信息,首先排除是程序或配置文件引起的错误信息,
再仔细查看,发现服务器上安装了一个hp network 工具,听说这个工具可以拿来配置双卡成一卡,处理负载均衡,
本人直接在本地连接中取消了此属性,再测试上报,问题解决!

posted @ 2011-04-27 17:38 半导体 阅读(1236) | 评论 (0)编辑 收藏

JAVA语法(一)

转换为整型:Integer.valueOf()
含小数位型:BigDecimal.valueOf()
当字段过长时,需省略,但鼠标放在上面,需要显示全部(title=):
       <div align="center" title="<bean:write name="result" property="uploadMemo"/>">
         <logic:notEqual name="result" property="uploadMemo" value="">
      <bean:define id="uploadMemo" name="result" property="uploadMemo" type="java.lang.String"></bean:define> 
            <%if(uploadMemo.length()>10){ %> 
                <%=uploadMemo.substring(0,10) %>...  
            <%}else{ %>
                <%=uploadMemo%>
            <%} %>         
         </logic:notEqual>
         &nbsp;
      </div>    
防止刷新页面:

   在写用户注册或其它程序时,会出现刷新成功页面后重复提交数据的情况

   运用Struts令牌机制可以解决这儿一问题

  在注册页面中加入
  <%
  org.apache.struts.util.TokenProcessor.getInstance().saveToken(request);
   %>
  并在表单中加入HIDDEN值
  <input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="<%=session.getAttribute("org.apache.struts.action.TOKEN")%>" />

  在注册成功页面(如Struts或其实框架可以加入到action)中
  if(org.apache.struts.util.TokenProcessor.getInstance().isTokenValid(request,true)) { 
      org.apache.struts.util.TokenProcessor.getInstance().resetToken(request);
      .....
    }

posted @ 2011-04-13 16:09 半导体 阅读(128) | 评论 (0)编辑 收藏

DATA,calendar日期转换

1.Calendar和Date的转化

(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();

(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);

3,如果日期为空,默认一个日期
      cal.set(1990,01,01);

posted @ 2011-04-12 18:00 半导体 阅读(260) | 评论 (0)编辑 收藏

明宇报表支持IE8

 升级插件到最新版本
正式版下载地址是http://www.soft2web.com/MRLic,下载V3版本
解压缩以后(不需要运行安装程序),更新服务器上报表应用程序下的文件
    报表根目录下的MREngine.prop文件;
    报表根目录\Viewer\MRViewer.CAB文件;

posted @ 2011-04-11 16:53 半导体 阅读(317) | 评论 (0)编辑 收藏

明宇报表打印出来是空白

请先确认一下,点了打印按钮以后,打印机队列里是否有内容,如果有,并且打印机走纸了,但是打印出来的是白纸,请再看一下点了打印按钮以后,弹出的打
印设置对话框里,右下角的“缩放比例”设置,正确的应该是100。设置以后,保存为默认的打印参数(在工具栏上打印机按钮右面的下拉列表里设置);
如果打印队列里没有内容,就是打印机驱动的问题,需要换一个打印机驱动。

posted @ 2011-04-11 15:48 半导体 阅读(240) | 评论 (0)编辑 收藏

sqlserver连接mysql

在mssql的服务器上安装MySQL的ODBC驱动MyODBC

1、为MySQL建立一个ODBC系统数据源,例如:选择数据库为test ,数据源名称为 myDSN

2、建立链接数据库
EXEC sp_addlinkedserver  @server = 'MySQLTest', @srvproduct='MySQL', @provider = 'MSDASQL', @datasrc = 'myDSN'
GO
EXEC sp_addlinkedsrvlogin  @rmtsrvname='MySqlTest',@useself='false',@locallogin='sa',@rmtuser='mysql的用户名',@rmtpassword='mysql的密码'

3、操作数据

SELECT * FROM OPENQUERY (MySQLTest ,'select * from 表' )

posted @ 2011-03-16 10:04 半导体 阅读(281) | 评论 (0)编辑 收藏

webservice调用心得

一,设置AXIS2_HOME环境
set  AXIS2_HOME=F:\axis2-1.4.1-bin\axis2-1.5.1     
注意,如果调试不通过,请多试几个版本.最好不要用axis1 因为他不支持BPEL协议
版本分析:axis2-1.5.1    =JDK1.5   axis2.1.4.1=JDK1.4(个人经验,不代表官方意见:}
二,生成代码:
%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:808/HS_Service/Upload.asmx?wsdl -p client -s -o stub
生成文件放在C:\Documents and Settings\机器名下>
三,编写客户端代码


package client;

import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.rpc.ServiceException;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class ClientTask {
    

    
/**
     * 
@param args
     * 
@throws RemoteException 
     * 
@throws ServiceException 
     * 
@throws MalformedURLException 
     
*/

    
public static void main(String[] args) throws RemoteException, ServiceException, MalformedURLException {
        
// TODO Auto-generated method stub
        Calendar calendar = new GregorianCalendar();
        Date trialTime 
= new Date();
        calendar.setTime(trialTime);
//fly --add 
        
        ClientTask ct 
= new ClientTask();
        UploadStub us 
= new UploadStub();
        UploadStub.JX jx 
= new UploadStub.JX();
        System.out.println(
"校验用户开始.");
        ct.getLogin(
"test_admin","1");

        
        UploadStub.UploadProject uproject 
= new UploadStub.UploadProject();
  
        jx.setJX010000028(
"283333");
        jx.setJX010000001(
"上报状态");
        jx.setJX010000004(
4);
        jx.setJX010000005(
5);
        jx.setJX030305001(
"1");
        jx.setJX010000020(
new BigDecimal("20.0"));
        jx.setJX010000031(
1);
        jx.setJX010000032(
3);
        jx.setJX010000035(
"5");
        jx.setJX010000019(
new BigDecimal(1));
        jx.setJX010000014(calendar.getInstance());
//原为calendar
        jx.setJX010000017(calendar.getInstance());
        jx.setJX030308008(calendar.getInstance());
        jx.setJX010000033(
new BigDecimal(1));
        jx.setJX010000034(
new BigDecimal(1));
        jx.setJX030302005(calendar.getInstance());
        jx.setJX030303013(calendar.getInstance());
        jx.setJX030304007(calendar.getInstance());
        jx.setJX030306004(calendar.getInstance());
        System.out.println(calendar.getInstance());
        

        uproject.setJx(jx);
        us.uploadProject(uproject);
        System.out.println(
"上报状态:"+us.uploadProject(uproject).getUploadProjectResult());

    }

    
public boolean getLogin(String username,String password) throws RemoteException {
        RPCServiceClient serviceClient 
= new RPCServiceClient();  
        Options options 
= serviceClient.getOptions();  
        options.setManageSession(
true);
        
        UploadStub stub 
= new UploadStub();
        UploadStub.Login lg 
= new UploadStub.Login();
        

        
        lg.setPUserName(username);
        lg.setPPassword(password);
        stub.login(lg);  
        System.out.println(stub.login(lg).getLoginResult());
        
        
return stub.login(lg).getLoginResult();
        
    }



}

    



服务端保持状态:
        MessageContext mc  =  MessageContext.getCurrentMessageContext();
        ServiceContext sc  =  mc.getServiceContext();
客户端保持状态
        RPCServiceClient serviceClient = new RPCServiceClient(); 
        Options options = serviceClient.getOptions(); 
        options.setManageSession(true);

posted @ 2011-03-13 20:04 半导体 阅读(195) | 评论 (0)编辑 收藏

ORACLE,更换表空间

创建表空间
CREATE SMALLFILE TABLESPACE "TABLESPACE "
  DATAFILE 'e:\ORACLE\PRODUCT\10.2.0\ORADATA\TABLESPACE _user\TABLESPACE '
  SIZE 50M LOGGING EXTENT MANAGEMENT
  LOCAL SEGMENT SPACE MANAGEMENT AUTO

更换表空间:
select 'alter   table '||table_name|| ' move tablespace   new_tablespace_name;'   from all_tables where tablespace_name='old_tablespace_name';

更换索引表空间:
BLOB字段
select 'alter table ' || table_name ||
       ' MOVE tablespace tablespace _name LOB (' ||
        (select column_name
          from cols
         where table_name = dba_indexes.table_name
           and DATA_TYPE
               like '%LOB' and rownum = 1 )|| ') STORE AS (TABLESPACE tablespace _name );' from
         dba_indexes
         where tablespace_name = 'old_tablespace _name '
           and index_type = 'LOB'
      说明:用了 rownum = 1 可能有些字段无法更新,需要查看如:
         select *
          from cols   where table_name='' and data_type like '%LOB'
普通字段:
select 'alter index '||index_name||' rebuild tablespace tablespace _name;'
from dba_indexes
where  tablespace_name=''
查询在旧空间是否还存在索引
select * from dba_indexes where  tablespace_name=''  and table_owner=''

posted @ 2010-11-29 18:09 半导体 阅读(597) | 评论 (0)编辑 收藏

eclipse中outline里面函数前面的符号说明

红色代表私有,蓝色代表公有
实体方形代表方法
空心方形代表属性
图形后加字母S代表该属性或方法为static静态的,加字母F代表它为final的。
方法后加蓝色三角代表它是继承至父类的方法
断点为蓝色小圆形
蓝色旗状图形代表书签
白底上加蓝色对钩代表task 

posted @ 2010-11-25 15:53 半导体 阅读(433) | 评论 (0)编辑 收藏

WebLogic内存溢出问题配置

在weblogic/common/bin/commEnv.sh中配置

  MEM_ARGS="-Xms32m -Xmx200m -XX:MaxPermSize=128m"

  -Xms:内存初始值

  -Xmx:内存最大值(不要超过内存的80%)

  MaxPermSize:PermGen(Class和Meta存放区域)区域内存最大值。

  可调整为:

  MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"

   -XX:MaxPermSize改为256或512

posted @ 2010-11-25 14:11 半导体 阅读(1084) | 评论 (0)编辑 收藏

当JAVA不能断点调试时

首先,你有这个源文件吗?
如果有,最简单的办法是将源文件复制到工程下面的src下面去。
如果不行,你可以试着删除有你需要调试的相关的class文件,只保留源文件。
这样DEBUG就会进入到源文件中。
至于原因:如果你把源文件放在和class文件同一级目录下面。那么它会优先执行class文件。你试着想一下。class文件时java文件编译之后的.那么你在运行的时候,虚拟机要去编译java文件,而java文件在编译的时候,计算机就已经找到了class文件并执行了..
如果不在同一级目录下,这种情况一般是大工程,需要打补丁的那种,那么在执行的时候底层开发人员会设置执行的先后顺序。。比如优先执行classes下面的文件,再执行lib包里面的文件。

如果删除报错的话,就说明你的java文件路径没有被检测到啊...如果确定java文件没有放错位置..那确实有可能是你说的环境问题了..你可以在另一台机子上面测试一下。

环境变量特别要注意的是:eclipse中项目名称->右击属性->JAVA complier ->查看complier compliance level  版本,是否与当前JDK版本一致!

posted @ 2010-11-17 15:13 半导体 阅读(445) | 评论 (0)编辑 收藏

Velocity语法(VM)

  Velocity语法(VM)  
 

1.     变量

(1) 变量的定义 :

#set($name = "hello")      说明:velocity中变量是弱类型的。

当使用#set 指令时,括在双引号中的字面字符串将解析和重新解释,如下所示:

#set($directoryRoot = "www" )

#set($templateName = "index.vm" )

#set($template = "$directoryRoot/$templateName" )

$template

输出将会是: www/index.vm

注: 在velocity中使用$2.5这样的货币标识是没有问题得的,因为velocity中的变量总是以一个大写或者小写的字母开始的。

(2) 变量规范的写法

${name} ,也可以写成:$name。提倡用前面的写法。

例如:你希望通过一个变量$vice 来动态的组织一个字符串。

 Jack is a $vicemaniac.

本来变量是 $vice现在却变成了$vicemaniac,这样Veloctiy就不知道您到底要什么了。所以,应该使用规范的格式书写 : Jack is a ${vice}maniac
现在Velocity知道变量是$vice而不是$vicemaniac。

注意:当引用属性的时候不能加{}

(3) 变量的赋值: 

$name="hello"

赋值的左边必须是一个变量或者是属性引用。右边可以是下面六种类型之一:

变量引用,字面字符串,属性引用,方法引用,字面数字,数组列表。

下面的例子演示了上述的每种类型:

#set( $monkey = $bill ) ## variable reference

#set( $monkey.Friend = "monica" ) ## string

#set( $monkey.Blame = $whitehouse.Leak ) ## property reference

#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference

#set( $monkey.Number = 123 ) ##number

#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList

注意: ①如果上述例子中的右值是null, 则左值不会被赋值,也就是说会保留以前的值。

②velocity模板中未被定义的变量将被认为是一个字符串。例如:

#set($foo = "gibbous")
$moon = $foo
输出结果为:
$moon = gibbous

③ velocity 模板中不会将 reference 解释为对象的实例变量。例如: $foo.Name 将被解释为 Foo 对象的 getName ()方法,而不是 Foo 对象的 Name 实例变量。例如:

$ foo.getBar()  等同于 $ foo.Bar ;

$ data.getUser("jon") 等同于 $ data.User("jon") ;

data.getRequest().getServerName() 等同于

$ data.Request.ServerName 等同于 $ {data.Request.ServerName}

 

2.     循环

#foreach ($element in $list)
     This is $element.
     $velocityCount
#end

例子:

#set( $list = ["pine", "oak", "maple"])

#foreach ( $ element in  $ list)

$velocityCount

This is  $ element.<br>
#end

输出的结果为:

1 This is pine.
2 This is oak.
3 This is maple.

每次循环 $list 中的一个值都会赋给 $element 变量。
$list 可以是一个 Vector、 Hashtable 或者 Array 。分配给 $element 的值是一个 java 对象,并且可以通过变量被引用。例如:如果 $element t 是一个 java 的 Product 类,并且这个产品的名字可以通过调用他的 getName() 方法得到。

#foreach ( $key in $list.keySet())
Key: $key -> Value: $list.get($key) <br>
#end

提示 :velocity中大小写敏感。

Velocity还特别提供了得到循环次数的方法,$velocityCount变量的名字是Velocity默认的名字。

 

例子:

First example:
  #foreach ( $foo in [1..5] )
    $foo
  #end

  Second example:
  #foreach ( $bar in [2..-2] )
    $bar
  #end

  Third example:
  #set ( $arr = [0..1] )
  #foreach ( $i in $arr )
    $i
  #end
上面三个例子的输出结果为:
  First example :
  1 2 3 4 5

  Second example :
  2 1 0 -1 -2

  Third example :
  0 1

 

3.     条件语句

#if (condition)

#elseif (condition)

#else

#end

4.     语句的嵌套

    #foreach ($element in $list)

       ## inner foreach 内循环

       #foreach ($element in $list)

       This is $element. $velocityCount < br > inner < br >

       #end

       ## inner foreach 内循环结束

    ## outer foreach

    This is $element.

    $velocityCount < br > outer < br >

    #end

语句中也可以嵌套其他的语句,如#if…#else…#end等。

5.       注释
(1)单行注释:
  ## This is a single line comment.
(2) 多行注释:
  #*
   Thus begins a multi-line comment. Online visitors won’t
   see this text because the Velocity Templating Engine will
  ignore it.
  *#
(3)文档格式:
  #**
   This is a VTL comment block and
   may be used to store such information
  as the document author and versioning
   information:
   @version 1.1

   @author  xiao
     *#

6.     关系和逻辑操作符

Velocity 也具有逻辑AND, OR 和 NOT 操作符。

## example for AND

#if($foo && $bar)

   <strong> This AND that</strong>

#end

例子中#if() 指令仅在$foo 和$bar 斗为真的时候才为真。如果$foo 为假,则表达式也为假;并且 $bar 将不被求值。如果 $foo 为真,Velocity 模板引擎将继续检查$bar的值,如果 $bar 为真,则整个表达式为真。并且输出This AND that 。如果 $bar 为假,将没有输出因为整个表达式为假。

7.Velocity 中的宏

Velocity中的 宏我们可以理解为函数。

①宏的定义

#macro(宏的名称 $参数1 $参数2 …)

   语句体(即函数体)

#end

②宏的调用

#宏的名称($参数1 $参数2 …)

    说明:参数之间用空格隔开。

8. #stop

   停止执行模板引擎并返回,把它应用于debug是很有帮助的。

9.#include 与#parse

#include和#parse的作用 都是 引入本地文件, 为了安全的原因,被引入的本地文件只能在TEMPLATE_ROOT目录下。

区别:

(1) 与#include不同的是,#parse只能指定单个对象。而#include可以有多个

如果您需要引入多个文件,可以用逗号分隔就行:
#include ( " one.gif " , " two.txt " , " three.htm " )
在括号内可以是文件名,但是更多的时候是使用变量的:
#include ( “greetings.txt”, $seasonalstock )

(2) #include被引入文件的内容将不会通过模板引擎解析;

而#parse 引入的文件内容 Velocity 将解析其中的 velocity 语法并移交给模板,意思就是说相当与把引入的文件 copy 到文件中。

#parse是可以递归调用的,例如:如果dofoo.vm包含如下行:

Count down.<br>

#set ($count = 8)

#parse ("parsefoo.vm")

<br>All done with dofoo.vm!

那么在parsefoo.vm模板中,你可以包含如下VTL:

$count

#set($count = $count - 1)

#if ( $count > 0 )<br>

#parse( "parsefoo.vm" )

#else

<br>All done with parsefoo.vm!

#end 的显示结果为:

Count down.

8

7

6

5

4

3

2

1

0

All done with parsefoo.vm!

All done with dofoo.vm!

注意:在 vm中使用#parse来嵌套另外一个vm时的变量共享问题。如:
->a.vm 里嵌套 b.vm;
->a.vm 里定义了变量 $param;
->b.vm 里可以直接使用$param,无任何限制。
但需要特别注意的是,如果b.vm里同时定义有变量$param,则b.vm里将使用b.vm里定义的值。

10.转义字符'\'的使用

如果reference被定义,两个’\’意味着输出一个’\’,如果未被定义,刚按原样输出。如:

#set($email = "foo" )

$email

\$email

\\$email

\\\$email

输出:

foo
$email
\foo
\$email

如果 $email 未定义

$email

\$email

\\$email

\\\$email

输出:

$email
\$email
\\$email
\\$email

 

11. 内置对象
Velocity内置了一些对象,在vm模版里可以直接调用,列举如下:
$request、$response、$session,另外,模板内还可以使用 $msg内的消息工具访问 Struts 的国际化资源,达到简便实现国际化的方法。

12. 数组访问

对数组的访问在Velocity 中存在问题,因为Velocity只能访问对象的方法,而数组又是一个特殊的Array,所以虽然数组可以进行循环列举,但却不能定位访问特定位置的元素,如 strs[2],数组对固定位置元素的访问调用了Array的反射方法get(Object array, int index),而Velocity没能提供这样的访问,所以数组要么改成List等其他类容器的方式来包装,要么就通过公用Util类的方式来提供,传入数组对象和要访问的位置参数,从而达到返回所需值的目的。

 

 

示例部分

1.Hello world的示例代码:

(1)Velocity模板 (hello.html)

<!DOCTYPE HTML PUBLIC "-//W 3C //DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

</HEAD>

<BODY>

    hello,$name!                 (注意:这里的name与VelocityTest.java中的名称要一致)

</BODY>

</HTML>

(2)将velocity模板的内容转换的类(VelocityTest.java)

import java.io.File;

import java.io.FileOutputStream;

import java.io.PrintWriter;

import java.io.Writer;

import org.apache.velocity.Template;

import org.apache.velocity.VelocityContext;

import org.apache.velocity.app.Velocity;

import org.apache.velocity.app.VelocityEngine;

 

/**

 * Velocity转换

 * @author

 */

public class VelocityTest

{

    /**

     * 主函数

     * @param args

     */

    public static void main(String[] args)

 {

      //获取模板引擎

        VelocityEngine ve = new VelocityEngine();

        //模板文件所在的路径

        String path = "D:/java/jproject/regedit/webroot";      

        //设置参数

        ve.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);

//处理中文问题

        ve.setProperty(Velocity.INPUT_ENCODING,"GBK");

        ve.setProperty(Velocity.OUTPUT_ENCODING,"GBK");

        try

        {

            //初始化模板

            ve.init();

            //获取模板(hello.html)

Velocity 模板的名称
 
            Template template = ve.getTemplate("hello.html");   

            //获取上下文

            VelocityContext root = new VelocityContext();

            //把数据填入上下文

            root.put("name","world");                     (注意:与上面的对应)

//输出路径

            Strint outpath = "e:/helloworld.html";

            //输出

            Writer mywriter = new PrintWriter(new FileOutputStream(

                new File(outpath)));           

            template.merge(root, mywriter);

            mywriter.flush();          

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

}

(3)环境的搭建

在lib目录内分别copy 进:velocity-1.4.jar,velocity-dept.jar;

下载地址:http://jakarta.apache.org/velocity/

(4)运行后的结果如下:

<!DOCTYPE HTML PUBLIC "-//W 3C //DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

</HEAD>

<BODY>

hello,world!

</BODY>

</HTML>

 

2. Servlet和Velocity结合 示例

(1)example.html

  <html>
  <head><title>Velocity</title></head>
  <body bgcolor="#ffffff">
    <center>
    <h2>Welcom to Velocity!</h2>
    <i>Here's the list of people</i>
    <table cellspacing="0" cellpadding="5" width="20%" >
    <tr>
    <td bgcolor="#eeeeee" align="center">
    Names:
    </td>
    </tr>
    #foreach ($name in $theList)
    <tr>
    <td bgcolor="#eeeeee" align="center">$name</td>
    </tr>
    #end
    </table>
    </center>
  </body>
</html>

(2)servlet

package com.koal.velocity;

 

import java.io.IOException;

import java.io.FileNotFoundException;

import java.util.ArrayList;

import java.util.Properties;

import java.util.Vector;

import javax.servlet.ServletConfig;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.velocity.Template;

import org.apache.velocity.context.Context;

import org.apache.velocity.servlet.VelocityServlet;

import org.apache.velocity.app.Velocity;

import org.apache.velocity.exception.ResourceNotFoundException;

import org.apache.velocity.exception.ParseErrorException;

 

public class SampleServlet extends VelocityServlet 

{

    /**

     *   由VelocityServlet.init()调用,

     *   在此找出模版的路径

     */

    protected Properties loadConfiguration(ServletConfig config )

        throws IOException, FileNotFoundException {

        Properties p = new Properties();

        //取得路径

        String path = config.getServletContext().getRealPath("/");

        if (path == null)

        {

            System.out.println(" SampleServlet.loadConfiguration() : unable to "

                    + "get the current webapp root.  Using '/'. Please fix.");

            path = "/";

        }

        //设置路径

        p.setProperty( Velocity.FILE_RESOURCE_LOADER_PATH, path);

       

        return p;

    }

 

    /**

     *  Velocity主要的商业逻辑处理方法,由VelocityServlet自动调用

     *  @param ctx 模板上下文            

     *  @return Template 模板信息

     */  

    public Template handleRequest( HttpServletRequest request,

       HttpServletResponse response, Context ctx )

   {       

        //主要在此设置演示用的数据,开发中在此调用相应的业务处理流程,

 

        //并设置返回到页面的数据

        //待展示的列表数据
        String p1 = "第一位:LiuDong";
        String p2 = "第二位:Liang.xf";
        Vector personList = new Vector();
        //中文需要转换
        try {
            personList.addElement(new String(p1.getBytes(), "ISO-8859-1") );
            personList.addElement(new String(p2.getBytes(), "ISO-8859-1") );
        } catch (Exception e) {
            System.out.println("数据转换异常:"+e);   
        }
        //设置数据,供页面模版替换成显示的数据
        ctx.put("theList", personList );    

        //定义模板       

        Template outty = null;       

        try

        {

            //取模板

            outty =  getTemplate("example.html");           

        }

        catch( ParseErrorException pee )

        {

            System.out.println("SampleServlet: parse error for template " + pee);

        }

        catch( ResourceNotFoundException rnfe )

        {

            System.out.println("SampleServlet: template not found " + rnfe);

        }

        catch( Exception e )

        {

            System.out.println("Error " + e);

        }

       

        return outty;

}

 

(3)在web.xml中的配置:

<web-app>

<servlet> 

       <servlet-name>SampleServlet</servlet-name>

       <servlet-class>com.koal. velocity .SampleServlet</servlet-class>

</servlet>

    <servlet-mapping>

       <servlet-name>SampleServlet</servlet-name>

       <url-pattern>/SampleServlet</url-pattern>

</servlet-mapping>

</web-app>

 

(4)环境的搭建

在lib目录内分别 copy进:commons-collections.jar , velocity- 1.4.jar,velocity-dept.jar;
    Tomcat运行环境正常。
    启动Tomcat,在IE上输入: http://localhost:8080/example ,页面显示数据列表:

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mmm123lmj/archive/2009/11/19/4833620.aspx

posted @ 2010-11-16 16:43 半导体 阅读(10841) | 评论 (1)编辑 收藏

oracle语法

--增加字段
alter table table_name add (col1 type,col2 type);


ALTER TABLE TABLE_AAA ADD (STOCKMAN NUMBER(18))//添加一列

COMMENT ON COLUMN TABLE_AAA.STOCKMAN IS '管理人员' //给列添加注释
 
ALTER TABLE TABLE_AAA ADD CONSTRAINT FK_TABLE_AAA_R_TABLE_BBB_S FOREIGN KEY (STOCKMAN) REFERENCES TABLE_BBB (ID)//给列添加外键


--查看空间所有表
set pause on --分页

select * from all_tables where tablespace_name=''

--函数列表:
 row_number()  查看行号

--在oracle查询分析器中直接插入记录:

   select * from 表名 for update ;

posted @ 2010-11-03 10:11 半导体 阅读(117) | 评论 (0)编辑 收藏

WebService 客户端代码

     摘要: JDK1.4 --http 需要的包: 1、commons-httpclient-3.0.1.jar 2、commons-logging-1.1.jar 3、commons-codec-1.3.jar 程序: GetSample.java import java.io.*; import java.io.IOException; import&nbs...  阅读全文

posted @ 2010-10-21 09:00 半导体 阅读(839) | 评论 (0)编辑 收藏

sqlserver 将数据库所有表名小写字母转换成大写

1,启用对系统目录的特殊更新
    打开“企业管理器”->右击,选择“属性”->选择“服务器设置”标签->勾选"允许对系统目录直接进行修改”
2,运行命令
EXEC sp_configure 'allow updates'
 RECONFIGURE WITH OVERRIDE
go
UPDATE sysobjects SET name=upper(name) WHERE type='U'
go
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
go

posted @ 2010-10-12 09:43 半导体 阅读(720) | 评论 (0)编辑 收藏

Eclipse,tomcat的JDK配置

                                     转自:http://blog.sina.com.cn/s/blog_5673f78b0100c9pu.html
最近在使用Eclipse时碰到一个问题,就是由于Eclipse和Tomcat使用的JDK不同,一般我们都会在机器上安装最新版本的JDK,由于Eclipse中也有JDK,但是版本往往都是旧版本的,当时在一个Web Project下编译运行代码,没有问题,后来在同一个Project下继续写了一个例子,但是由于这次写的例子中使用了泛型,但是对于泛型的支持还是在比较新版本的JDK可以编译过去,因此Eclipse自带的JDK是提示错误,所以通过配置Eclipse和Tomcat默认使用相同的JDK,再重新编译Project就没问题了.

1.Eclipse配置默认JDK

   通过Eclipse->Windows->Preference->Java->Installed JREs->add...将安装的新版JDK(D:\Program Files\Java\jdk1.6.0_07)指定为Eclipse的默认JDK,再通过Eclipse->Windows->Preference->Java->compiler中将compiler compliance level 设置为6.0,至此Eclipse的JDK配置完成.

2.在Eclipse中配置Tomcat服务器和Tomcat配置默认JDK

    目前我使用的是MyEclipse,所以配置默认Tomcat在Eclipse->Windows->Preference->MyEclipse Enterprise Workbench->Servers->Tomcat 6.x(目前安装的是6.x版本),将Tomcat Server设置为Enable,在tomcat home directory点击Browse..选择Tomcat安装目录,展开...->Servers->Tomcat 6.x,选中JDK,点击Tomcat JDK Home...后面Add...添加Tomcat使用的JDK,在JRE Name 中填写jdk1.6.0(名字根据自己的习惯来定义),点击Jre Home Directory后面Browse..选择新版的JDK目录(D:\Program Files\Java\jdk1.6.0_07),至此Tomcat配置默认JDK完成。

    配置Tomcat默认使用JDK的目录也可以通过,在TOMCAT_HOME\bin\下面修改catalina.bat和setclasspath.bat文件:

    1、修改tomcat/bin/catalina.bat,增加 set JAVA_HOME=XXXXXX,其中XXXXXX为jdk 的路径,如c:\j2sdk1_4

    2、修改tomcat/bin/setclasspath.bat,同样增加 set JAVA_HOME=XXXXXX

本人也由于JDK版本太多,所以这种办法是相当可行!

posted @ 2010-10-11 09:45 半导体 阅读(906) | 评论 (0)编辑 收藏

webservice错误集锦

在Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误.....,查找的解决办法如下:

一:
It is indirectly referenced from required .class file

原因:你正要使用的类调用了另一个类,而这个类又调用了其他类,这种关系可能会有好多层。而在这个调用的过程中,某个类所在的包的缺失就会造成以上那个错误。

解决方法:导入缺失的包

二:
The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object. Fix the build path then try building this project
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files

出現以上訊息的原因是因為你裝了多個版本的jre或jdk的關係。本來Eclipse在建立專案時,會自動參照你的jre路徑,但多個版本就沒辦法了。
你只能手動建立…
1. 進入window\preferences\java\Installed JREs
1)按Add
2)輸入JRE Name, 例JDK1.5.0.03
3)JRE home directory, 選擇安裝的路徑
4)按OK
2. 進入Project\properties\Java Bulid Path
1)Add library
2)選JRE System Library後按Next
3)選workplace default JRE後按finish...

三,the type org.apache.axiom.soap.SOAPEnvelope cannot be resolved,it is indirectly referenced from required .class files
    当自动生成webservice程序时报的错误,最终解决办法为,把xis2_Codegen_Wizard_1.4.0\lib包全复制到build path下,问题全解决了.
问题:An error occurred while completing process,java.lang.reflect.InvocationTargetException
        当我用axis自动生成代码时,最后一步报的错,网上通常说的解决办法是

从AXIS2的LIB库中复制"geronimo-stax-api_1.0_spec-1.0.1.jar"和"backport-util-concurrent-3.1.jar"文件到Codegen的lib目录中,同时修改plugin.xml文件,添加

<library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
         <export name="*"/>
</library>
<library name="lib/backport-util-concurrent-3.1.jar">
        <export name="*"/>
</library>

到plugin.xml文件中,保存后重新启动Eclipse即可!


但本人用这种办法,怎么试也不行,本人用的JDK1.4,自动生成代码插件为:Axis2_Codegen_Wizard_1.3.0
所以怎么试也行不通,最后本来换了个.Axis2_Codegen_Wizard_1.4.0问题终于解决.也整了一天了!

axis所需要的包:
Axis2_Codegen_Service_1.4.0_plugins 代码自动生成   新建工程时,记得把该文件夹下lib\.jar包全部导入.

获取XML
JDOM1.0\build\jdom.jar   要加载到lib中
记住,当你用JDK1.4时,所有的包都要下载后坠为1.4的包,不然会出些稀奇古怪的错误.

webservice操作步骤:
1,把Axis2_Codegen_Service_1.4.0_plugins拷贝到plugin下.
2,打开eclipse,新建文件时选择axis.
3,选择JWDL地址.
4,生成代码,
5,调用:

     TaskServiceStub ts = new TaskServiceStub();
     TaskServiceStub.GetTaskList gt = new TaskServiceStub.GetTaskList();
     gt.setPassword(usercode);
     gt.setUsercode(password);
     String sxml = ts.GetTaskList(gt).getGetTaskListResult();
四,java.net.SocketException: Software caused connection abort: socket write error
     at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:126)
这个问题,我一直找不到答案,希望各位高手能告诉我.

posted @ 2010-09-30 17:01 半导体 阅读(341) | 评论 (0)编辑 收藏

SQL SERVER 企业管理器 MMC 无法创建管理单元

SQL SERVER 企业管理器 MMC 无法创建管理单元 收藏
本人系统2003 server,安装了SQL Server 2000 SP4,然后安装了Microsoft SQL Server 2005。後因系统太慢,卸载SQL SERVER2005,结果在打开 SQLServer2000的 企业管理器,收到以下错误信息:MMC创建无法管理单元。到网上寻找了以后,解决方法如下:

1. [开始]-->[运行] regedit   回车
2. 找到以下注册表子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup
3. 右键单击 ClientSetup 注册表子项, [新建]-->[字串值]。
4. 重命名注册表子项,创建 SqlPath , 然后按 Enter。
5. 双击, SqlPath 注册表子项, 然后键入“C:\Program Files\Microsoft SQL Server\80\Tools” 在数值数据框中。
6. 单击[确定],然后关闭注册表编辑器。
7.   [开始]-->[运行]   cmd,输入 regsvr32 "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\sqlmmc.dll"

posted @ 2010-09-29 22:49 半导体 阅读(980) | 评论 (1)编辑 收藏

oracle,删除所有表

1、

select   'Drop   table   '||table_name||';'    
        from   all_tables  
        where   owner='要删除的用户名(注意要大写)';  

2、

删除所有表


以用户test为例

for example:

declare
cursor cur1 is select table_name from dba_tables where owner='TEST';
begin
  for cur2 in cur1 loop
    execute immediate 'drop table test.'||cur2.table_name;
  end loop;
end;

3、这个删除当前用户的所有对象(表、视图、触发器、存储过程、函数)

    没试过

DECLARE
TYPE name_list IS TABLE OF VARCHAR2(40);
TYPE type_list IS TABLE OF VARCHAR2(20);

Tab_name name_list:=name_list();
Tab_type type_list:=type_list();

sql_str VARCHAR2(500);
BEGIN
sql_str := 'select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in(''INDEX'',''LOB'') order by uo.object_type desc';
EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;

FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
sql_str := 'DROP ' || Tab_type(i) || ' ' || Tab_name(i);
EXECUTE IMMEDIATE sql_str;
END LOOP;
END;


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wengyupeng/archive/2008/08/07/2781748.aspx


以上方法本人试过,在sqlplus下最好用的删除,还原方法是:
把删除表,写成脚本:
  SET HEAD OFF

  SPOOL c:\drop_tables.sql

  select 'drop table '||table_name||';' from user_tables;

  spool off;

  @c:\drop_tables.sql;
  sql >@drop_tables.sql

然后再还原数据。
imp username/username@ORCL fromuser=username touser=username file=username.dmp  tablespaces=tablespaces


posted @ 2010-09-28 16:02 半导体 阅读(1541) | 评论 (1)编辑 收藏

解决oracle表被锁的问题

查看oracle数据库那些表被锁,用下面SQL

  select sess.sid,
         sess.serial#,
         lo.oracle_username,
         lo.os_user_name,
         ao.object_name,
         lo.locked_mode
   from  v$locked_object lo,dba_objects ao,v$session sess
  where  ao.object_id = lo.object_id
    and  lo.session_id = sess.sid;

杀掉锁表进程:
如有记录則表示有lock,記錄下SID和serial# ,將記錄的ID替換下面的738,1429,即可解除LOCK
alter system kill session '245,560';

posted @ 2010-09-28 14:28 半导体 阅读(272) | 评论 (0)编辑 收藏

webservice相关下载

http://blog.csdn.net/luo_yifan/archive/2010/07/08/5721783.aspx

posted @ 2010-09-27 22:11 半导体 阅读(148) | 评论 (0)编辑 收藏

license错误解决办法

       因为安装oracle前,需要添加一个Microsoft Loopback Adapter连接,添加后,我系统里绑定的网卡密钥也不能使用了,开始以为重新生成新的密钥就行了,
可是生成新的密钥后,还是报license错误,最后的解决办法为更改Microsoft Loopback Adapter连接物理地址.

posted @ 2010-09-26 14:06 半导体 阅读(106) | 评论 (0)编辑 收藏

ORACLE 错误集

 1,报错内容:
     More than one row with the given identifier was found: 2468BDC50182F9266E2AB32D9F7A78DD, for class: com.ot.opf.org.model.DepartmentVO

     原因:表ID重复 ,查看是否重复导入.

2,报错内容:
IMP-00003: 遇到 ORACLE 错误 959
ORA-00959: 表空间 'XXXX' 不存在
解决办法:在网上查了很多解决办法,主要是由于BLOB字段引起,但唯触能解决问题的办法是:
                 先建表结构,再导入数据,导入语句为:
                 imp user/password@ORCL fromuser=user touser=user file=databse.dmp IGNORE=y tables=表名
3:错误信息:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01653: 表 SYS.AUD$ 无法通过 128 (在表空间 SYSTEM 中) 扩展
ORA-02002: 写入审计线索时出错
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01653: 表 SYS.AUD$ 无法通过 128 (在表空间 SYSTEM 中) 扩展
解决办法:

----查询所有表空间使用情况---
使用DBA权限登陆
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC;

表名                 表空间大小(M) 已使用空间(M) 使用比      空闲空间(M)  最大块(M)
-------------------- ------------- ------------- ------- ----------- ----------
SYSTEM                    33267.98      32268.67   99.90       1.31        0.97
SDE                       32767.98      32711.67   99.83       56.31          1
SYSAUX                      916.69        866.31   94.50       50.38      41.69
USERS                            5          1.37   27.40        3.63       3.63
UNDOTBS1                      1570        134.25    8.55     1435.75       1426

解决

1、为表空间增加自动扩展

SQL> alter database datafile 'D:\app\Administrator\oradata\webdb\system01.dbf' AUTOEXTEND ON NEXT 50
M MAXSIZE UNLIMITED;

数据库已更改。

此方法在此是行不通的,因为SYSTEM的表空间已经到达了极限值,不能通过增长的方式改变。

2、为SYSTEM表空间增加一个数据文件SYSTEM02.DBF

SQL> ALTER TABLESPACE "SYSTEM" ADD DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\WEBDB\SYSTEM02.DBF' SIZE 5
00M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;

表空间已更改。

问题解决.

查看表空间是否具有自动扩展的能力的SQL
SELECT T.TABLESPACE_NAME,D.FILE_NAME,
D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS
FROM DBA_TABLESPACES T,DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME,FILE_NAME;

posted @ 2010-09-23 22:00 半导体 阅读(729) | 评论 (0)编辑 收藏

從Oracle去連結SQL Server

http://mis.im.tku.edu.tw/~xman13a/oracle/data/ora_1.htm

posted @ 2010-09-22 22:32 半导体 阅读(92) | 评论 (0)编辑 收藏

oracle数据库还原,如何将dmp文件还原到oralce库

来原:http://blog.csdn.net/sunbingzibo/archive/2007/06/15/1653794.aspx
最近用到从oracle的dmp文件中还原数据
由于没有这方面的资料,在网上搜集了一些,相信有以下这些资料,我们可以成功地将dmp文件用命令行的方式还原回去


在这里我用的是oracle10g的版本,我的机器是512内存的,运行oracle的web管理程序有一些困难,所以我选择通过命令行的方式,
以下我的安装完成后,oracle给出的报告


Enterprise Manager Database Control URL - (orcl) :
http://localhost:1158/em


数据库配置文件已经安装到
E:\oracle\product\10.2.0,


同时其他选定的安装组件也已经安装到
E:\oracle\product\10.2.0\db_1。


iSQL*Plus URL 为:
http://localhost:5560/isqlplus


iSQL*Plus DBA URL 为:
http://localhost:5560/isqlplus/dba

下面我们来看一看如何来完成这一任务

第一,启动服务,(如果数据库处于启动状态,那么略过这一步)

打开命令行执行以下语句
net start OracleServiceORCL
net start  OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus

 
  以上方式是在windows服务中启动服务,当windows服务不能启动数据库实例的时候,应用以下的语句
  set oracle_sid=orcl
  oradim -startup -sid orcl

  sqlplus internal/oracle
  startup
 

第二清理以前还原过的痕迹,如果我们在数据库曾经还原过,我们先来清理一下,痕迹,
    //删除用户
    drop user xxxx cascade;
    //删除表空间
    drop tablespace xxxx;

DROP TABLESPACE <tablespace name> INCLUDING CONTENTS;


    //删除数据库文件
    e:\xxxxxx.dbf


第三,接下来,准备工作做好后,我们就可以开始还原了
//创建用户
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE  USERS TEMPORARY TABLESPACE TEMP
 
//给予用户权限
grant connect,resource,dba to xxxx
 

//创建表空间,并指定文件名,和大小
CREATE SMALLFILE TABLESPACE "xxxx" DATAFILE 'E:\ORADATA\ORCL\xxxx.DBF'
 SIZE 100M
 AUTOEXTEND ON NEXT 100M
 MAXSIZE UNLIMITED
 LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

//执行给予权限的脚本grant.txt,将权限给予刚才创建的用户
//给予权限
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO xxxx


//开始导入(完全导入),file:dmp文件所在的位置, ignore:因为有的表已经存在,对该表就不进行导入。
   在后面加上 ignore=y 。指定log文件 log=e:\log.txt
imp user/pass@orcl full=y file=e:\xxx.dmp ignore=y log=e:\log.txt

//当我们不需要完整的还原数据库的时候,我们可以单独地还原某个特定的表
//---------------------------------------------------------------------------
imp user/pass@datbase file=e:\xxx.dmp ignore=y log=e:\log.txt tables=(xxxx)
imp user/pass@database file=e:\xxx.dmp ignore=y log=e:\log2.txt tables=(xxxx)
//---------------------------------------------------------------------------

//做到这里我们就已经完成了,数据库的还原工作,下面我们就可以打开isqlplus查看表中的数据了
 
select * from ***
 

第四我们来看一下,对oracle常用的操作命令
1)查看表空间的属性
 select tablespace_name,extent_management,allocation_type from dba_tablespaces


2)查找一个表的列,及这一列的列名,数据类型
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where TABLE_NAME='xxxx'

 
3)查找表空间中的用户表
 select * from all_tables where owner='xxx' order by table_name desc

4)在指定用户下,的表的数量
 select count(*) from user_tab_columns
 

5)查看数据库中的表名,表列,所有列
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns order by table_name desc

6)查看用户ZBFC的所有的表名及表存放的表空间
 select table_name,tablespace_name from all_tables where owner='xxxx' order by table_name desc
7)生成删除表的文本
select 'Drop   table '||table_name||';' from all_tables where owner="ZBFC";

8)删除表级联删除
drop table table_name [cascade constraints];

9)查找表中的列
select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where column_name like '%'||'地'||'%' order by table_name

desc
 

10)查看数据库的临时空间
select tablespace_name,EXTENT_SIZE,current_users,total_extents,used_extents,MAX_SIZE,free_extents from v$sort_segment;

 http://download1.csdn.net/down3/20070615/15202338310.txt


作者在导入的过程中,还遇到了一个错误,就是数据违反了唯一性约束,数据库拒绝了数据
IMP-00019: 由于 ORACLE 的 1 错误而拒绝行
在网上看到有人说,这是字符集的原因,所以我就新建了一个数据库,将字符集改成了ZHS16GBK这样,从新导了一次,结果就成功了

 下面是grant.txt脚本

posted @ 2010-09-19 14:42 半导体 阅读(476) | 评论 (0)编辑 收藏

oracle安装注意事项

首先需配置:
  控制面板->添加硬件->是,我也经连接了此硬件->添加新硬件设备->安装我手动列表选择硬件(高级)->网络适配器->厂商:Microsoft 网卡:Microsoft Loopback Adapter 然后就行了。操作之后你会发现你的网上邻居里面又两个网络连接。选择新建立的那个网络连接  随便为它配个IP地址就行了。
否则会出现如下错误,如果继续下去,安装会失败:
        正在检查网络配置需求...   检查完成。此次检查的总体结果为: 未执行 <<<<   建议案: orcle支持在具有 DHCP 分配的 IP 地址的系统上进行安装。但在安装之前,   必须将 Microsoft LoopBack Adapter 配置为系统的主网络适配器。  有关在配置有 DHCP 的系统上安装软件的详细信息, 请参阅 Installation Guide。 
        特别要注意,可能有些人第一次添加了Loopback Adapter ,再第二次重装时,还会报"启动Database control时出错",这时请查用ipconfig -all 查看第一个本地连接是否为你刚添加的硬件,如果不是,请禁用,再重新添加Loopback Adapter.
数据库名orcl需大写.


测试地址:
http://lenovo-3e3b86e5:1158/em/console/logon/logon

posted @ 2010-09-15 17:17 半导体 阅读(126) | 评论 (0)编辑 收藏

当myeclipse不能编译时

      window->prefrences=>general标签->workspace选项->勾选 save automaticallybefore build 勾选后,记得重启哦.
   如果这样还不行,请查看
      window->prefrences=>JAVA标签->complier选项->error改为警告

posted @ 2010-09-09 12:05 半导体 阅读(209) | 评论 (0)编辑 收藏

什么是BIEE

BIEE作为Oracle的新的商业智能平台企业版,起源于Oracle所收购的 Siebel公司,BIEE原来叫做Siebel Analytic,但是Siebel也不是它的发明者,它是Siebel在2001年收购的另一个公司叫nQuire software的产品,这个从它的配置文件的名称就可以看出来(NQSConfig,还一直保留着nQuire software的痕迹)。但是这个产品无论是在Siebel还是在Oracle都得到了发扬光大,我的理解是,也许它不一定是最好的BI工具,但是却是 一个非常有创造力的工具,它对于物理层,逻辑层,展现层的理解和定义创造了一个非常简洁而清晰的数据模型,使用这个数据模型可以完整地连接企业内各个异构 数据源和前台的业务使用人员,使商业智能真正能够在企业范围内得到大规模部署和使用:就是报表的“开发”以一种非常容易的方式交还给业务人员,他们就可以 随时产生自己所需要的智能数据报表,而不是把需求再提交给开发人员,而开发人员,在定义好了商业智能的元数据之后,就可以避免对业务人员的连续不断的需求 疲于应付了

posted @ 2010-08-22 22:33 半导体 阅读(264) | 评论 (0)编辑 收藏

单击日期选择框,弹出空白的处理

IE选项->自定义级别->允许Scriptlet

posted @ 2010-08-12 11:41 半导体 阅读(740) | 评论 (0)编辑 收藏

JAVA环境变更配置

CLASSPATH
.;%JAVA_HOME%\BIN;
JAVA_HOME
C:\Program Files\Java\jdk1.5.0_04
JBOSS_HOME
D:\hsweb\jboss-4.0.2;
Path
.;%JAVA_HOME%\bin;
myeclipse环境配置:
选择项目->右击->属性->编译->JRE system中JDK版本更换。
选择项目->右击->属性-》java compiler->java compliler level:选择JDK版本.
window菜单->属性(参数)->java->compiler->java compliler level:选择JDK版本.
记住哦,JDK版本不对,问题很大的哦!

posted @ 2010-03-16 17:21 半导体 阅读(209) | 评论 (0)编辑 收藏

Undefined exploded archive location 错误的解决方法_ ECLIPSE中部署工程

解决方法:
1.在工程目录下的.mymetadata文件中可能webrootdir被改无效了(把下面内容拷到你的.mymetadate文件中的相应位置上);或者有可能少了这context-root这个属性;添加上这个属性即可,内容如下:
context-root="/上面的name属性值"
2.关掉Eclipse,再启动Eclipse,接着发布工程,发布成功!

.mymetadata文件
<?xml version="1.0" encoding="UTF-8"?>
<project-module
type="WEB"
name="myweb"
id="myeclipse.1202968712015"
context-root="/myweb" j2ee-spec="1.4"
archive="personnel.war">
<attributes>
<attribute name="webrootdir" value="WebRoot" />
</attributes>
</project-module>

posted @ 2010-03-16 16:42 半导体 阅读(266) | 评论 (0)编辑 收藏

Sturts tag 中logic:present 和logic:empty 的区别

logic:present 和 logic:empty他们的用法大致相同,唯一的不同点是:两者在对空字符串的处理上存在着不同。


下面为index.jsp中的代码:

 1 <logic:notPresent name="users">
 2  notpresent
 3 </logic:notPresent>
 4 <logic:notEmpty name="users">
 5  notempty
 6 </logic:notEmpty>
 7 <logic:empty name="users">
 8  empty
 9 </logic:empty>
10 <logic:present name="users">
11  present
12 </logic:present>

当第一次访问该JSP的时候,由于users没有定义,并且也不在page,request,session,application任何一个作用域中,因此输出的结果为notpresent,empty。

下面我们增加一个action,让他在index.jsp之前执行,然后再跳转到index.jsp中,同时在该action的execute方法中增加如下代码:
 
1String userName = "";
2request.setAttribute("users", userName);
3return new ActionForward("/index.jsp");
4 这里将userName保存在request中,key为users,再将请求转发至index.jsp中,但是userName的值为一个空字符串,转发过后,输出的值为:empty,present

这里我们再做一次改动,将action的execute方法中的代码改为:

1String userName = null;
2request.setAttribute("users", userName);
3return new ActionForward("/hello.jsp");
4 不同的是userName 不再为空字符串了,而是null值,当转发至index.jsp后,输出的值为:notpresent,empty 。

对比这几次改动,我们可以得出结论:

对于没有在page,request,session,application中定义或者是没有分配内存空间(null值)的变量,这两个标记处理的方法是一致的,都会认为此变量不存在(notpresent)或者为空(empty)。而对于空字符串""值,他们的处理就不一样了,logic:present 标记认为空字符串仍然是存在的,也就是说,只要是引用了一块内存空间的变量,logic:present 就会返回present ;而logic:empty则认为空字符串仍然为空,由此得出,在logic:empty看来,变量不仅仅要引用一块内存空间,而且该地址空间的值不能为空字符串,否则都认为该变量为空,都会返回empty

posted @ 2010-01-12 10:32 半导体 阅读(236) | 评论 (0)编辑 收藏

MyEclipse 打开Struts配置文件时出错的终级解决办法

错误提示:
org.eclipse.ui.PartInitException: Project newsjq is not configured as a MyEclipse Web-Struts Project. Therefore the MyEclipse Struts Editor may not be used with struts-config.xml. The default XML Editor has been used to open the file instead
解决办法:
在.project文件里少了一行代码<nature>com.genuitec.eclipse.cross.easystruts.eclipse.easystrutsnature</nature>,把这个加上去,就OK 了.

posted @ 2010-01-11 11:16 半导体 阅读(187) | 评论 (0)编辑 收藏

"字符串分割

<script language="javascript">
str="2,2,3,5,6,6"; //这是一字符串
var strs= new Array(); //定义一数组
strs=str.split(","); //字符分割
for (i=0;i<strs.length ;i++ )
{
document.write(strs[i]+"<br/>"); //分割后的字符输出
}
</script>

 

posted @ 2010-01-05 10:01 半导体 阅读(112) | 评论 (0)编辑 收藏

myeclipse性能提升技巧,javaw.exe为何不断地占用CPU资源

      myeclipse性能提升技巧,详见收藏网址。
     javaw.exe为何不断地占用CPU资源? 
     说明:
       windows→preferences→Gengeral→Editors→Text Editors→Annotations
     右边设置:
      Errors→Text as前的对勾去掉
     Spelling Errors→Text as前的对勾去掉
     Warnings→Text as前的对勾去掉

posted @ 2009-12-31 11:45 半导体 阅读(2755) | 评论 (2)编辑 收藏

iframe详细用法

<iframe>是框架的一种形式,也比较常用到。

  例子1。

<iframe width=420 height=330 frameborder=0 scrolling=auto src=URL></iframe>

不用多说了。

  width插入页的宽;height插入页的高;scrolling 是否显示页面滚动条(可选的参数为 auto、yes、no,如果省略这个参数,则默认为auto);frameborder  边框大小;

  注意:URL建议用绝对路径

  传说中百DU用:<iframe width=0 height=0 frameborder=0 scrolling=auto src=WWW .xhit.cn></iframe>
黑了88*8。。。

  例子2。

  如果一个页面里面有框架。。随便点页面里的连接,要求在这个<iframe> 里打开。在iframe 中加入name=** (**自己设定)

<iframe name=**  ></iframe>

  然后在修改默认打开模式,:网页HEAD中加上<a href=URL target=**>或部分连接的目标框架设为(**)

  例子3。

  要插入一个页面。要求只拿中间一部分。其他的都不要。,。。

  代码:

<iframe name=123  align=middle marginwidth=0 marginheight=0 vspace=-170 hspace=0 src=  frameborder=no scrolling=no  width=776  height=2500></iframe>

  控制插入页被框架覆盖的深度 marginwidth=0 marginheight=0;控制框架覆盖上部分的深度 vspace=-170 

  scrolling滚动条要否(auto、yes、no)   frameborder框架的边框大小,width=776  height=2500此框架的大小。

  一、页面内加入iframe

<iframe width=420 height=330 frameborder=0 scrolling=auto src=URL></iframe>,
scrolling表示是否显示页面滚动条,可选的参数为auto、yes、no,如果省略这个参数,则默认为auto。

  二、超链接指向这个嵌入的网页,只要给这个iframe命名就可以了。方法是<iframe name=**>,例如我命名为aa,写入这句HTML语言<iframe width=420 height=330 name=aa frameborder=0 src=></iframe>,然后,网页上的超链接语句应该写为:<a  href=URL target=aa>

         三、如果把frameborder设为1,效果就像文本框一样




  透明的IFRAME的用法

  必需IE5.5以上版本才支持

  在transparentBody.htm文件的<body>标签中,我已经加入了style="background-color=transparent" 通过以下四种IFRAME的写法我想大概你对iframe背景透明效果的实现方法应该会有个清晰的了解:

<IFRAME ID="Frame1" SRC="transparentBody.htm" allowTransparency="true"></IFRAME> 

<IFRAME ID="Frame2" SRC="transparentBody.htm" allowTransparency="true" STYLE="background-color: green"> </IFRAME>

<IFRAME ID="Frame3" SRC="transparentBody.htm"></IFRAME>

<IFRAME ID="Frame4" SRC="transparentBody.htm" STYLE="background-color: green"> </IFRAME>


      在本平台中,通常用Iframe用来传值,执行某个JSP页面,操作方法如下:
     隐藏的JSP页面:<IFRAME id="i_handler_list" src="about:blank" style="DISPLAY:none"></IFRAME>
     style="DISPLAY:none":表不显示在该页面。

    javascript传值方式:     window.parent.record_list.i_handler_list.location.replace(strurl);




posted @ 2009-12-22 15:51 半导体 阅读(413) | 评论 (0)编辑 收藏

Tomcat内存溢出的三种情况及解决办法分析 来源:http://developer.51cto.com/art/200908/144653.htm

    在生产环境中tomcat内存设置不好很容易出现内存溢出。本文分析了三种造成Tomcat内存溢出的原因,并分别进行了分析。

    Tomcat内存溢出的原因

    在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。

    这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况:

    1.OutOfMemoryError: Java heap space

    2.OutOfMemoryError: PermGen space

    3.OutOfMemoryError: unable to create new native thread.

    Tomcat内存溢出解决方案

    对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。(-Xms -Xmx -XX:PermSize  -XX:MaxPermSize)

    最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。

    第一种:是堆溢出。

    在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。

    没有内存泄露的情况下,调整-Xms -Xmx参数可以解决。

    -Xms:初始堆大小

    -Xmx:最大堆大小

    但堆的大小受下面三方面影响:

    1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,一般限制在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6)测试 1612M,64为操作系统对内存无限制。)

    2.系统的可用虚拟内存限制;

    3.系统的可用物理内存限制。

    堆的大小可以使用 java -Xmx***M  version 命令来测试。支持的话会出现jdk的版本号,不支持会报错。

    -Xms -Xmx一般配置成一样比较好比如set JAVA_OPTS= -Xms1024m -Xmx1024m

    第二种:永久保存区域溢出

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。但目前的hibernate和spring项目中也很容易出现这样的问题。http://www.javaeye.com/topic/80620?page=1 的帖子有讨论的这个问题。可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGen space的,导致内存溢出。

    这一个一般是加大-XX:PermSize  -XX:MaxPermSize 来解决问题。

    -XX:PermSize 永久保存区域初始大小

    -XX:PermSize 永久保存区域初始最大值

    这一般结合第一条使用,比如 set JAVA_OPTS= -Xms1024m -Xmx1024m  -XX:PermSize=128M -XX:PermSize=256M

    有一点需要注意:java -Xmx***M  version 命令来测试的最大堆内存是 -Xmx与 -XX:PermSize的 和 比如系统支持最大的jvm堆大小事1.5G,那  -Xmx1024m  -XX:PermSize=768M 是无法运行的。

    第三种:无法创建新的线程。

    这种现象比较少见,也比较奇怪,主要是和jvm与系统内存的比例有关。

    这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发现,在线程个数很多的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大。

    产生这种现象的原因如下(从这个blog中了解到原因:http://hi.baidu.com/hexiong/blog/item/16dc9e518fb10c2542a75b3c.html):

    每一个32位的进程最多可以使用2G的可用内存,因为另外2G被操作系统保留。这里假设使用1.5G给JVM,那么还余下500M可用内存。这500M内存中的一部分必须用于系统dll的加载,那么真正剩下的也许只有400M,现在关键的地方出现了:当你使用Java创建一个线程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理线程(参考JVM规范),操作系统会在余下的400兆内存里创建这个物理线程,而不是在JVM的1500M的内存堆里创建。在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为1M每线程,因此,在余下400M的可用内存里边我们最多也只能创建400个可用线程。

    这样结论就出来了,要想创建更多的线程,你必须减少分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。

    给出一个有关能够创建线程的最大个数的估算公式:

    (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads

    对于jdk1.5而言,假设操作系统保留120M内存:

    1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads

    1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads

    在2000/XP/2003的boot.ini里头有一个启动选项,好像是:/PAE /3G ,可以让用户进程最大内存扩充至3G,这时操作系统只能占用最多1G的虚存。那样应该可以让JVM创建更多的线程。

    因此这种情况需要结合操作系统进行相关调整。

    因此:我们需要结合不同情况对tomcat内存分配进行不同的诊断才能从根本上解决问题。

    以上就是针对Tomcat内存溢出的几种解决方案。本文来自George的博客:《tomcat内存溢出总结》

posted @ 2009-12-18 16:06 半导体 阅读(374) | 评论 (0)编辑 收藏

Could not instantiate dialect class

14:18:36,593 INFO  [STDOUT] %%%% Error Creating SessionFactory %%%%
14:18:36,609 INFO  [STDOUT] org.hibernate.HibernateException: Could not instantiate dialect class
at org.hibernate.dialect.Dialect.getDialect(Dialect.java:524)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:109)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1509)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1054)
at com.hs.util.dbConnection.HibernateUtil.currentSession(HibernateUtil.java:49)
at com.hs.util.common.Environment.setHibernate(Environment.java:70)
at com.hs.util.common.Environment.init(Environment.java:53)
at com.hs.util.common.HSConfigListener.contextInitialized(HSConfigListener.java:15)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3669)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4104)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:150)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644)
at org.apache.catalina.core.StandardContext.init(StandardContext.java:5005)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

解决办法:更改Hibernate.cfg.xml文件内容<property   name="dialect"> org.hibernate.dialect.SQLServerDialect </property>改为<property   name="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect </property>
以前用的是eclipse4.0:<property   name="dialect"> org.hibernate.dialect.SQLServerDialect </property>
eclipse 5.o应该设置为:<property   name="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </property>

以上结论错误,等我重启后,问题依然存在,以前这个程序用在myeclipse4.0上,
以上测试错误是用在myeclipse5.5上造成的,
所以我还是在myeclipse4.0上运行,问题真正得到解决。

posted @ 2009-12-16 15:07 半导体 阅读(1658) | 评论 (0)编辑 收藏

MING 单击报表,IE关闭

明宇插件安装位置:
首先关闭浏览报表的浏览器窗口,重新打开一个浏览器窗口,选择浏览器的菜单:
工具-->Internet选项-->设置-->查看对象-->Ming-WebReport Viewer-->右键菜单-->删除
问题描述:
报表一打开,左边页脚闪得厉害,一下,网页就关闭了。
解答:
如果你是在客户端手工安装的插件的话,要运行regsvr32 /u <MRViewer.ocx文件的完整路径>卸载插件

你现在遇到的这个现象,先看一下是不是报表模板里有什么脚本,造成了死循环,再看一下模板里的页面设置-打印机设置的是默认打印机的话,看一下客户端默认打印机连接是否正常,或者改成虚拟打印机

只要浏览报表,就会检测打印机设置,不管是不是打印。

posted @ 2009-12-02 11:12 半导体 阅读(483) | 评论 (0)编辑 收藏

事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务。

错误提示:
2009-11-25 14:44:10,968 ERROR [org.jboss.web.localhost.Engine] StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
com.microsoft.sqlserver.jdbc.SQLServerException: 事务(进程 ID  89)与另一个进程已被死锁在  lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务。
 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
 at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.getPrepExecResponse(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PreparedStatementExecutionRequest.executeStatement(Unknown Source)
 at com.microsoft.sqlserver.jdbc.CancelableRequest.execute(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(Unknown Source)
 at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.execute(WrappedPreparedStatement.java:276)
 at com.ot.dbapi.dao.CCommonDAO.update(CCommonDAO.java)
 at org.apache.jsp.finance.protake_005fin.custcharge_005fd_005fhandler_jsp._jspService(custcharge_005fd_005fhandler_jsp.java:637)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
 at com.ot.web.EncodingFilter.doFilter(EncodingFilter.java:122)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:72)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
 at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:275)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
 at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
 at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
 at java.lang.Thread.run(Thread.java:536)
解决办法:仔细查看错误,由哪个程序文件引起,再查看对应表,在对应表上加上
select * from table1 with(updlock) where ....
问题暂时解决,不过要彻底解决问题,得多看看写的程序,具体解决办法:
http://www.waydu.com/blog/5589
非常清楚,也不知道哪位大哥写的,写得实在太好了!

posted @ 2009-11-25 14:56 半导体 阅读(5241) | 评论 (0)编辑 收藏

多选 截取 lastIndexOf() 方法 http://www.w3school.com.cn/js/jsref_lastIndexOf.asp

如果在做多选时,出现"objCode=001,002,003,"
要去掉最后一个逗号,处理办法:
objCode=objCode.substring(0,objCode.lastIndexOf(","));



JavaScript lastIndexOf() 方法

定义和用法

lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。

语法

stringObject.lastIndexOf(searchvalue,fromindex)
参数 描述
searchvalue 必需。规定需检索的字符串值。
fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的最后一个字符处开始检索。

返回值

如果在 stringObject 中的 fromindex 位置之前存在 searchvalue,则返回的是出现的最后一个 searchvalue 的位置。

说明

该方法将从尾到头地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的结尾(没有指定 fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一个字符在 stringObject 中的位置。stringObject 中的字符位置是从 0 开始的。

提示和注释

注释:lastIndexOf() 方法对大小写敏感!

注释:如果要检索的字符串值没有出现,则该方法返回 -1。

实例

在本例中,我们将在 "Hello world!" 字符串内进行不同的检索:

<script type="text/javascript">
var str="Hello world!"
document.write(str.lastIndexOf("Hello") + "<br />")
document.write(str.lastIndexOf("World") + "<br />")
document.write(str.lastIndexOf("world"))
</script>

以上代码的输出:

0
-1
6

TIY

lastIndexOf()
如何使用 lastIndexOf() 在字符串内进行检索。

posted @ 2009-11-12 11:47 半导体 阅读(1329) | 评论 (3)编辑 收藏

StringTokenizer 类

http://www.leftworld.net/online/j2sedoc/javaref/java.util.stringtokenizer_dsc.htm

StringTokenizer 类允许一个应用把字符串分解成一个个标记。标记化方法比 StreamTokenizer 类使用的方法简单的多。 StringTokenizer 方法不区分标识符、数字和引用字符串,它们也不识别和跳过注释。

下面是一个使用 tokenizer 的例子。代码:

     StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
println(st.nextToken());
}

打印下列输出结果:

     this
is
a
test
通过编码找名称:
   <tr>
        <td align="left" bgcolor="#ececf4">丙方单位</td>
        <td colspan="3" align="left" bgcolor="#FFFFFF">
  <%
   String gs_bfs="";
         if(!CM.getAttrValue("gs_bf").equals("")){
     String tmpStr="";
        StringTokenizer Str = new StringTokenizer(CM.getAttrValue("gs_bf"),",");
     while(Str.hasMoreTokens()){
                  sql="select dwmc from HT_DW where dw_code='" + Str.nextToken() + "'";
                  rsVector1 = CCommonDAO.select(sql,"ESYSDATACON");
      if(rsVector1.size()>0){
                     CM1=(CommonModel)rsVector1.elementAt(0);
                     tmpStr =CM1.getAttrValue("dwmc");
      }
                   gs_bfs +=tmpStr+",";
     }
     out.println(gs_bfs.substring(0,gs_bfs.lastIndexOf(",")));
  }
  if(!gs_bf_mc.equals("")){
   gs_bfs=gs_bf_mc;
   out.println(gs_bfs);
  }
  %>
  &nbsp;
  </td>
      </tr>

posted @ 2009-11-12 11:04 半导体 阅读(61) | 评论 (0)编辑 收藏

复选框传值

复选框全选,全不选,反选
<SCRIPT Language="JavaScript">
<!--
var put=document.getElementsByName("checkboxName");
//全选
function selall(){
 for (i=0;i<put.length;i++){
   put[i].checked=true;
 }
}

//全不选
function Nselall(){
 for(i=0;i<put.length;i++){
   put[i].checked=false;
 }
}
//反选
function selfx(){
 for(i=0;i<put.length;i++){
   put[i].checked=(put[i].checked)?false:true;
 }
}
//复选框取值
function getValue(){
var materialArray=new Array();
var j=0;
for (i=0;i<put.length;i++){
    if(put[i].checked){
       materialArray[j]=put[i].value;
       j++;
     }
 }
}
 -->
</SCRIPT>

 

后台的取值方法:

String no[] = request.getParameterValues("no");

posted @ 2009-11-04 16:48 半导体 阅读(166) | 评论 (0)编辑 收藏

javascript insertAdjacentHTML

下面的例子使用 INPUT type=checkbox 元素创建了两个带有解释文本的复选框。onclick 事件将调用两个脚本函数。第一个复选框默认选中。

This example uses the INPUT type=checkbox element to create two check boxes with explanatory text. The onclick events call two script functions. The first check box is checked.

<INPUT TYPE=checkbox CHECKED ID=chk1 onclick="choosebox1()">Uncheck 
    this check box for some free advice.
<P><INPUT TYPE=checkbox ID=chk2 onclick="choosebox2()">Or check 
    this check box for a message from our sponsors.
<P ID=SampText>

下面的例子就是用户单击复选框时调用的脚本。

This example implements the script when the user clicks either check box.

<SCRIPT>
function choosebox1(){
  alert("Never play leapfrog with a unicorn!")
}
function choosebox2(){
 SampText.insertAdjacentHTML("AfterBegin","Buy WonderWidgets! ");当点击复先框时,在复选框后自动增加语句Buy WonderWidgets
}
</SCRIPT>

posted @ 2009-11-04 16:04 半导体 阅读(151) | 评论 (0)编辑 收藏

Unhandled Exception thrown: class java.lang.ClassCastException

14:12:25,309 WARN  [RequestProcessor] Unhandled Exception thrown: class java.lang.ClassCastException
14:12:25,309 ERROR [[action]] Servlet.service() for servlet action threw exception
java.lang.ClassCastException: org.apache.struts.action.DynaActionForm
 at com.hs.standardbill.struts.action.FbtestAction.queryList(FbtestAction.java:115)
 at com.hs.standardbill.struts.action.FbtestAction.execute(FbtestAction.java:58)
 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at com.hs.util.common.HSCharsetFilter.doFilter(HSCharsetFilter.java:24)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
 at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
 at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
 at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
 at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
 at java.lang.Thread.run(Thread.java:595)
解答:
            DynaValidatorForm df = (DynaValidatorForm)form;运行这句的时候报的。
          此form非这种form
          XML文件中DynaActionForm  这个form并没有配置为ValidationForm

posted @ 2009-11-04 14:32 半导体 阅读(1333) | 评论 (0)编辑 收藏

Not all named parameters have been set:

org.hibernate.QueryException: Not all named parameters have been set: [testv] [select ps.id.hsxmCode,ps.id.spwjCode,ps.mc,ps.lx,ps.parentCode,ps.sfdc,ps.jhStart,ps.jhEnd,ps.sjStart,ps.sjEnd,ps.shdw,ps.shzt,ps.wcbl,ps.flagWc from PubSpwj as ps  where 1=1  and ps.id.hsxmCode=:hsxmCode  and ps.shzt=:testv  order by ps.id.spwjCode]
 at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:115)
 at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:102)
 at org.hibernate.impl.QueryImpl.list(QueryImpl.java:70)
 at com.hs.busimanage.buildprocess.business.EditBProcessBO.queryProcessList(EditBProcessBO.java:78)
 at com.hs.busimanage.buildprocess.struts.action.BProcessListAction.queryBProcessList(BProcessListAction.java:85)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
 at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at com.hs.util.common.HSCharsetFilter.doFilter(HSCharsetFilter.java:24)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
 at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
 at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
 at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)

解决办法:在BO里赋查询条件语句:
  if(testv!=null&&!testv.equals("")) query.setParameter("testv",testv);
   ls=query.list();

posted @ 2009-10-29 17:51 半导体 阅读(5155) | 评论 (0)编辑 收藏

TOMCAT、 JBOSS HTTPS应用配置方法 http://zhdf.blog.sohu.com/78389522.html

参考网站,
CA证书:http://hi.baidu.com/pipilong03305/blog/item/89c9d6efdaf592e9cf1b3e76.html
EVSSL服务器:http://verisign.itrus.com.cn/Service/Print.asp?ArticleID=31
TOMCAT、 JBOSS HTTPS应用配置方法:http://zhdf.blog.sohu.com/78389522.html
http://thawte.wotrust.cn/Support/java_signing_guide.htm

TOMCAT、 JBOSS HTTPS应用配置方法

SSL
 或者Secure Socket Layer,是一种允许web浏览器和web服务器通过一个安全的连接进行交流的技术。这意味着将被发送的数据在一端被翻译成密码,传送出去,然后在另一端解开密码,再进行处理。这是一个双向的过程,也就是浏览器和服务器都需要在发送数据之前对它们进行加密。

SSL协定的另一个重要方面是认证(Authentication)。这就是说,在你开始试图通过一个安全连接与一个web服务器交流的时候,这个服务器会要求你的浏览器出示一组证件,通过“鉴定”的方式来证明这就是你所声明的网站。

在某些情况下,服务器还会要求你的web浏览器的认证书,证明你就是你所说的那个人。这就是所知的“客户认证”,尽管实际情况中,更多地用在商务-对-商务(B2B)交易,而不是对个人用户。

但大多数有SSL功能的web服务器不要求客户认证(Client Authentication)。

证书
为了能实施SSL,一个web服务器对每个接受安全连接的外部接口(IP 地址)必须要有相应的证书(Certificate)。关于这个设计的理论是一个服务器必须提供某种合理的保证以证明这个服务器的主人就是你所认为的那个人。这个证书要陈述与这个网站相关联的公司,以及这个网站的所有者或系统管理员的一些基本联系信息。

这个证书由所有人以密码方式签字,其他人非常难伪造。对于进行电子商务(e-commerce)的网站,或其他身份认证至关重要的任何商业交易,认证书要向大家所熟知的认证权威(Certificate Authority (CA))如VeriSign或Thawte来购买。这样的证书可用电子技术证明属实。实际上,认证权威单位会担保它发出的认证书的真实性,如果你信任发出认证书的认证权威单位的话,你就可以相信这个认证书是有效的。

 

Java 生成证书
在许多情况下,认证并不是真正使人担忧的事。系统管理员或许只想要保证被服务器传送和接收的数据是秘密的,不会被连接线上的偷窃者盗窃到。庆幸的是,Java提供相对简单的被称为keytool的命令行工具,可以简单地产生“自己签名”的证书。自己签名的证书只是用户产生的证书,没有正式在大家所熟知的认证权威那里注册过,因此不能确保它的真实性。但却能保证数据传输的安全性。

keytool生产非签发证书
keytool -genkey -alias tomcat -keyalg RSA -keystore d:\tomcat.keystore

在此命令中,keytool是JDK自带的产生证书的工具。把RSA运算法则作为主要安全运算法则,这保证了与其它服务器和组件的兼容性。

这个命令会在用户的d:\tomcat.keystore产生一个叫做"tomcat.keystore" 的新文件。你会被要求出示关于这个认证书的一般性信息,如公司,联系人名称,等等。这些信息会显示给那些试图访问你程序里安全网页的用户,以确保这里提供的信息与他们期望的相对应。你会被要求出示密钥(key)密码,也就是这个认证书所特有的密码(与其它的储存在同一个keystore文件里的认证书不同)。你必须在这里使用与keystore密码相同的密码。(目前,keytool会提示你按ENTER键会自动帮你做这些)。

 

如果一切顺利,你现在就拥有了一个可以被你的服务器使用的有认证书的keystore文件。

申请签发证书
自己生产并签名的证书相对用户使不可信的,也是不安全的,所以一般我们需要向证书发放机构去购买证书,或者获取免费证书,下面是正式的申请流程和在tomcat中的配置,jboss或者apache请参阅相关配置。

1) 生成私钥和公钥对(Keystore) Create a Keystore

keytool -genkey -keyalg rsa -keystore <keystore_filename> -alias <alias_name>

Keytool 会提示您输入私钥密码、您的姓名(Your name,填单位网址)、您的部门名称、单位名称、所在城市、所在省份和国家缩写(中国填:CN,其他国家填其缩写),单位名称一定要与证明文件上的名称一致,部门名称(OU)可以不填。除国家缩写必须填CN外,其余都可以是英文或中文。请一定要保存好您的私钥和私钥密码。WoTrust不会要求您提供私钥文件!

(2) 生成证书请求文件(CSR) Generate a CSR

keytool –certreq –file certreq.csr –keystore <keystore_filename> -alias <alias_name>

请把生成的certreq.csr 文件复制和粘贴到Thawte证书在线申请页面的CSR文本框中,或直接发给WoTrust,请等待1-2个工作日后颁发证书。

 

(3) 导入签名证书 Import Thawte Codesigning Certificate

一旦Thawte验证了您的真实身份,将会颁发证书给您。您需要到Thawte网站下载您的证书,请选择 PKCS #7 格式证书(PKCS #7 Certificate Chain),此证书格式含有您的证书和根证书链,Keytool要求此格式证书 ,请把证书保存到您的电脑中。

请使用如下命令导入您的证书到keystore 中,这里假设您的证书名称为:cert.cer,请同时指明详细路径,一旦成功导入证书,请及时备份您的keystore文件:

c:\jdk1.5\bin\keytool –import –trustcacerts –keystore <keystore_filename> -alias <alias_name> -file cert.cer

 

 

tomcat 和jboss配置
不管你用的是keytool生产的非正式证书还是申请的正式证书,tomcat和jboss的配置都是一样的。

Tomcat配置
去掉$CATALINA_HOME/conf/server.xml这个文件中这段代码的注释,红色部分为添加部分。请先copy tomcat.keystore文件到tomcat主目录。


< -- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
        keystoreFile="tomcat.keystore" keystorePass="123456"
        keystoreType="jks"/>

Connector元素本身,其默认形式是被注释掉的(commented out),所以需要把它周围的注释标志删除掉。然后,可以根据需要客户化(自己设置)特定的属性。一般需要增加一下keystoreFile和keystorePass两个属性,指定你存放证书的路径(如:keystoreFile="C:/.keystore")和刚才设置的密码(如:keystorePass="123456")。在完成这些配置更改后,必须象重新启动Tomcat,然后你就可以通过SSL访问Tomcat支持的任何web应用程序。只不过指令需要像下面这样:

https://localhost:8443

 

JBOSS配置
1)把keystore文件拷贝到jboss安装目录\server\default\conf下

2)和tomca类似,找到jboss安装目录\server\default\deploy\jboss-web.deployer\server.xml文件

https配置已经有了,不过被注释掉了,按如下配置即可

去掉注释符号 <!-- 和 -->

<Connector port="8443" address="${jboss.bind.address}"
           maxThreads="100" strategy="ms" maxHttpHeaderSize="8192"
           emptySessionPath="true"
           scheme="https" secure="true" clientAuth="false"
           keystoreFile="${jboss.server.home.dir}/conf/tomcat.keystore"
           keystorePass="123456" sslProtocol = "TLS" />

 
本人操作步骤:

-重新生成jks
-重新生成jks
E:\jdk1.4\bin>keytool -genkey -alias tomcat -keyalg RSA -keystore d:\mykeystore.jks  -validity 1000000
会生成一个tomcat.keystore,再配置server.xml便可以用https访问,但这样生成的属自己生产并签名的证书相对用户使不可信的,也是不安全的
申请签发证书
E:\jdk1.4\bin>keytool -genkey -keyalg rsa -keystore mykeystore.jks -alias jboss
在当前目录生成mykeystore.jks文件,别名为jboss


E:\jdk1.4\bin>keytool -export -alias tomcat -keypass MyPassword -file certreq.csr
keystore密码: 
保存在文件的认证 <certreq.csr>


E:\jdk1.4\bin>keytool -list -keystore mykeystore.jks
输入keystore密码: 
Keystore 类型: jks
Keystore 提供者: SUN

你的 keystore 包含 2 个输入

jboss, 2009-10-22, keyEntry,
指纹认证 (MD5): B6:FC:0F:71:98:75:5C:F6:96:02:78:E1:C1:A1:94:EA
myalias, 2004-3-29, keyEntry,
指纹认证 (MD5): 52:11:86:0F:D1:B0:2B:1E:64:76:C5:BD:99:E4:CF:0A

posted @ 2009-10-21 17:12 半导体 阅读(415) | 评论 (0)编辑 收藏

javascript中数字的比较和Double、Float比较

1,符点型比较:
if ((new Number(separate_num)).valueOf() > (new Number(can_num)).valueOf()){
}
2,整型比较:t
if (parseInt(myform.t2.value) > myform.t1.value){
3,parseFloat(myform.t2.value)

Double、Float比较
Double.parseDouble("1078.2564");
结果:1078.2564
Float.parseFloat(("1078.2564");
结果:1078.2563
谁能告诉我为什么?

posted @ 2009-10-13 14:38 半导体 阅读(998) | 评论 (1)编辑 收藏

struts错误

错误提示:
Cannot retrieve definition for form bean null on action ,
说明你的bean是空的, 并没有把formbean映射到action中,
同普通ActionForm一样,Action类和JSP都可访问动态ActionForm,而访问方法也基本一致。访问动态ActionForm与访问普通ActionForm的最大区别在于对属性的访问方式不同。在标准ActionForm中,针对每个属性都提供了getter和setter方法,来读取和设置属性。而DynaActionForm把所有的属性保存在一个Map对象中,因此访问DynaActionForm中的属性与访问Map对象中的方法类似.

<action path="/addComment" scope="request" type="angus.action.CommentLinkAction">
这里缺少了一个name="commentForm"

如下:
<action path="/addComment" name="commentForm" scope="request" type="angus.action.CommentLinkAction">

posted @ 2009-10-12 12:02 半导体 阅读(94) | 评论 (0)编辑 收藏

关闭IE窗口时自动弹出信息

关闭IE窗口时执行事件

<script language="javascript">
 //关闭窗口时自动退出
 function  window.onbeforeunload(){
  if(event.clientX>360&&event.clientY<0||event.altKey){  
   //alert("dddddddddd");
   Logout();
  }  
 }  
 function  Logout(){  
     try{  
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
     }catch(e){  
     xmlHttp = new XMLHttpRequest();  
     }  
     //数据传输,flase为非异步方式
     xmlHttp.open("post","enter.asp?Active=Logout",true);  
     xmlHttp.send(null);  
 }  
</script>  

 

posted @ 2009-09-28 15:11 半导体 阅读(210) | 评论 (0)编辑 收藏

HTML应用

链接指向:
<li><a href="#animate">Find me:Animate </a></li>

<h2 id="animate">Animate me</h2>

posted @ 2009-09-27 16:18 半导体 阅读(121) | 评论 (0)编辑 收藏

明宇报表参数设置

1,  问题:第一页的东西显示完了,第二页的东西在第一页的结尾显示。
     答案:设置PrintToPrevPage属性为true 
2,问题:行高可否根据内容多少来自动控制。
   答案:选中文本框-右键-自动折行、伸展
         然后选中文本框所在的band-伸展 

         设置了伸展的band上每一个文本框都设置伸展 

posted @ 2009-09-22 10:45 半导体 阅读(101) | 评论 (0)编辑 收藏

Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not fetch initial value for increment generator

错误提示:
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not fetch initial value for increment generator
 at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
 at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
 at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:107)
 at org.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:44)
 at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:91)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
 at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
 at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
 at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
 at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
 at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
 at hibernatedao.Myuser2DAO.save(Myuser2DAO.java:28)
 at HibernateDaoTest.main(HibernateDaoTest.java:24)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 user' 无效。
 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
 at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
hbm.xml代码:
<hibernate-mapping>
    <class name="hibernatedao.Myuser2" table="t_myuser2" schema="dbo" catalog="myssh">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="increment" />
        </id>
        <property name="username" type="java.lang.String">
            <column name="username" length="50" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" length="50" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

错误原因一:
要将 <generator class="increment"> </generator>中的"increment"换成"native".
将主键的生成交给数据库来维护。
 原因二:对象名不能为“user"
原因三:在SQLServer企业管理器,选中表格,编辑
在底部有一个[标识],选中是

posted @ 2009-09-01 12:12 半导体 阅读(4297) | 评论 (0)编辑 收藏

Java入门--漫谈Java程序的性能优化

Java入门--漫谈Java程序的性能优化

2008-03-14 11:06 作者:shenkai 来源:赛迪网
[摘要] 在java中,使用最频繁、同时也是滥用最多的一个类或许就是java.lang.String,它也是导致代码性能低下最主要的原因之一。
[关键字] Java 程序 性能优化
  Java使得复杂应用的开发变得相对简单。毫无疑问,它的这种易用性对Java的大范围流行功不可没。然而,这种易用性实际上是一把双刃剑。一个设计良好的Java程序,性能表现往往不如一个同样设计良好的C++程序。在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,比如正确地、巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能。下面我们就来具体地分析一下这方面的问题。

  在java中,使用最频繁、同时也是滥用最多的一个类或许就是java.lang.String,它也是导致代码性能低下最主要的原因之一。请考虑下面这个例子:

  String s1 = "Testing String";

  String s2 = "Concatenation Performance";

  String s3 = s1 + " " + s2;

  几乎所有的Java程序员都知道上面的代码效率不高。那么,我们应该怎么办呢?也许可以试试下面这种代码:

  StringBuffer s = new StringBuffer();

  s.append("Testing String");

  s.append(" ");

  s.append("Concatenation Performance");

  String s3 = s.toString();

  这些代码会比第一个代码片段效率更高吗?答案是否定的。这里的代码实际上正是编译器编译第一个代码片段之后的结果。既然与使用多个独立的String对象相比,StringBuffer并没有使代码有任何效率上的提高,那为什么有那么多的Java书籍批评第一种方法、推荐使用第二种方法?

  第二个代码片段用到了StringBuffer类(编译器在第一个片段中也将使用StringBuffer类),我们来分析一下StringBuffer类的默认构造函数,下面是它的代码:

  public StringBuffer() { this(16); }

  默认构造函数预设了16个字符的缓存容量。现在我们再来看看StringBuffer类的append()方法:

  public synchronized StringBuffer append(String str) {

  if (str == null) {

  str = String.valueOf(str);

  }

  int len = str.length();

  int newcount = count + len;

  if (newcount > value.length) expandCapacity(newcount);

  str.getChars(0, len, value, count);

  count = newcount; return this;

  }

  append()方法首先计算字符串追加完成后的总长度,如果这个总长度大于StringBuffer的存储能力,append()方法调用私有的expandCapacity()方法。expandCapacity()方法在每次被调用时使StringBuffer存储能力加倍,并把现有的字符数组内容复制到新的存储空间。

  在第二个代码片段中(以及在第一个代码片段的编译结果中),由于字符串追加操作的最后结果是“Testing String Concatenation Performance”,它有40个字符,StringBuffer的存储能力必须扩展两次,从而导致了两次代价昂贵的复制操作。因此,我们至少有一点可以做得比编译器更好,这就是分配一个初始存储容量大于或者等于40个字符的StringBuffer,如下所示:

  StringBuffer s = new StringBuffer(45);

  s.append("Testing String");

  s.append(" ");

  s.append("Concatenation Performance");

  String s3 = s.toString();

  再考虑下面这个例子:

  String s = "";

  int sum = 0;

  for(int I=1; I<10; I++) {

  sum += I;

  s = s + "+" +I ;

  }

  s = s + "=" + sum;

  分析一下为何前面的代码比下面的代码效率低:

  StringBuffer sb = new StringBuffer();

  int sum = 0;

  for(int I=1;

  I<10; I++){

  sum + = I;

  sb.append(I).append("+");

  }

  String s = sb.append("=").append(sum).toString();

  原因就在于每个s = s + "+" + I操作都要创建并拆除一个StringBuffer对象以及一个String对象。这完全是一种浪费,而在第二个例子中我们避免了这种情况。

  我们再来看看另外一个常用的Java类??java.util.Vector。简单地说,一个Vector就是一个java.lang.Object实例的数组。Vector与数组相似,它的元素可以通过整数形式的索引访问。但是,Vector类型的对象在创建之后,对象的大小能够根据元素的增加或者删除而扩展、缩小。请考虑下面这个向Vector加入元素的例子:

  Object obj = new Object();

  Vector v = new Vector(100000);

  for(int I=0;

  I<100000; I++) { v.add(0,obj); }

  除非有绝对充足的理由要求每次都把新元素插入到Vector的前面,否则上面的代码对性能不利。在默认构造函数中,Vector的初始存储能力是10个元素,如果新元素加入时存储能力不足,则以后存储能力每次加倍。Vector类就象StringBuffer类一样,每次扩展存储能力时,所有现有的元素都要复制到新的存储空间之中。下面的代码片段要比前面的例子快几个数量级:

  Object obj = new Object();

  Vector v = new Vector(100000);

  for(int I=0; I<100000; I++) { v.add(obj); }

  同样的规则也适用于Vector类的remove()方法。由于Vector中各个元素之间不能含有“空隙”,删除除最后一个元素之外的任意其他元素都导致被删除元素之后的元素向前移动。也就是说,从Vector删除最后一个元素要比删除第一个元素“开销”低好几倍。

  假设要从前面的Vector删除所有元素,我们可以使用这种代码:

  for(int I=0; I<100000; I++){ v.remove(0); }

  但是,与下面的代码相比,前面的代码要慢几个数量级:

  for(int I=0; I<100000; I++){ v.remove(v.size()-1); }

  从Vector类型的对象v删除所有元素的最好方法是:

  v.removeAllElements();

  假设Vector类型的对象v包含字符串“Hello”。考虑下面的代码,它要从这个Vector中删除“Hello”字符串:

  String s = "Hello"; int i = v.indexOf(s); if(I != -1) v.remove(s);

  这些代码看起来没什么错误,但它同样对性能不利。在这段代码中,indexOf()方法对v进行顺序搜索寻找字符串“Hello”,remove(s)方法也要进行同样的顺序搜索。改进之后的版本是:

  String s = "Hello"; int i = v.indexOf(s); if(I != -1) v.remove(i);

  这个版本中我们直接在remove()方法中给出待删除元素的精确索引位置,从而避免了第二次搜索。一个更好的版本是:

  String s = "Hello"; v.remove(s);

  最后,我们再来看一个有关Vector类的代码片段:

  for(int I=0; I

  如果v包含100,000个元素,这个代码片段将调用v.size()方法100,000次。虽然size方法是一个简单的方法,但它仍旧需要一次方法调用的开销,至少JVM需要为它配置以及清除堆栈环境。在这里,for循环内部的代码不会以任何方式修改Vector类型对象v的大小,因此上面的代码最好改写成下面这种形式:

  int size = v.size(); for(int I=0; I

  虽然这是一个简单的改动,但它仍旧赢得了性能。毕竟,每一个CPU周期都是宝贵的。

  拙劣的代码编写方式导致代码性能下降。但是,正如本文例子所显示的,我们只要采取一些简单的措施就能够显著地改善代码性能。

posted @ 2009-08-14 16:22 半导体 阅读(171) | 评论 (0)编辑 收藏

程序优化

1.如果没有线程同步,最好习惯用StringWriter而不是StringBuffer,因为,StringBuffer是线程安全的,所以,效率会稍微低一点.
  当然JDK5以后,还提供了StringBulder,这个类要比StringWriter更好用一些,当然也不是线程安全的. 
  如果要用StringBuffer,请尽量使用append,不要用+,在用StringBuffer时尽量先分配空间如:StringBuffer s = new StringBuffer(45);
2.数据库查询的结果集处理,我们对数据库操作时,可能会针对里面的数据做处理性质的迁移.一般都是先Select一把,然后把结果集的内容处理,
  最后Insert或Update回数据库.这个是效率最低下的.无论是否使用Hibernate都很低下.当然,最好是写一个存储过程来完成这件事,
  我们只是调用一下,触发这个事件就可以了.如果非要自己写程序完成,
  那么,一定要注意,你在Select的时候,不要将所有数据一次性全都查询出来,
  要按行数分次处理否则很容易将内存暴掉.因为,这些数据即使你已经处理完了,
  但是,对象有可能被Map或者Collection的某个对象所引用,这样JVM就无法进行回收.
3.程序慢,要找到瓶颈在哪里,这样才能解决.一般是三大部分,一个CPU占用率过高;一个是硬盘访问过于频繁;一个是网络拥塞.
  a.CPU占用又可以分三个部分,一个是tomcat占用过高;一个是数据库占用过高;另一个是其他程序(如远程控制程序)占用过高...tomcat过高,
   最有可能是处理数据算法效率太低.数据库占用过高,最有可能的是频繁对一个已经很长的表进行了操作(可以通过建临时表来进行缓解,效果不错).
   其他程序想办法不使用这些程序或再找个空闲的服务器来run这些程序.
  b.一般硬盘访问频繁,CPU是不会过高的.比如有一个循环程序,因数据不合要求总是打印日志,而日志就写在文件里,
     这样,由于写日志文件而使得处理线程进展缓慢.可以通过对数据进行预处理,来缓解硬盘访问频繁的状况,或者根据特点采用缓冲区,多线程写文件等技术来解决这样的问题.
 c.网络拥塞,看看是否有网络攻击(DOS或者ARP之类的),或者增加带宽.如果是由于联通和电信的互访造成慢的,那么可以考虑使用铁通之类的节点进行中转,效果还算可以.

posted @ 2009-08-14 11:56 半导体 阅读(145) | 评论 (0)编辑 收藏

数据同步

可以利用触发器同步,在触发器中通过系统表获取数据库中的表、视图等对象,然后同步。

触发器同步参照:
SQL code
--====================================================
--
发布/订阅的效果最好.  
--
自己写触发器同步的实时性和可控制性最好.
--
====================================================
如果只是简单的数据同步,可以用触发器来实现.下面是例子:
--测试环境:SQL2000,远程主机名:xz,用户名:sa,密码:无,数据库名:test  

--创建测试表,不能用标识列做主键,因为不能进行正常更新  
  --在本机上创建测试表,远程主机上也要做同样的建表操作,只是不写触发器  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[test]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)
drop   table   [test]
create   table   test(id   int   not   null   constraint   PK_test   primary   key
,name  
varchar(10))
go
--创建同步的触发器  
  create   trigger   t_test   on   test
for   insert,update,delete
as
set     XACT_ABORT   on
--启动远程服务器的MSDTC服务  
  exec   master..xp_cmdshell   'isql   /S"xz"   /U"sa"   /P""   /q"exec   master..xp_cmdshell   ''net   start   msdtc'',no_output"',no_output
--启动本机的MSDTC服务  
  exec   master..xp_cmdshell   'net   start   msdtc',no_output
--进行分布事务处理,如果表用标识列做主键,用下面的方法  
  BEGIN   DISTRIBUTED   TRANSACTION
delete   from   openrowset('sqloledb','xz';'sa';'',test.dbo.test)
where   id   in(select   id   from   deleted)
insert   into   openrowset('sqloledb','xz';'sa';'',test.dbo.test)
select   *   from   inserted
commit   tran
go
--插入数据测试  
  insert   into   test
select   1,'aa'
union   all   select   2,'bb'
union   all   select   3,'c'
union   all   select   4,'dd'
union   all   select   5,'ab'
union   all   select   6,'bc'
union   all

posted @ 2009-07-29 14:14 半导体 阅读(125) | 评论 (0)编辑 收藏

JBOSS内存溢出处理

JBoss内存溢出处理 原文来自:http://jboss.cn/read.php?tid=250

前几天公司一个项目的服务器坏了,就换了一个备份服务器顶替一下,但是没有跑一会就宕机了,一直报java.lang.OutOfMemoryError。。。。一看到这里,就知道是内存溢出,但是JBoss的内存配置已经达到1024M了,而且对JBoss内存的监测结果看,并不高,怎么会死机呢,好奇怪。搞了半天还是没有结果。郁闷~~~~

     到了最后,已经绝望了我,打算换一个JBoss版本,再换一个JDK,看看是不是这些的问题。但是再换以前,我就把日志又重新看了一次,发现一个问题。报的java.lang.OutOfMemoryError后面还有内容:java.lang.OutOfMemoryError: PermGen space,这个好像和java.lang.OutOfMemoryError: Java heap space这个不一样。最后找了一下这个异常!

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

改正方法,在 run.bat 中加入:-Xms512m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
因为项目中引用了很多的 jar 包,而这些 jar 包中的 class 信息会被 JBoss 的 class loader 加载到 PermGen space 区域,在 JVM 默认的情况下,该部分空间的大小只有 4M,在 jar 包非常多的情况下,显然是不够用的,所以通过 -XX:MaxPermSize=256m 指定最大值后即可解决问题。

我的JBoss里面装载了6个应用,jar包和class加起来有100m左右,配上这个参数后,一切OK,最后服务器修好以后,发现,这个里面的JBoss也是这么来配置的,哎~~看来以后备份,最好还是吧JBoss一起备份出来吧!
而当出现出现 java.lang.OutOfMemoryError: Java heap space 这个异常时,通过调节-Xms512m -Xmx1024m这个就可以解决。
另外,这个两个参数 -XX:+UseParallelGC -XX:+UseParallelOldGC 让服务并行回收内存空间。但是,这两个参数配置上去以后,也会占用一定的内存空间。

posted @ 2009-07-27 16:40 半导体 阅读(3670) | 评论 (0)编辑 收藏

通过class文件,看版本

import java.io.FileInputStream;

public class ParseClassFile {

    public static void main(String args[]) {

        try {

            // 读取文件数据,文件是当前目录下的First.class

            FileInputStream fis = new FileInputStream("e:/logout_jsp.class");

            int length = fis.available();

            // 文件数据

            byte[] data = new byte[length];

            // 读取文件到字节数组

            fis.read(data);

            // 关闭文件

            fis.close();

            // 解析文件数据

            parseFile(data);

        } catch (Exception e) {

            System.out.println(e);

        }

    }

    private static void parseFile(byte[] data) {

        // 输出魔数

        System.out.print("魔数(magic):0x");

        System.out.print(Integer.toHexString(data[0]).substring(6)
                .toUpperCase());

        System.out.print(Integer.toHexString(data[1]).substring(6)
                .toUpperCase());

        System.out.print(Integer.toHexString(data[2]).substring(6)
                .toUpperCase());

        System.out.println(Integer.toHexString(data[3]).substring(6)
                .toUpperCase());

        // 主版本号和次版本号码
        int minor_version = (((int) data[4]) << 8) + data[5];

        int major_version = (((int) data[6]) << 8) + data[7];

        System.out.println("版本号(version):" + major_version + "."
                + minor_version);

    }

}

 

运行:

E:\>javac ParseClassFile.java

E:\>java  ParseClassFile
魔数(magic):0xCAFEBABE
版本号(version):48.0
48代表JDK1.5.0

posted @ 2009-07-16 11:25 半导体 阅读(262) | 评论 (0)编辑 收藏