<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 193,  comments - 520,  trackbacks - 0
     
         摘要: ibatis DAO 框架提供了事務管理模塊。而這個事務管理可以應用到很多場合,包括JDBC、Hibernate、JTA、SQLMAP等。下面以最簡單的JDBC來分析一下其如何實現事務管理。首先來看一段代碼: public class OrderService {  private DaoManager daoManager;...  閱讀全文
    posted @ 2006-01-20 17:50 ronghao 閱讀(7219) | 評論 (6)編輯 收藏
    一、執行期根據方法的名稱來執行方法
    下面的示例演示了這一操作:
    import java.lang.reflect.*;
    public class method2 {
       
    public int add(int a, int b) {
           
    return a + b;
       }

       
    public static void main(String args[]) {
           
    try {
               Class cls 
    = Class.forName("method2");
               Class partypes[] 
    = new Class[2];
               partypes[
    0= Integer.TYPE;
               partypes[
    1= Integer.TYPE;
               Method meth 
    = cls.getMethod("add", partypes);
               method2 methobj 
    = new method2();
               Object arglist[] 
    = new Object[2];
               arglist[
    0= new Integer(37);
               arglist[
    1= new Integer(47);
               Object retobj 
    = meth.invoke(methobj, arglist);
               Integer retval 
    = (Integer) retobj;
               System.out.println(retval.intvalue());
           }
     catch (Throwable e) {
               System.err.println(e);
           }

       }

    }

    注:上面劃線的粗體字最好用Object methobj =  cls.newInstance();來代替,原因很明顯如果這個類及方法事先都是清楚的也不需要用reflection了
        假如一個程序在執行的某處的時候才知道需要執行某個方法,這個方法的名稱是在程序的運行過程中指定的 (例如,JavaBean 開發環境中就會做這樣的事),那么上面的程序演示了如何做到。上例中,getMethod 用于查找一個具有兩個整型參數且名為 add 的方法。找到該方法并創建了相應的 Method 對象之后,在正確的對象實例中執行它。執行該方法的時候,需要提供一個參數列表,這在上例中是分別包裝了整數 37 和 47 的兩個 Integer 對象。執行方法的返回的同樣是一個 Integer 對象,它封裝了返回值 84。

    二、執行期創建新的對象

    對于構造器,則不能像執行方法那樣進行,因為執行一個構造器就意味著創建了一個新的對象 (準確的說,創建一個對象的過程包括分配內存和構造對象)。所以,與上例最相似的例子如下:

    import java.lang.reflect.*;
    public class constructor2 {
       
    public constructor2() {
       }

       
    public constructor2(int a, int b) {
           System.out.println(
    "a = " + a + " b = " + b);
       }

       
    public static void main(String args[]) {
           
    try {
               Class cls 
    = Class.forName("constructor2");
               Class partypes[] 
    = new Class[2];
               partypes[
    0= Integer.TYPE;
               partypes[
    1= Integer.TYPE;
               Constructor ct 
    = cls.getConstructor(partypes);
               Object arglist[] 
    = new Object[2];
               arglist[
    0= new Integer(37);
               arglist[
    1= new Integer(47);
               Object retobj 
    = ct.newInstance(arglist);
           }
     catch (Throwable e) {
               System.err.println(e);
           }

       }

    }

    三、改變字段(域)的值

    reflection 的還有一個用處就是改變對象數據字段的值。reflection 可以從正在運行的程序中根據名稱找到對象的字段并改變它,下面的例子可以說明這一點:

    import java.lang.reflect.*;
    public class field2 {
       
    public double d;
       
    public static void main(String args[]) {
           
    try {
               Class cls 
    = Class.forName("field2");
               Field fld 
    = cls.getField("d");
               field2 f2obj 
    = new field2();
               System.out.println(
    "d = " + f2obj.d);
               fld.setDouble(f2obj, 
    12.34);
               System.out.println(
    "d = " + f2obj.d);
           }
     catch (Throwable e) {
               System.err.println(e);
           }

       }

    }
    這個例子中,字段 d 的值被變為了 12.34。
    實際開發時用Common BeanUtils
    posted @ 2006-01-17 17:41 ronghao 閱讀(583) | 評論 (0)編輯 收藏
     其實很早就有這個愿望了,只是一直沒有實施。在買筆記本還是自己配臺式機的問題上一直拿不定主意。去年十一的時候就打算買了,朋友說,你一天上班要接受電腦9、10個小時的輻射,下班回來還要接著輻射啊。去年一年的工作,給我印象最深的恐怕就是:學到很多東西,但大部分都未能實際實施。想一想,報表、搜索引擎、工作流、郵件、lunix、css、webservice自己都有做過。工作中交給你一個未實現過的功能實現,google-->開源項目-->讀它的英文文檔-->跑出第一個demo-->應用到自己的模塊中-->研究它的源碼,這個過程是一個很愜意的事情。但問題是不能深入。懂點皮毛根本沒什么用!呵呵,用公司的電腦學自己想學的東西根本就沒那個時間。
     買臺電腦,多寫代碼,多鉆研點東西,這就是今年的愿望。
    posted @ 2006-01-05 17:39 ronghao 閱讀(415) | 評論 (1)編輯 收藏

     項目終于上線運行了,但是還是問題多多,但還好都不是涉及到邏輯的大問題。這兩天把數據備份這塊重做了一下,原先是自己寫的一個線程池,功能其實就是每天對mysql進行備份(當初設計為什么會把這個功能放到程序里實現??)。這完全是重復的造輪子!開始是用Jrontab重構了下,后來討論后決定在程序里把這項功能刪除,改在Linux里寫個備份腳本。每天的晚上12點進行備份,然后本機一份,ftp到另一臺服務器一份。有段時間沒操作Linux了,結果好多命令都忘了,寒!為什么會重復的造輪子??

    posted @ 2005-12-28 18:19 ronghao 閱讀(824) | 評論 (4)編輯 收藏

    在數據庫里新建兩個表
    A、用戶表
    create table users (user_name varchar(20) not null,
                                   user_pass varchar(20) not null,
                                   PRIMARY KEY (user_name)) ;
    B、用戶與角色關聯表
    create table user_roles (user_name varchar(20) not null,
                                            role_name varchar(20) not null,
                                            PRIMARY KEY (user_name)) ;
    C、插入數據
    insert into users values('user1', 'password');
    insert into user_roles values('user1', 'manager');

    在tomcat的server.xml里加入描述
          <Realm  className="org.apache.catalina.realm.JDBCRealm"
                  driverName="org.gjt.mm.mysql.Driver"
                  connectionURL="jdbc:mysql://localhost/databaseName"
                  connectionName=yourname connectionPassword=yourpassword
                  userTable="users" userNameCol="user_name" userCredCol="user_pass"
                  userRoleTable="user_roles" roleNameCol="role_name" />

    在自己應用程序的web.xml里加入描述(基于表單)
    <security-constraint>
      <web-resource-collection>
       <web-resource-name>My Test</web-resource-name>
       <url-pattern>/get.jsp</url-pattern>
      </web-resource-collection>
      <auth-constraint>
        <role-name>manager</role-name>    //能夠訪問的角色,可以多個
      </auth-constraint>
    </security-constraint>

    <login-config>
      <auth-method>FORM</auth-method>
        <realm-name>My Test</realm-name>
      <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/fail_login.html</form-error-page>  //認證失敗后跳轉的頁面
      </form-login-config>
    </login-config>

    登錄表單必須包含輸入用戶姓名和口令的字段,它們必須被分別命名為j_username和j_password,表單將這二個值發送給j_security_check邏輯名字。
      下面是一個該表單如何在HTML網頁中實現的例子:
    <form method="POST" action="j_security_check">
      <input  type="text" name="j_username">
      <input  type="password" name="j_password">
        <input  type="submit" value="確定"/>
    </form>

    這樣當對get.jsp進行訪問時,tomcat就會自動轉到login.jsp頁面實現認證。對于簡單的認證,小型系統,采用Tomcat實現容器內認證是方便的。

    posted @ 2005-12-28 14:00 ronghao 閱讀(1412) | 評論 (3)編輯 收藏
    僅列出標題
    共39頁: First 上一頁 31 32 33 34 35 36 37 38 39 下一頁 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    關注工作流和企業業務流程改進。現就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久综合久久综合亚洲| 一区二区三区四区免费视频| 亚洲精品人成电影网| 亚洲欧洲久久av| 免费看又爽又黄禁片视频1000| 国产精品免费大片| 丰满少妇作爱视频免费观看| 亚洲国产成人精品无码区在线秒播 | 丁香六月婷婷精品免费观看| 亚洲1234区乱码| 亚洲爱情岛论坛永久| 国产午夜亚洲精品午夜鲁丝片| 国内大片在线免费看| 黄色网址免费大全| 亚洲视频免费在线观看| a级毛片免费观看在线| 人妻无码中文字幕免费视频蜜桃 | 国产又黄又爽又大的免费视频| 麻豆亚洲AV成人无码久久精品| 亚洲AV无码专区在线亚| 亚洲国产成人久久三区| 亚洲视频网站在线观看| 亚洲一区二区中文| 亚洲av色影在线| 久久亚洲成a人片| 亚洲AV成人精品网站在线播放| 亚洲午夜未满十八勿入网站2| 亚洲人午夜射精精品日韩| 亚洲国产成人五月综合网| 在线免费观看韩国a视频| 免费理论片51人人看电影| 一二三四免费观看在线电影 | 亚洲日韩国产精品无码av| 亚洲国产一区国产亚洲| 亚洲AV无码国产在丝袜线观看| 亚洲爆乳精品无码一区二区三区 | 色多多A级毛片免费看| 免费人成网上在线观看| 瑟瑟网站免费网站入口| 四虎影视久久久免费观看| 一级成人毛片免费观看|