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

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

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

    mashiguang

    小馬快跑

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      20 隨筆 :: 0 文章 :: 60 評(píng)論 :: 0 Trackbacks

    2011年8月11日 #

    spring2.5-reference.pdf
    http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=d9d1668c0b162f26d115a49e0b308e4f


    deerjet src.zip
    http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c859c9a30c5f19e2732255e81a4f0c36

    jQueryAPI-100214.chm
    http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c64a572a16f169ac6db829a3122c4279

    hibernate_annotations.pdf
    http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=88bd4e31848fda5ca2e65b6fc19df73f

    hibernate_reference.pdf
    http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=603986150b7056ce617289370197ea9a

    HQL與Criteria對(duì)照.pdf
    http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=c2805f9d49171f6165baa528a29774c7

    oracle編程藝術(shù).pdf
    http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=0c39f09f81f674ef67016482a224a025

    精通oracle10g pl_sql編程.pdf
    http://m0.mail.sina.com.cn/apps/netdisk/download.php?id=455bb7bbfeff510ee66acafe6c8f035b
    posted @ 2011-08-11 23:05 mashiguang| 編輯 收藏

    public PageModel<CrmWarning> query(PageModel<CrmWarning> pageModel)
                
    throws Exception {
            Assert.notNull(pageModel);
            
            DetachedCriteria dc 
    = DetachedCriteria.forClass(CrmWarning.class);
            
            
    /*
             * 添加查詢(xún)條件
             * 如:dc.add(Restrictions.like("key", "%"+pageModel.getCondition("key")+"%"));
             * 
             * 
    */
            
    if (null != pageModel.getCondition("warnLevel")) {
                dc.add(Restrictions.eq(
    "warnLevel", pageModel.getCondition("warnLevel")));
            }
            
    if (StringUtils.isNotBlank((String)pageModel.getCondition("detail"))) {
                dc.add(Restrictions.like(
    "detail""%"+pageModel.getCondition("detail")+"%"));
            }
            
    if (StringUtils.isNotBlank((String)pageModel.getCondition("warnDate"))) {
                
    /*
                 * warnDate格式是yyyy-MM-dd,這里改成查詢(xún)這一天的預(yù)警
                 * Restrictions.sqlRestriction()允許寫(xiě)原生sql的方式完成特殊需求,如下
                 * 
    */
                dc.add(Restrictions.sqlRestriction(
    "to_char(time_start,'yyyy-MM-dd') = '" + pageModel.getCondition("warnDate"+ "'"));
            }
            
    if (null != pageModel.getCondition("templateId")) {
                
    /*
                 * 這里的templateId是模板的主鍵id,查詢(xún)時(shí)應(yīng)該轉(zhuǎn)換成模板對(duì)象
                 * 
    */
                CrmWarnTemplate warnTemplate 
    = new CrmWarnTemplate();
                warnTemplate.setTemplateId((Long)pageModel.getCondition(
    "templateId"));
                dc.add(Restrictions.eq(
    "crmWarnTemplate", warnTemplate));
            }
            
            dc.addOrder(Order.asc(
    "crmWarnTemplate"));
            dc.addOrder(Order.desc(
    "timeStart"));
            
            pageModel.setDateList(warningDao.query(dc, pageModel.getFirstNote(), pageModel.getNumInPage()));
            pageModel.setTotal(warningDao.count(dc));
            
            
    return pageModel;
        }
    posted @ 2011-08-11 22:50 mashiguang| 編輯 收藏

    package com.jl.dao.bookplatform.impl;

    import java.util.List;

    import org.hibernate.Hibernate;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.transform.Transformers;
    import org.springframework.dao.DataAccessException;

    import com.jl.dao.baseDao.GenericDao;
    import com.jl.dao.bookplatform.ProductItemDao;
    import com.jl.entity.bookplatform.CrmProduct;
    import com.jl.entity.bookplatform.CrmProductItem;
    import com.jl.entity.bookplatform.ProductItemConfig;

    public class ProductItemDaoImpl extends GenericDao<CrmProductItem, Long> implements ProductItemDao {

        
        
    public List<ProductItemConfig> getProductItemConfigs(Long productId, Long planetypeId) throws DataAccessException{
            String sql 
    = "select chi.charge_item_id \"chargeItemId\"," +
                    
    " chi.charge_item \"chargeItem\"," +
                    
    " chi.charge_unit \"chargeUnit\"," +
                    
    " cpi.product_id \"productId\"," +
                    
    " cpi.product_item_id \"productItemId\"," +
                    
    " cpi.sale_planetype_id \"salePlanetypeId\"," +
                    
    " cpi.inland_price \"inlandPrice\"," +
                    
    " cpi.outland_price \"outlandPrice\"" +
                    
    " from (select * from crm_charge_item chi2 where chi2.if_regular = 1) chi left join crm_product_item cpi" +
                    
    " on cpi.charge_item_id = chi.charge_item_id " +
                    
    " and cpi.product_id = ?" +
                    
    " and cpi.sale_planetype_id = ?" +
                    
    " order by chi.charge_item_id";
            
            Session session 
    = getSession();
            Query query 
    = session.createSQLQuery(sql)
                .addScalar(
    "chargeItemId", Hibernate.LONG)
                .addScalar(
    "chargeItem",Hibernate.STRING)
                .addScalar(
    "chargeUnit",Hibernate.STRING)
                .addScalar(
    "productId",Hibernate.LONG)
                .addScalar(
    "productItemId",Hibernate.LONG)
                .addScalar(
    "salePlanetypeId",Hibernate.LONG)
                .addScalar(
    "inlandPrice",Hibernate.DOUBLE)
                .addScalar(
    "outlandPrice",Hibernate.DOUBLE)
                .setResultTransformer(Transformers.aliasToBean(ProductItemConfig.
    class))
                .setParameter(
    0, productId)
                .setParameter(
    1, planetypeId);
            
            List
    <ProductItemConfig> configs = query.list();
            
            
    return configs;
        }

        
    public List<CrmProductItem> getProductItem(CrmProduct product) throws DataAccessException {
            
            String hql 
    = "from CrmProductItem cpi where cpi.crmProduct = ?";
            Session session 
    = getSession();
            Query query 
    = session.createSQLQuery(hql).setParameter(0, product);
            
            List
    <CrmProductItem> items = query.list();
            
    return items;
        }
        
        
    public void copy(Long productId_dest,Long productId_orig,String createMan) throws DataAccessException {
            String sql 
    = "insert into crm_product_item " +
                    
    " select hibernate_sequence.nextval," +
                    
    " ?," +
                    
    " cpi.charge_item_id," +
                    
    " cpi.sale_planetype_id," +
                    
    " cpi.inland_price," +
                    
    " cpi.outland_price," +
                    
    " ?," +
                    
    " sysdate" +
                    
    " from crm_product_item cpi" +
                    
    " where cpi.product_id = ?";
            
            Session session 
    = getSession();
            Query sqlQuery 
    = session.createSQLQuery(sql)
                            .setParameter(
    0, productId_dest)
                            .setParameter(
    1, createMan)
                            .setParameter(
    2, productId_orig);
            sqlQuery.executeUpdate();
        }
        
        
    }
    posted @ 2011-08-11 22:25 mashiguang| 編輯 收藏

    2011年2月26日 #

    1,配置tomcat啟動(dòng)參數(shù)
    直接在%tomcat_home%\bin下建立tomcat_debug.bat文件,內(nèi)容如下:

    cd %CATALINE_HOME%/bin
    set JPDA_ADDRESS=8787
    set JPDA_TRANSPORT=dt_socket
    set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
    startup

    需要遠(yuǎn)程調(diào)試時(shí)從tomcat_debug.bat啟動(dòng)。

    2,eclipse調(diào)試
    選擇菜單"Run>Debug...",彈出窗口里右鍵點(diǎn)擊"Remote Java Application",選擇"New",如圖:


    點(diǎn)擊"Debug"按鈕,開(kāi)始遠(yuǎn)程調(diào)試,當(dāng)程序運(yùn)行到斷點(diǎn)時(shí),Eclipse會(huì)捕獲到。


    有關(guān)普通java app的遠(yuǎn)程調(diào)試可以參考http://blog.chenlb.com/2010/07/eclipse-remoting-debug-java-app.html
    posted @ 2011-02-26 17:39 mashiguang 閱讀(451) | 評(píng)論 (2)編輯 收藏

    2011年2月17日 #

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     
    <HEAD>
      
    <TITLE> New Document </TITLE>
      
    <META NAME="Generator" CONTENT="EditPlus">
      
    <META NAME="Author" CONTENT="">
      
    <META NAME="Keywords" CONTENT="">
      
    <META NAME="Description" CONTENT="">
      
    <script type="text/javascript" src="jquery-1.4.2.js"></script>
      
    <script type="text/javascript" src="jquery.validate.js"></script>
      
    <SCRIPT LANGUAGE="JavaScript">
      
    <!--
        jQuery(
    function(){        
            jQuery.validator.methods.compareDate 
    = function(value, element, param) {
                
    //var startDate = jQuery(param).val() + ":00";補(bǔ)全yyyy-MM-dd HH:mm:ss格式
                //value = value + ":00";
                
                
    var startDate = jQuery(param).val();
                
                
    var date1 = new Date(Date.parse(startDate.replace("-""/")));
                
    var date2 = new Date(Date.parse(value.replace("-""/")));
                
    return date1 < date2;
            };
            
            jQuery(
    "#form1").validate({
                focusInvalid:
    false,
                rules:{
                    
    "timeStart":{
                        required: 
    true
                    },
                    
    "timeEnd": {
                        required: 
    true,
                        compareDate: 
    "#timeStart"
                    }
                },
                messages:{
                    
    "timeStart":{
                        required: 
    "開(kāi)始時(shí)間不能為空"
                    },
                    
    "timeEnd":{
                        required: 
    "結(jié)束時(shí)間不能為空",
                        compareDate: 
    "結(jié)束日期必須大于開(kāi)始日期!"
                    }
                }
            });
        });
      
    //-->
      </SCRIPT>
     
    </HEAD>

     
    <BODY>
     
    <form id="form1" name="form1" method="post" action="demo.html">
       
    <p>timeStart:
         
    <input name="timeStart" type="text" id="timeStart" value="2011-02-17 10:00:00"> yyyy-MM-dd HH:mm:ss
       
    </p>
       
    <p>timeEnd:
         
    <input name="timeEnd" type="text" id="timeEnd" value="2011-02-17 9:00:00"> yyyy-MM-dd HH:mm:ss
       
    </p>
       
    <p>
         
    <input type="submit" name="Submit" value="提交">
       
    </p>
     
    </form>
      
     
    </BODY>
    </HTML>
    posted @ 2011-02-17 10:34 mashiguang 閱讀(11929) | 評(píng)論 (9)編輯 收藏

    2011年1月21日 #

    在Oracle定義變量時(shí),常有VARCHAR2 (3 Char)或者VARCHAR2 (10 Byte)的數(shù)據(jù)類(lèi)型,那么3char或者10Byte到底代表幾個(gè)漢字,幾個(gè)字符呢,上次外公司一同事討論這個(gè)問(wèn)題,一下沒(méi)給解釋清楚,所以下來(lái)以后整理如下:

    總結(jié):
    當(dāng)NLS_CHARACTERSET=AL32UTF8時(shí)()
    NLS_LENGTH_SEMANTICS=BYTE時(shí),一個(gè)漢字代表三個(gè)字節(jié)
    NLS_LENGTH_SEMANTICS=CHAR時(shí),一個(gè)漢字代表一個(gè)字節(jié)
    當(dāng)NLS_CHARACTERSET=US7ASCII時(shí)(字符集為單字節(jié))
    NLS_LENGTH_SEMANTICS=BYTE時(shí),一個(gè)漢字代表兩個(gè)字節(jié)
    NLS_LENGTH_SEMANTICS=CHAR時(shí),一個(gè)漢字代表兩個(gè)字節(jié)

    現(xiàn)象:
    select * from nls_database_parameters;
    ….      …………..
    NLS_CHARACTERSET        AL32UTF8

    …..

    NLS_LENGTH_SEMANTICS BYTE

    ….

    NLS_NCHAR_CHARACTERSET      AL16UTF16

    NLS_RDBMS_VERSION      10.2.0.4.0
     

    SQL> alter session set nls_length_semantics='BYTE';

    SQL> create table nls_byte(c1 varchar2(7));

    SQL> insert into nls_byte values('測(cè)試機(jī)');

     insert into nls_byte values('測(cè)試機(jī)')

     ORA-12899: 列 "SYS"."NLS_BYTE"."C1" 的值太大 (實(shí)際值: 9, 最大值: 7)

    SQL> insert into nls_byte values('測(cè)試a');

     1 row inserted
     
    SQL> select table_name,column_name,t.DATA_TYPE,t.DATA_LENGTH,t.CHAR_USED from user_tab_columns t where table_name='NLS_BYTE';

     TABLE_NAME COLU DATA_TYP DATA_LENGTH CHAR_USED

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

    NLS_BYTE   C1   VARCHAR2           7 B
      
    NLS_LENGTH_SEMANTICS allows you to specify the length of a column datatype in terms of CHARacters rather than in terms of BYTEs. Typically this is when using an AL32UTF8 or other varying width NLS_CHARACTERSET database where one character is not always one byte. While using CHAR semantics has as such no added value in a 7/8 bit characterset it's fully supported so any application code / table setup using CHAR can also be used in a 7/8bit characterset like US7ASCII/WE8MSWIN1252.
    This parameter is a 9i (and up) feature and is not available in older releases

    翻譯過(guò)來(lái)就是:這個(gè)參數(shù)允許將列的數(shù)據(jù)單位設(shè)為字符而不是byte.這個(gè)問(wèn)題會(huì)在字符集設(shè)為UTF8的時(shí)候出現(xiàn). 此參數(shù)在9i以上版本有效.

    NLS_LENGTH_SEMANTICS 設(shè)置.

    1.      NLS_DATABASE_PARAMETERS中的值是在數(shù)據(jù)庫(kù)創(chuàng)建的時(shí)候確定的,一般都為BYTE

    2.     此參數(shù)可以以 “ALTER SYSTEM SET NLS_LENGTH_SEMANTICS=CHAR scope=both”方式修改,但是需要重啟數(shù)據(jù)庫(kù)才能生效.

    3.     也可用” ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR”使對(duì)當(dāng)前session生效.

    4.     此參數(shù)可以在10G以上版本中,在環(huán)境變量或注冊(cè)表中設(shè)置(注意需要大寫(xiě)),設(shè)定后從當(dāng)前客戶(hù)端啟動(dòng)的所有會(huì)話都采用新的取值.

    5.     修改后只對(duì)新建的列生效,對(duì)于已有的列沒(méi)有作用

    6.     新建或升級(jí)DB時(shí)用BYTE,否則XDB或dba_tables會(huì)出現(xiàn)問(wèn)題.

    7.     NLS_LENGTH_SEMANTICS對(duì)sys用戶(hù)下的對(duì)象無(wú)效.

    8.     如果對(duì)于7/8bit的字符集,設(shè)為byte/char意義不大,因?yàn)闊o(wú)論是char和byte都對(duì)應(yīng)一個(gè)byte.

    測(cè)試:

    一.在當(dāng)前session中修改此參數(shù)

     SQL> alter session set nls_length_semantics='char';

     Session altered

     SQL> create table nls_char(c1 varchar2(7),c2 varchar2(7));

     Table created

     SQL> desc nls_char

    Name Type        Nullable Default Comments

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

    C1   VARCHAR2(7) Y                      

    C2   VARCHAR2(7) Y                      

     SQL> insert into nls_char values('測(cè)試機(jī)','測(cè)試測(cè)試測(cè)試');

     1 row inserted 

    如果對(duì)于alter system,效果是一樣的

    二.對(duì)于已經(jīng)存在的表,

     SQL> desc nls_byte

    Name Type             Nullable Default Comments

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

    C1   VARCHAR2(7 BYTE) Y                      

    SQL> alter table nls_byte modify c1 varchar2(7 char);

     Table altered

     SQL> desc nls_byte

    Name Type        Nullable Default Comments

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

    C1   VARCHAR2(7) Y                      

     SQL> insert into nls_byte values('測(cè)試機(jī)');

     1 row inserted
     
    1.      exp/imp : 不能直接導(dǎo)入,因?yàn)闀?huì)采用source table的建表方式在target db里建表,即使目標(biāo)庫(kù)設(shè)的值為char.

    *可以預(yù)先在目標(biāo)庫(kù)中以char方式建表

    *然后導(dǎo)入,指定參數(shù)ignore=y

      2. Alter table

         alter table "<owner>"."<table>" modify "<column>" char (10 char);

          創(chuàng)建腳本,修改列設(shè)定.

     注:

    Bug-3611750, ora-01450 online rebuild of index fails, 可以在重建索引前指定byte, 10.2.0.5以上已經(jīng)修復(fù)

    Bug 1488174 UNICODE: ALTER SYSTEM SET NLS_LENGTH_SEMANTICS DOESN'T
    TAKE EFFECT, 用此語(yǔ)句修改后,實(shí)際上不起作用,需要重啟才能生效, 但是如果用alter session方式即時(shí)生效,不用重啟.

    進(jìn)一步測(cè)試,在另一個(gè)字符集設(shè)為us7ascii的DB設(shè)置此參數(shù)

    SQL> select * from nls_database_parameters

    6          NLS_CHARACTERSET  US7ASCII

    SQL> alter session set nls_length_semantics=byte;

    Session altered.

    SQL> create table nls_byte(c1 varchar2(7));

    Table created.

    SQL> insert into  nls_byte values('測(cè)試測(cè)試');

    insert into  nls_byte values('測(cè)試測(cè)試')

    ERROR at line 1:

    ORA-12899: value too large for column "TEA"."NLS_BYTE"."C1" (actual: 8,

    maximum: 7)

    SQL> desc nls_byte

     Name                        Null?    Type

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

     C1                                   VARCHAR2(7)

    SQL> alter session set nls_length_semantics=char;

    Session altered.

    SQL> create table nls_char(c1 varchar2(7));

    Table created.

    SQL> insert into  nls_char values('測(cè)試測(cè)試');

    insert into  nls_char values('測(cè)試測(cè)試')

    ERROR at line 1:

    ORA-12899: value too large for column "TEA"."NLS_CHAR"."C1" (actual: 8,

    maximum: 7)

    SQL> desc nls_char

     Name                        Null?    Type

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

    C1                                  VARCHAR2(7)
     
     可以看出,在字符集為單字節(jié)的情況下,無(wú)論取何值,漢字都是以二個(gè)字節(jié)的方式存在的.

     


    本文轉(zhuǎn)自http://www.wudeyao.com/post-69.html
    posted @ 2011-01-21 12:49 mashiguang 閱讀(1414) | 評(píng)論 (0)編輯 收藏

    2010年12月8日 #

    在foreach調(diào)用remove可能會(huì)引發(fā)ConcurrentModificationException。
    如:
    for(Object obj : list){
        .remove(obj);
    }

    最好像下面這樣寫(xiě):
    for (Iterator it = list.iterator(); it.hasNext();) {
    ......
    it.remove();
    }

    (添加20160420)
    如果foreach的同時(shí)需要add element,就不能使用iterator了,最好重新啟用一個(gè)新的list暫存新的集合元素。
    posted @ 2010-12-08 09:47 mashiguang 閱讀(428) | 評(píng)論 (0)編輯 收藏

    2010年9月14日 #

         摘要: 這個(gè)是ie6的bug,并非boxy的問(wèn)題。在ie6下,select元素的zindex最大,select元素會(huì)透過(guò)boxy的彈出層顯示在其上面。 這里用一個(gè)iframe擋住boxy彈出層下的select,使用時(shí)只要將useIframe置為true即可,源碼如下: (jquery.boxy.js并不好用,很多jquery的彈出層插件都解決了ie6的這個(gè)問(wèn)題) /**  *&n...  閱讀全文
    posted @ 2010-09-14 17:30 mashiguang 閱讀(4433) | 評(píng)論 (17)編輯 收藏

    2009年12月7日 #

     

    使用cassso helloword

    因?yàn)楣ぷ餍枰佑|到sso,據(jù)知目前多數(shù)sso使用耶魯?shù)?/span>cas實(shí)現(xiàn),且發(fā)現(xiàn)使用cas真的是很簡(jiǎn)單就可以做出一個(gè)單點(diǎn)登錄系統(tǒng)來(lái),cas還提供豐富的擴(kuò)展功能,對(duì)于擴(kuò)展功能日后再細(xì)細(xì)研究,這里只使用cas做一個(gè)hello world來(lái)記錄本人的學(xué)習(xí)過(guò)程,如有幸被高人看到,還望指出弊病,不吝賜教。

    在使用cas之前最好對(duì)數(shù)字證書(shū)有所了解,不了解也沒(méi)有關(guān)系,跟著我的步驟也一樣可以跑的通。

    準(zhǔn)備工作

    需要的文件:

    ü         Jdk6

    ü         Tomcat

    ü         cas-server-3.3.2

    ü         cas-client-3.1.9

    證書(shū)

    下面是keytool命令的一些常用方法,先在這里認(rèn)識(shí)一下它們,一會(huì)兒會(huì)用的到。

    使用keytool命令生成密鑰庫(kù)

    keytool -genkey -alias tomcat -keyalg RSA -dname "CN=pcma, OU=vanceinfo, O=vanceinfo, L=haidian, S=beijing, C=CN" -keystore c:"keystore5.jks

    CN:主機(jī)名

    OU:組織單位

    O:組織

    L:地區(qū)

    S:城市

    C:國(guó)家

    如果需要指定密鑰有效期,添加-validity 365即可,單位是天,如:
    keytool -genkey -alias tomcat -keyalg RSA -dname "xxxxx" -keystore xxxxx -validity 365

    導(dǎo)出證書(shū)

    keytool -export -file c:/server5.crt -alias tomcat -keystore c:"keystore5.jks

    將證書(shū)導(dǎo)入到客戶(hù)端jdk

    keytool -import -keystore "D:"Java"jdk1.6.0_14"jre"lib"security"cacerts" -file c:/server5.crt -alias tomcat

    從密鑰庫(kù)中刪除指定別名的證書(shū)

    keytool -delete -noprompt -alias tomcat -keystore E:"apache-tomcat-6.0.20_2"conf"keystore2.jks

    查看密鑰庫(kù)中的證書(shū)

    keytool -list -v -keystore c:"keystore5.jks

    配置tomcat

    使用keytool命令生成密鑰庫(kù)。

    配置%tomcat_home%/conf/server.xml使tomcat支持SSL協(xié)議,并指定密鑰庫(kù)。

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

                   maxThreads="150" scheme="https" secure="true"

                   clientAuth="false" sslProtocol="TLS" keystorePass="mashiguang"

                            keystoreFile="${catalina.home}/conf/keystore5.jks"/>

    部署cas server

    解壓縮cas-server-3.3.2-release.zip文件,在modules目錄里找到cas-server-webapp-3.3.2.war文件,這就是一個(gè)做好了的cas服務(wù)端,我們做的sso helloword可以直接使用,只需把cas-server-webapp-3.3.2.war改了個(gè)簡(jiǎn)單點(diǎn)的名字,如cas.war,然后部署到tomcat即可。

    瀏覽器訪問(wèn)https://pcma:8443/cas,如果打開(kāi)顯示的是cas默認(rèn)的登錄頁(yè)面,則表示服務(wù)端已部署完畢。

    客戶(hù)端使用cas client

    新建兩個(gè)web工程,用于模擬單點(diǎn)登錄系統(tǒng)中的客戶(hù)端,并將cas-client-3.1.9"modules里的jar包放到web工程lib目錄下,是主要的是cas-client-core-3.1.9.jar文件,把spring2.5也放到lib目錄下。

    Web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.4"

           xmlns="http://java.sun.com/xml/ns/j2ee"

           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

           xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

           http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

           <context-param> 

            <param-name>contextConfigLocation</param-name> 

            <param-value> 

                /WEB-INF/config/casContext.xml  

            </param-value> 

        </context-param> 

        <listener> 

            <listener-class> 

                org.springframework.web.context.ContextLoaderListener  

            </listener-class> 

        </listener> 

        <!-- 負(fù)責(zé)用戶(hù)認(rèn)證 --> 

        <filter> 

            <filter-name>CAS Authentication Filter</filter-name> 

            <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> 

            <!-- CAS login 服務(wù)地址--> 

            <init-param> 

                <param-name>casServerLoginUrl</param-name> 

                <param-value>https://pcma:8443/cas/login</param-value> 

            </init-param> 

            <init-param> 

                <param-name>renew</param-name> 

                <param-value>false</param-value> 

            </init-param> 

            <init-param> 

                <param-name>gateway</param-name> 

                <param-value>false</param-value> 

            </init-param> 

            <!-- 客戶(hù)端應(yīng)用服務(wù)地址--> 

            <init-param> 

                <param-name>serverName</param-name> 

                <param-value>http://pcma:8081</param-value> 

            </init-param> 

        </filter> 

        <!--負(fù)責(zé)Ticket校驗(yàn)--> 

        <filter> 

            <filter-name>CAS Validation Filter</filter-name> 

            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 

            <init-param> 

                <param-name>targetBeanName</param-name> 

                <param-value>cas.validationfilter</param-value> 

            </init-param> 

        </filter> 

        <filter-mapping> 

            <filter-name>CAS Authentication Filter</filter-name> 

            <url-pattern>/*</url-pattern> 

        </filter-mapping> 

        <filter-mapping> 

            <filter-name>CAS Validation Filter</filter-name> 

            <url-pattern>/*</url-pattern> 

        </filter-mapping> 

    </web-app>

    casContext.xml文件

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

                  "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>

    <bean id="cas.validationfilter" class="org.jasig.cas.client.validation.Cas10TicketValidationFilter"> 

            <property name="ticketValidator"> 

                <ref bean="cas10TicketValidator"/> 

            </property> 

            <property name="useSession"> 

                <value>true</value> 

            </property> 

            <!-- 客戶(hù)端應(yīng)用服務(wù)地址--> 

            <property name="serverName"> 

                <value>http://pcma:8081</value> 

            </property> 

            <property name="redirectAfterValidation"> 

                <value>true</value> 

            </property> 

        </bean> 

        <bean id="cas10TicketValidator" class="org.jasig.cas.client.validation.Cas10TicketValidator"> 

        <!-- 這里參數(shù)是cas服務(wù)器的地址--> 

            <constructor-arg index="0" value="https://pcma:8443/cas" /> 

        </bean> 

    </beans> 

    新建index.jsp文件

     <body>

       hello sso<br>

       <a >sso2</a>這個(gè)地址是另外一臺(tái)機(jī)器上的sso客戶(hù)端

     </body>

    上面的web.xmlcasContext.xmlindex.jsp是兩個(gè)客戶(hù)端中的一個(gè),另一個(gè)要根據(jù)實(shí)際情況修改。

    最后不要忘記客戶(hù)端的jdk要使用keytool命令導(dǎo)入證書(shū)文件。

    測(cè)試

    啟動(dòng)tomcat,測(cè)試器訪問(wèn)http://pcma:8081/sso,出現(xiàn)cas登錄頁(yè)面,輸入相同的用戶(hù)名和密碼即可登錄,登錄成功后頁(yè)面自動(dòng)跳轉(zhuǎn)回http://pcma:8081/sso,這時(shí)點(diǎn)擊頁(yè)面上的sso2鏈接,就可以自動(dòng)登錄并跳轉(zhuǎn)到sso2應(yīng)用。

    如果輸入用戶(hù)名密碼后提示下面的異常,是因?yàn)椴渴鹂蛻?hù)端的jdk沒(méi)有導(dǎo)入證書(shū)文件的原因。

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


    源碼

    http://www.tkk7.com/Files/mashiguang/sso.zip

    posted @ 2009-12-07 09:50 mashiguang 閱讀(1860) | 評(píng)論 (4)編輯 收藏

    2008年7月14日 #

     

    最近公司客戶(hù)反映有些頁(yè)面運(yùn)行速度太慢,通過(guò)對(duì)系統(tǒng)代碼的分析,發(fā)現(xiàn)排行榜功能是罪魁禍?zhǔn)祝驗(yàn)閿?shù)據(jù)量太大,每次刷新頁(yè)面都計(jì)算一次排行榜,的確耗時(shí)費(fèi)力。

    其實(shí)可以讓數(shù)據(jù)庫(kù)自己計(jì)算排行榜,并把計(jì)算結(jié)果保存到一個(gè)單獨(dú)的表里去,這個(gè)表只用來(lái)保存排行榜的數(shù)據(jù),數(shù)據(jù)量很小,然后所有的排行榜查詢(xún)都去select這個(gè)表。

    計(jì)算排行榜的功能我們可以寫(xiě)成一個(gè)存儲(chǔ)過(guò)程,但是排行榜的數(shù)據(jù)不是一成不變的,還需要不時(shí)的調(diào)用這個(gè)存儲(chǔ)過(guò)程才行,oracle為我們提供了dbms_jobs

    oracel dbms_jobs包可以提交作業(yè)到作業(yè)隊(duì)列中,這個(gè)包中還提供其它一些函數(shù)管理以前提交的作業(yè),如對(duì)作業(yè)進(jìn)行修改、禁止或刪除等操作。

    常用函數(shù):

    submit(),提交作業(yè)到作業(yè)隊(duì)列。

    isumbit()

    remove(),從作業(yè)隊(duì)列中刪除作業(yè)。

    change(),改變已有作業(yè)的參數(shù)。

    what(),改變作業(yè)要執(zhí)行的代碼。

    next_date(),改變作業(yè)下一次執(zhí)行時(shí)間。

    interval(),改變作業(yè)執(zhí)行的時(shí)間間隔。

    broken(),暫停執(zhí)行作業(yè)。

    run(),強(qiáng)制執(zhí)行作業(yè)。

    最常用的submit()函數(shù):

    dbms_jobs.submit(

           job out binary_integer,

           what in varchar2,

           next_date in date default sysdate,

           interval in varchar default null,

           no_parse in boolean default false,

           instance in binary_integer default any_instance,

           force in boolean default false

    );

    submit函數(shù)參數(shù):

    job,作業(yè)的作業(yè)號(hào),是個(gè)輸出參數(shù),所以調(diào)用submit函數(shù)時(shí),這個(gè)參數(shù)要指定一個(gè)已存在的變量。

    what,作業(yè)要執(zhí)行的代碼,一般是存儲(chǔ)過(guò)程。

    next_date,下一次作業(yè)運(yùn)行的日期。

    interval作業(yè)執(zhí)行的間隔時(shí)間,這個(gè)參數(shù)默認(rèn)值是null也就是what指定的代碼只在next_date這一時(shí)間執(zhí)行一次。

    no_parse,默認(rèn)值是false,當(dāng)參數(shù)值是false,提交作業(yè)時(shí)就對(duì)what指定的代碼進(jìn)行語(yǔ)法分析;當(dāng)參數(shù)值是true,第一次運(yùn)行what指定代碼時(shí)才進(jìn)行語(yǔ)法分析。

    instance,指明運(yùn)行作業(yè)的數(shù)據(jù)庫(kù)實(shí)例。

    force,如果是true,instance可以是任何正數(shù);如果是falseinstance指定的實(shí)例必須正在運(yùn)行。

    示例:

    var jobno number;

    begin

    dbms_job.submit(:jobno,'p_xxx_taxis;',trunc(sysdate)+(18/24),'trunc(sysdate+1,''hh'')');--每天18點(diǎn)執(zhí)行

    commit;

    end;

    上面這段話要在 命令窗口 下運(yùn)行,如在pl/sql developer里面的-->新鍵-->命令窗口

    這樣就會(huì)在每天的18點(diǎn)執(zhí)行存儲(chǔ)過(guò)程p_xxx_taxis。在我這里p_xxx_taxis執(zhí)行的是計(jì)算排行榜的任務(wù)。

    posted @ 2008-07-14 16:56 mashiguang 閱讀(4133) | 評(píng)論 (6)編輯 收藏

    僅列出標(biāo)題  下一頁(yè)
    主站蜘蛛池模板: 亚洲国产精品无码中文字| 亚洲精品在线不卡| 亚洲黄色在线电影| MM1313亚洲国产精品| a成人毛片免费观看| 久久久久久国产a免费观看黄色大片| 国产99视频精品免费视频7| 久久久久亚洲AV片无码| 国产成人精品久久亚洲高清不卡 | 丁香花在线观看免费观看图片 | 国产人在线成免费视频| 亚洲性久久久影院| 亚洲看片无码在线视频| 女人隐私秘视频黄www免费| 午夜毛片不卡高清免费| 久久综合九九亚洲一区| 最好2018中文免费视频| 日韩免费精品视频| 亚洲精品国产美女久久久| 亚洲av无码专区亚洲av不卡| 未满十八18禁止免费无码网站| 尤物永久免费AV无码网站| 亚洲午夜在线电影| 国产午夜亚洲精品不卡电影| 永久免费视频网站在线观看| 一本色道久久综合亚洲精品高清| 亚洲日本乱码卡2卡3卡新区| 国产精品免费观看调教网| 免费成人av电影| 亚洲日韩国产一区二区三区在线| 日韩中文字幕免费视频| 亚洲国产综合无码一区二区二三区| 亚洲欧洲另类春色校园网站| 久久精品免费一区二区三区| 亚洲成A∨人片天堂网无码| 在线亚洲午夜片AV大片| 午夜视频在线免费观看| 亚洲日韩精品一区二区三区无码| 亚洲国产成人手机在线观看| 狼群影院在线观看免费观看直播| 久久久久亚洲精品影视|