隨筆-10  評論-0  文章-1  trackbacks-0
            2009年11月13日
          以前用SVN以及CVS都是別人配置好的,只要裝一個客戶端就可以用了。今天在網上搜了一下,好不容易才配置好了,在此分享一下,以后要配置也可以看看,呵呵

          Subversion是SVN的服務端,下載地址:我下載的是svn-win32-1.6.5.zip,只要解壓就可以了。
          http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100&expandFolder=8100&folderID=91

          SVN客戶端的下載地址:
          http://tortoisesvn.net/downloads
          TortoiseSVN 是一個客戶端程序,用來與 subvers 服務器端通訊。Subversion 自帶一個客戶端程序 svn.exe ,但 TortoiseSVN 更好操作,提高效率。


          SVN服務端跟客戶端下載好了,接下來就可以安裝。
          我的服務端是解壓在D:/svn下,把SVN下bin的路徑在Windows環境里配置一下,Path指定為D:/svn/bin
          接下來就進入命令行,在運行里輸入CMD,進入命令行后,輸入以下命令:
          sc create svn binpath= "D:\svn1.6.5\bin\svnserve.exe --service -r D:\svn" displayname= "Subversion Server" depend= Tcpip start= auto

          這命令中的D:\svn1.6.5\bin\為服務端的路徑,D:\svn為存放SVN庫的路徑,以后所有的項目都存放在這里。這樣,SVN就交給Windows服務管理,服務名為svn。每次啟動電腦的時候就會自動啟動SVN服務,你也可以在Windows服務里更改啟動設置,比如:手動。

          如果不想交給Windows服務管理,你也可以在命令行輸入以下命令:
          sc detele svn //刪除名為svn的服務

          一旦定義了服務,就可以使用標準GUI工具(服務管理控制面板)進行停止、啟動和查詢,或者是通過命令行:
          net stop svn
          net start svn



          運行Subversion服務器需要首先要建立一個版本庫(Repository)。版本庫可以看作是服務器上集中存放和管理數據的地方。

          開始建立版本庫。以之前建立的D:\svn空文件夾作為所有版本庫的根目錄。然后,進入命令行輸入如下命令:

          svnadmin create d:\svn\repos1
          此命令在 d:\svn 下建立一個版本庫 repos1 。repos1 下面會自動生成一些文件夾和文件。

          我們也可以使用 TortoiseSVN 圖形化的完成這一步:

          先建立空目錄 d:\svn\repos1 ,注意一定是要空的。然后在 repos1 文件夾上“右鍵->TortoiseSVN->Create Repository here...”,然后可以選擇版本庫模式,這里使用默認的FSFS即可,然后就創建了一系列文件夾和文件,同命令行建立的一樣。

          如果subversion 服務還沒有開啟,需要啟動SVN服務,啟動SVN服務的方法有多種,沒有沒有交給Windows管理,可以在命令行中輸入:
          svnserve.exe --daemon --root d:\svn

          如果交給Windows服務管理,可以在命令窗口輸入:
          net start svn

          然后在TortoiseSVN中的版本庫瀏覽器URL輸入為:svn://localhost/repo1即可查看SVN里的文件。


          下面就是將我們的數據(項目)導入到這個版本庫,以后就由版本庫管理我們的數據。我們的任何改動都回被版本庫記錄下來,甚至我們自己丟失、改錯數據時版本庫也能幫我們找回數據。

          比如,我在 d:\wwwroot 下有個 guestbook 文件夾,里面存放的是我編寫的項目。在此文件夾上“右鍵 -> TortoiseSVN -> Import...” ,在彈出對話框的“URL of repository”輸入“svn://localhost/repos1/guestbook”。在“Import message”輸入“導入整個留言簿”作為注釋。
          點 OK 后要求輸入帳號。我們在用戶名和密碼處都輸入 用戶名跟密碼(如果沒有設置就不要輸入)。完成后 guestbook 中的內容全部導入到了 svn://localhost/repo1/guestbook 。

          我們看到在 d:\svn\repo1 沒有任何變化,連個 guestbook 文件夾都沒有建立,唯一的變化就是d:\svn\repo1容量變大了。實際上我們源guestbook中的內容已經導入 repo1 版本庫了,源 guestbook 文件夾可以刪除了。

          需要注意的是,這一步操作可以完全在另一臺安裝了 TortoiseSVN 的客戶機上進行。例如運行svnserve的主機的IP是133.96.121.22,則URL部分輸入的內容就是“svn://133.96.121.22/repo1/guestbook” 。



          配置用戶和權限

          用文本編輯器打開d:\svn\repos1\conf目錄,修改svnserve.conf:

          將:

          # password-db = passwd
          改為:

          password-db = passwd
          即去掉前面的 # 注釋符,注意前面不能有空格。

          然后修改同目錄的passwd文件,增加一個帳號:

          將:

          [users]
          # harry = harryssecret
          # sally = sallyssecret
          增加帳號:

          [users]
          #harry = harryssecret
          #sally = sallyssecret
          test = test



          基本操作流程

          1、取出(check out)

          取出版本庫到一個工作拷貝:

          來到任意空目錄下,比如在f分區建立一個空文件夾 f:\work 。“右鍵 -> SVN Checkout”。在“URL of repository”中輸入“svn://localhost/repo1/guestbook”,這樣我們就得到了一份 guestbook 中內容的工作拷貝。

          2、存入(check in)/提交(commit)

          在工作拷貝中作出修改并提交:

          在 guestbook 工作拷貝中隨便打開一個文件,作出修改,然后“右鍵 -> SVN Commit... ”。這樣我們就把修改提交到了版本庫,版本庫根據情況存儲我們提交的數據。

          在修改過的文件上“右鍵 -> TortoiseSVN -> Show Log” ,可以看到對這個文件所有的提交。在不同的 revision 條目上“右鍵 -> Compare with working copy”,我們可以比較工作拷貝的文件和所選 revision 版本的區別。



          如果要與eclipse或myeclipse集成,只須下一個eclipse插件就可以了。下面是插件的下載地址。
          http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 閱讀全文
          類別:j2ee編程 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/f101d9395ca492f93b87cee6.html
          posted @ 2009-11-13 11:38 niuky 閱讀(693) | 評論 (0)編輯 收藏
          前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發覺Spring的事務配置只要把思路理清,還是比較好掌握的。

          總結如下:

          Spring配置文件中關于事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。

          DataSource、TransactionManager這兩部分只是會根據數據訪問方式有所變化,比如使用Hibernate進行數據訪問 時,DataSource實際為SessionFactory,TransactionManager的實現為 HibernateTransactionManager。



          根據代理機制的不同,總結了五種Spring事務的配置方式,配置文件如下:

              第一種方式:每個Bean都有一個代理

          Java代碼
          1. <bean id="sessionFactory"    
          2.            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
          3.         <property name="configLocation" value="classpath:hibernate.cfg.xml" />    
          4.         <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  
          5.     </bean>    
          6.   
          7.     <!-- 定義事務管理器(聲明式的事務) -->    
          8.     <bean id="transactionManager"  
          9.        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
          10.         <property name="sessionFactory" ref="sessionFactory" />  
          11.     </bean>  
          12.      
          13.     <!-- 配置DAO -->  
          14.     <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">  
          15.         <property name="sessionFactory" ref="sessionFactory" />  
          16.     </bean>  
          17.      
          18.     <bean id="userDao"    
          19.        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">    
          20.            <!-- 配置事務管理器 -->    
          21.            <property name="transactionManager" ref="transactionManager" />       
          22.         <property name="target" ref="userDaoTarget" />    
          23.          <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />  
          24.         <!-- 配置事務屬性 -->    
          25.         <property name="transactionAttributes">    
          26.             <props>    
          27.                 <prop key="*">PROPAGATION_REQUIRED</prop>  
          28.             </props>    
          29.         </property>    
          30.     </bean>    
          31. lt;/beans>  

          第二種方式:所有Bean共享一個代理基類

          Java代碼
          1. <bean id="sessionFactory"    
          2.             class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
          3.          <property name="configLocation" value="classpath:hibernate.cfg.xml" />    
          4.          <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  
          5.      </bean>    
          6.   
          7.      <!-- 定義事務管理器(聲明式的事務) -->    
          8.      <bean id="transactionManager"  
          9.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
          10.          <property name="sessionFactory" ref="sessionFactory" />  
          11.      </bean>  
          12.       
          13.      <bean id="transactionBase"    
          14.             class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"    
          15.              lazy-init="true" abstract="true">    
          16.          <!-- 配置事務管理器 -->    
          17.          <property name="transactionManager" ref="transactionManager" />    
          18.          <!-- 配置事務屬性 -->    
          19.          <property name="transactionAttributes">    
          20.              <props>    
          21.                  <prop key="*">PROPAGATION_REQUIRED</prop>    
          22.              </props>    
          23.          </property>    
          24.      </bean>      
          25.      
          26.      <!-- 配置DAO -->  
          27.      <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">  
          28.          <property name="sessionFactory" ref="sessionFactory" />  
          29.      </bean>  
          30.       
          31.      <bean id="userDao" parent="transactionBase" >    
          32.          <property name="target" ref="userDaoTarget" />     
          33.      </bean>  
          34. </beans>

          第三種方式:使用攔截器

          Java代碼
          1. <bean id="sessionFactory"    
          2.             class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
          3.          <property name="configLocation" value="classpath:hibernate.cfg.xml" />    
          4.          <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  
          5.      </bean>    
          6.   
          7.      <!-- 定義事務管理器(聲明式的事務) -->    
          8.      <bean id="transactionManager"  
          9.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
          10.          <property name="sessionFactory" ref="sessionFactory" />  
          11.      </bean>   
          12.      
          13.      <bean id="transactionInterceptor"    
          14.         class="org.springframework.transaction.interceptor.TransactionInterceptor">    
          15.          <property name="transactionManager" ref="transactionManager" />    
          16.          <!-- 配置事務屬性 -->    
          17.          <property name="transactionAttributes">    
          18.              <props>    
          19.                  <prop key="*">PROPAGATION_REQUIRED</prop>    
          20.              </props>    
          21.          </property>    
          22.      </bean>  
          23.         
          24.      <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">    
          25.          <property name="beanNames">    
          26.              <list>    
          27.                  <value>*Dao</value>  
          28.              </list>    
          29.          </property>    
          30.          <property name="interceptorNames">    
          31.              <list>    
          32.                  <value>transactionInterceptor</value>    
          33.              </list>    
          34.          </property>    
          35.      </bean>    
          36.     
          37.      <!-- 配置DAO -->  
          38.      <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">  
          39.          <property name="sessionFactory" ref="sessionFactory" />  
          40.      </bean>  
          41. </beans>  

          第四種方式:使用tx標簽配置的攔截器

          Java代碼
          1. <context:annotation-config />  
          2.     <context:component-scan base-package="com.bluesky" />  
          3.   
          4.     <bean id="sessionFactory"    
          5.            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
          6.         <property name="configLocation" value="classpath:hibernate.cfg.xml" />    
          7.         <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  
          8.     </bean>    
          9.   
          10.     <!-- 定義事務管理器(聲明式的事務) -->    
          11.     <bean id="transactionManager"  
          12.        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
          13.         <property name="sessionFactory" ref="sessionFactory" />  
          14.     </bean>  
          15.   
          16.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
          17.         <tx:attributes>  
          18.             <tx:method name="*" propagation="REQUIRED" />  
          19.         </tx:attributes>  
          20.     </tx:advice>  
          21.      
          22.     <aop:config>  
          23.         <aop:pointcut id="interceptorPointCuts"  
          24.             expression="execution(* com.bluesky.spring.dao.*.*(..))" />  
          25.         <aop:advisor advice-ref="txAdvice"  
          26.             pointcut-ref="interceptorPointCuts" />          
          27.     </aop:config>        
          28. </beans>

          第五種方式:全注解

          Java代碼
          1. <context:annotation-config />  
          2.      <context:component-scan base-package="com.bluesky" />  
          3.   
          4.      <tx:annotation-driven transaction-manager="transactionManager"/>  
          5.   
          6.      <bean id="sessionFactory"    
          7.             class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
          8.          <property name="configLocation" value="classpath:hibernate.cfg.xml" />    
          9.          <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  
          10.      </bean>    
          11.   
          12.      <!-- 定義事務管理器(聲明式的事務) -->    
          13.      <bean id="transactionManager"  
          14.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
          15.          <property name="sessionFactory" ref="sessionFactory" />  
          16.      </bean>  
          17.       
          18. </beans>  

          此時在DAO上需加上@Transactional注解,如下:

          Java代碼
          1. package com.bluesky.spring.dao;  
          2.   
          3. import java.util.List;  
          4.   
          5. import org.hibernate.SessionFactory;  
          6. import org.springframework.beans.factory.annotation.Autowired;  
          7. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
          8. import org.springframework.stereotype.Component;  
          9.   
          10. import com.bluesky.spring.domain.User;  
          11.   
          12. @Transactional  
          13. @Component("userDao")  
          14. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {  
          15.   
          16.     public List<User> listUsers() {  
          17.         return this.getSession().createQuery("from User").list();  
          18.      }  
          19.       
          20.       
          21. }
          閱讀全文
          類別:j2ee編程 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/d60da5ecece8982e63d09fbc.html
          posted @ 2009-11-13 11:38 niuky 閱讀(372) | 評論 (0)編輯 收藏

          用myEclipse在進行javamail程序開發的時候,在準備階段就遇到問題,導入了所需的jar包之后運行時可出現以下的錯誤:
          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了.

          ps:最好將原來的jar包備份


          我一開始使用了merak郵件服務器,希望可以實現本地機的郵件收發,但是發現,其pop3和IMAP協議并非一直開啟,如果不開啟,則無法連接到郵件服務器。

          查詢到幾個郵件服務器的設置:

          163郵箱設置

          接收郵件服務器(pop、IMAP或HTTP):pop.163.com、

          發送郵件服務器(SMTP):smtp.163.com

          sina設置

          接收郵件服務器(pop、IMAP或HTTP):pop.sina.com.cn

          發送郵件服務器(SMTP):smtp.sina.com.cn

          tom設置

          接收郵件服務器(pop、IMAP或HTTP):pop.tom.com

          發送郵件服務器(SMTP)smtp.tom.com

          sohu設置

          接收郵件服務器(pop、IMAP或HTTP)pop3.sohu.com

          發送郵件服務器(SMTP):smtp.sohu.com

          126設置

          接收郵件服務器(pop、IMAP或HTTP):pop3.126.com

          發送郵件服務器(SMTP):smtp.126.com

          QQ郵箱的POP3服務器:
          pop.qq.com,SMTP服務器: smtp.qq.com

          開發代碼如下:

          import java.util.Date;
          import java.util.Properties;

          import javax.mail.Message;
          import javax.mail.Session;
          import javax.mail.Store;
          import javax.mail.Transport;
          import javax.mail.internet.InternetAddress;
          import javax.mail.internet.MimeMessage;

          import com.rjt.JavaMailWeb.Entity.User;

          public class MailClientSina {
          protected Session session;
          protected Store store;
          private String sendHost="smtp.sina.com.cn"; //發送郵件服務器
          private String receiveHost="pop.sina.com.cn"; //接收郵件服務器
          private String sendProtocol="smtp"; //發送郵件協議
          private String receiveProtocol="pop3"; //接收郵件協議
          private String username = "";
          private String password = "";
          private String fromAddr=""; //發送者地址
          private String toAddr=""; //接收者地址

          public void init()throws Exception{
          //設置屬性
          Properties props = new Properties();
          //props.put("mail.transport.protocol", sendProtocol);
          //props.put("mail.store.protocol", receiveProtocol);
          //props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
          //props.put("mail.imap.class", "com.sun.mail.imap.IMAPStore");
          //props.put("mail.pop3.class", "com.sun.mail.pop3.POP3Store");
          props.put("mail.smtp.host", sendHost); //設置發送郵件服務器
          props.put("mail.smtp.auth", "true");//需要經過授權,也就是有戶名和密碼的校驗,這樣才能通過驗證(一定要有這一條)
          SmtpAuth smtpAuth=new SmtpAuth(username,password);
          smtpAuth.getPasswordAuthentication();
          // 創建郵件Session對象
          session = Session.getDefaultInstance(props,smtpAuth);
          session.setDebug(true); //輸出跟蹤日志
          }

          public void close()throws Exception{
          store.close();
          }
          public void sendMessage(String fromAddr,String toAddr)throws Exception{
          try
          {
          //創建一個郵件
          Message msg = createSimpleMessage(fromAddr,toAddr);
          //創建一個Transport對象
          Transport transport=session.getTransport("smtp");
          //連接SMTP服務器
          transport.connect(sendHost,username, password);

          //發送郵件
          transport.send(msg,msg.getAllRecipients());
          }catch(Exception e)
          {
          System.out.print(e);
          }
          }

          public Message createSimpleMessage(String fromAddr,String toAddr)throws Exception{
          //創建一封純文本類型的郵件
          Message msg = new MimeMessage(session);
          InternetAddress[] toAddrs =InternetAddress.parse(toAddr, false);
          msg.setRecipients(Message.RecipientType.TO, toAddrs);
          msg.setSentDate(new Date());
          msg.setSubject("Register Success!");
          msg.setFrom(new InternetAddress(fromAddr));
          msg.setText("Success!");
          msg.saveChanges();
          return msg;
          }

          public static void main(String[] args)throws Exception {
          MailClientSina client=new MailClientSina();
          client.init();
          client.sendMessage(client.fromAddr,client.toAddr);
          // client.receiveMessage();
          }
          }

          //以下是SmtpAuth類的描述

          import javax.mail.Authenticator;
          import javax.mail.PasswordAuthentication;

          public class SmtpAuth extends Authenticator {
          String user,password;
          //設置賬號信息
          public SmtpAuth(String user,String password){
          this.user=user;
          this.password=password;
          }
          //取得PasswordAuthentication對象
          protected PasswordAuthentication getPasswordAuthentication(){
          return new PasswordAuthentication(user,password);
          }
          }

          閱讀全文
          類別:Java 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/e2cd99caef3f158fc81768b7.html
          posted @ 2009-11-13 11:38 niuky 閱讀(475) | 評論 (0)編輯 收藏

          一,先修改TOMCAT的配置文件server.xml ,在其中找到以下內容:
          <!-- Define a SSL HTTP/1.1 Connector on port 443 -->
          <!--
              <Connector port="443" maxHttpHeaderSize="8192"
                         maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                         enableLookups="false" disableUploadTimeout="true"
                         acceptCount="100" scheme="https" secure="true"
                         clientAuth="false" sslProtocol="TLS" />
          -->
              去掉注釋。
          二,到你的JDK的bin目錄下,執行下面代碼:
          %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
          $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA (Unix)

          //TOMCAT的初始密碼為changit,如果你在生成KEY時修改了密碼,則必須在server.xml中的Connector="443"中加上這個屬性: keystorePass="你修改的密碼"。

          此時,啟動TOMCAT,就可以訪問https://localhost:443

          三,在acegi Security中實現SSL,只須修改起配置文件(如:security.xml,一般為這個,或者是其他文件名)中的
          <bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
                  <property name="authenticationEntryPoint">
                      <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
                          <property name="loginFormUrl" value="/public/requireLogin.jsp"/>
                          <!--<property name="forceHttps" value="false"/> -->
                          <!-- in order to enable the https -->
                          <property name="forceHttps" value="true"/>
                          
                      </bean>
                  </property>
              </bean>
          //把其中的forceHttps的值改為true,這樣就可以對那些需要安全訪問的頁面自動轉為https://形式的URL。
          接著,再修改:
          <bean id="channelProcessingFilter" class="org.acegisecurity.securechannel.ChannelProcessingFilter">
                  <property name="channelDecisionManager" ref="channelDecisionManager"/>
                  <property name="filterInvocationDefinitionSource">
                      <value>
                          PATTERN_TYPE_APACHE_ANT
                          /admin/**=REQUIRES_SECURE_CHANNEL
                          /login*=REQUIRES_SECURE_CHANNEL
                          /j_security_check*=REQUIRES_SECURE_CHANNEL
                          /editProfile.html*=REQUIRES_SECURE_CHANNEL
                          /signup.html*=REQUIRES_SECURE_CHANNEL
                          /saveUser.html*=REQUIRES_SECURE_CHANNEL
                          /secure/**=REQUIRES_SECURE_CHANNEL           
                          /**=REQUIRES_INSECURE_CHANNEL   
                      </value>
                  </propert
          //在其中加入你想要實現安全訪問的頁面的URL,/**這個一定要放在最后面。REQUIRES_SECURE_CHANNEL這個表示需要安全通道,REQUIRES_INSECURE_CHANNEL 這個表示不需要。
          最后,再修改web.xml,在其中添加如下的過濾器:
          <!-- in order to enable the ssl http -->
              <filter>
                   <filter-name>Acegi Channel Processing Filter</filter-name>   
                   <filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
                   <init-param>
                         <param-name>targetClass</param-name>
                         <param-value>org.acegisecurity.securechannel.ChannelProcessingFilter</param-value>
                   </init-param>
             </filter>
          <filter-mapping>
                     <filter-name>Acegi Channel Processing Filter</filter-name>
                     <url-pattern>/*</url-pattern>
               </filter-mapping>

          這樣,就可以通過Acegi Security實現SSL訪問了。 閱讀全文
          類別:j2ee編程 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/6b7d22ddd55045d08c10291c.html
          posted @ 2009-11-13 11:38 niuky 閱讀(284) | 評論 (0)編輯 收藏

          Keytool使用指南:
          http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html

          Tomcat-ssl配置指南:
          http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html
          配置過程
          1.      生成 server key :
          以命令行方式切換到目錄%TOMCAT_HOME%,在command命令行輸入如下命令(jdk1.4以上帶的工具):
          keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
          用戶名輸入域名,如localhost(開發或測試用)或hostname.domainname(用戶擁有的域名),其它全部以 enter 跳過,最后確認,此時會在%TOMCAT_HOME%下生成server.keystore 文件。
          注:參數 -validity 指證書的有效期(天),缺省有效期很短,只有90天。
          2. 將證書導入的JDK的證書信任庫中:
          這步對于Tomcat的SSL配置不是必須,但對于CAS SSO是必須的,否則會出現如下錯誤:edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator。。。
          導入過程分2步,第一步是導出證書,第二步是導入到證書信任庫,命令如下:
          keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass changeit
          keytool -import -trustcacerts -alias tomcat -file server.cer -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit
          如果有提示,輸入Y就可以了。
          其他有用keytool命令(列出信任證書庫中所有已有證書,刪除庫中某個證書):
          keytool -list -v -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts
          keytool -delete -trustcacerts -alias tomcat -keystore D:/sdks/jdk1.5.0_11/jre/lib/security/cacerts -storepass changeit
          3. 配置TOMCAT :
          修改%TOMCAT_HOME%\conf\server.xml,以文字編輯器打開,查找這一行:
          xml 代碼
            

          將之后的那段的注釋去掉,并加上 keystorePass及keystoreFile屬性。
          注意,tomcat不同版本配置是不同的:
          Tomcat4.1.34配置:
          xml 代碼     <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"             port="8443" enableLookups="true" scheme="https" secure="true"             acceptCount="100"             useURIValidationHack="false" disableUploadTimeout="true"             clientAuth="false" sslProtocol="TLS"               keystoreFile="server.keystore"               keystorePass="changeit"/> Tomcat5.5.9配置:


          xml 代碼
            
          <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="server.keystore"    
                     keystorePass="changeit"/>  

          Tomcat5.5.20配置(此配置同樣可用于Tomcat6.0):

          xml 代碼
            
          <Connector protocol="org.apache.coyote.http11.Http11Protocol"    
                               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="server.keystore"    
                     keystorePass="changeit"/>  

          Tomcat6.0.10配置:

          xml 代碼
          <Connector protocol="org.apache.coyote.http11.Http11NioProtocol"  
                     port="8443" minSpareThreads="5" maxSpareThreads="75"  
                     enableLookups="true" disableUploadTimeout="true"    
                     acceptCount="100" maxThreads="200"  
                     scheme="https" secure="true" SSLEnabled="true"  
                     clientAuth="false" sslProtocol="TLS"  
                     keystoreFile="D:/tools/apache-tomcat-6.0.10/server.keystore"    
                     keystorePass="changeit"/>  

          tomcat6支持3種,請參考以下文檔:
          http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html
          驗證配置
          訪問 https://localhost:8443/
          <connector protocol="org.apache.coyote.http11.Http11NioProtocol"></connector>

          閱讀全文
          類別:j2ee編程 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/efe6389b5c7376bcc8eaf440.html
          posted @ 2009-11-13 11:38 niuky 閱讀(872) | 評論 (0)編輯 收藏
          快捷鍵(eclipse)
          1. 常用快捷鍵
          (1)Ctrl+Space
          說明:內容助理。提供對方法,變量,參數,javadoc等得提示,應運在多種場合,總之需要提示的時候可先按此快捷鍵。
          注:避免輸入法的切換設置與此設置沖突
          (2)Ctrl+Shift+Space
          說明:變量提示
          (3)Ctrl+/
          說明:添加/消除//注釋,在eclipse2.0中,消除注釋為Ctrl+&#92;
          (4)Ctrl+Shift+/
          說明:添加/* */注釋
          (5)Ctrl+Shift+&#92;
          說明:消除/* */注釋
          (6)Ctrl+Shift+F
          說明:自動格式化代碼
          (7)Ctrl+1 //*****************************
          說明:批量修改源代碼中的變量名,此外還可用在catch塊上.
          (8)Ctril+F6
          說明:界面切換
          (9)Ctril+Shift+M
          說明:查找所需要得包
          (10)Ctril+Shift+O
          說明:自動引入所需要得包
          (11)Ctrl+Alt+S
          說明:源代碼得快捷菜單。其中的Generate getters and setters 和 Surround with try/catch
          block比較常用.建議把它們添加為快捷鍵.快捷鍵設置在windows->preferences->Workbench->Keys
          2. 快捷鍵列表
          編輯
          作用域 功能 快捷鍵
          全局 查找并替換 Ctrl+F
          文本編輯器 查找上一個 Ctrl+Shift+K
          文本編輯器 查找下一個 Ctrl+K
          全局 撤銷 Ctrl+Z
          全局 復制 Ctrl+C
          全局 恢復上一個選擇 Alt+Shift+↓
          全局 剪切 Ctrl+X
          全局 快速修正 Ctrl1+1
          全局 內容輔助 Alt+/
          全局 全部選中 Ctrl+A
          全局 刪除 Delete
          全局 上下文信息 Alt+?Alt+Shift+?Ctrl+Shift+Space
          Java編輯器 顯示工具提示描述 F2
          Java編輯器 選擇封裝元素 Alt+Shift+↑
          Java編輯器 選擇上一個元素 Alt+Shift+←
          Java編輯器 選擇下一個元素 Alt+Shift+→
          文本編輯器 增量查找 Ctrl+J
          文本編輯器 增量逆向查找 Ctrl+Shift+J
          全局 粘貼 Ctrl+V
          全局 重做 Ctrl+Y
          查看
          作用域 功能 快捷鍵
          全局 放大 Ctrl+=
          全局 縮小 Ctrl+-
          窗口
          作用域 功能 快捷鍵
          全局 激活編輯器 F12
          全局 切換編輯器 Ctrl+Shift+W
          全局 上一個編輯器 Ctrl+Shift+F6
          全局 上一個視圖 Ctrl+Shift+F7
          全局 上一個透視圖 Ctrl+Shift+F8
          全局 下一個編輯器 Ctrl+F6
          全局 下一個視圖 Ctrl+F7
          全局 下一個透視圖 Ctrl+F8
          文本編輯器 顯示標尺上下文菜單 Ctrl+W
          全局 顯示視圖菜單 Ctrl+F10
          全局 顯示系統菜單 Alt+-
          導航
          作用域 功能 快捷鍵
          Java編輯器 打開結構 Ctrl+F3
          全局 打開類型 Ctrl+Shift+T
          全局 打開類型層次結構 F4
          全局 打開聲明 F3
          全局 打開外部javadoc Shift+F2
          全局 打開資源 Ctrl+Shift+R
          全局 后退歷史記錄 Alt+←
          全局 前進歷史記錄 Alt+→
          全局 上一個 Ctrl+,
          全局 下一個 Ctrl+.
          Java編輯器 顯示大綱 Ctrl+O
          全局 在層次結構中打開類型 Ctrl+Shift+H
          全局 轉至匹配的括號 Ctrl+Shift+P
          全局 轉至上一個編輯位置 Ctrl+Q
          Java編輯器 轉至上一個成員 Ctrl+Shift+↑
          Java編輯器 轉至下一個成員 Ctrl+Shift+↓
          文本編輯器 轉至行 Ctrl+L
          搜索
          作用域 功能 快捷鍵
          全局 出現在文件中 Ctrl+Shift+U
          全局 打開搜索對話框 Ctrl+H
          全局 工作區中的聲明 Ctrl+G
          全局 工作區中的引用 Ctrl+Shift+G
          文本編輯
          作用域 功能 快捷鍵
          文本編輯器 改寫切換 Insert
          文本編輯器 上滾行 Ctrl+↑
          文本編輯器 下滾行 Ctrl+↓
          文件
          作用域 功能 快捷鍵
          全局 保存 Ctrl+X Ctrl+S
          全局 打印 Ctrl+P
          全局 關閉 Ctrl+F4
          全局 全部保存 Ctrl+Shift+S
          全局 全部關閉 Ctrl+Shift+F4
          全局 屬性 Alt+Enter
          全局 新建 Ctrl+N
          項目
          作用域 功能 快捷鍵
          全局 全部構建 Ctrl+B
          源代碼
          作用域 功能 快捷鍵
          Java編輯器 格式化 Ctrl+Shift+F //*****************
          Java編輯器 取消注釋 Ctrl+&#92;
          Java編輯器 注釋 Ctrl+/
          Java編輯器 添加導入 Ctrl+Shift+M
          Java編輯器 組織導入 Ctrl+Shift+O
          Java編輯器 使用try/catch塊來包圍 未設置,太常用了,所以在這里列出,建議自己設置。也可以使用Ctrl+1自動修正。
          運行
          作用域 功能 快捷鍵
          全局 單步返回 F7
          全局 單步跳過 F6
          全局 單步跳入 F5
          全局 單步跳入選擇 Ctrl+F5
          全局 調試上次啟動 F11
          全局 繼續 F8
          全局 使用過濾器單步執行 Shift+F5
          全局 添加/去除斷點 Ctrl+Shift+B
          全局 顯示 Ctrl+D
          全局 運行上次啟動 Ctrl+F11
          全局 運行至行 Ctrl+R
          全局 執行 Ctrl+U
          重構
          作用域 功能 快捷鍵
          全局 撤銷重構 Alt+Shift+Z
          全局 抽取方法 Alt+Shift+M
          全局 抽取局部變量 Alt+Shift+L
          全局 內聯 Alt+Shift+I
          全局 移動 Alt+Shift+V
          全局 重命名 Alt+Shift+R
          全局 重做 Alt+Shift+Y
          閱讀全文
          類別:j2ee編程 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/5c8243c212f8733de4dd3b12.html
          posted @ 2009-11-13 11:38 niuky 閱讀(1630) | 評論 (0)編輯 收藏

          本文主要以Spring為核心來總結一些以前web開發常用的開源工具和開源類庫。

          1.持久層

          1) Hibernate

          這個不用介紹了,用的很頻繁,用的比較多的是映射,包括繼承映射和父子表映射

          對于DAO在這里介紹個在它基礎上開發的包bba96,目前最新版本是bba96 2.0它對Hibernate進行了封裝, 查詢功能包括執行hsql或者sql查詢/更新的方法,如果你要多層次邏輯的條件查詢可以自己組裝QueryObject.可以參考它做HibernateDAO.也可以直接利用它

          2) iBATIS

          另一個ORM工具,Apache的,沒有Hibernate那么集成,自由度比較大

          2.SpringMVC

          原理說明和快速入門:

          配置文件為:

          Spring的配置文件默認為WEB-INF/xxxx-servelet.xm其中xxx為web.xml中org.springframework.web.servlet.DispatcherServlet的servlet-name。

          Action分發:

          Spring將按照配置文件定義的URL,Mapping到具體Controller類,再根據URL里的action= xxx或其他參數,利用反射調用Controller里對應的Action方法。

          輸入數據綁定:

          Spring提供Binder 通過名字的一一對應反射綁定Pojo,也可以直接從request.getParameter()取數據。

          輸入數據驗證

          Sping 提供了Validator接口當然還可以使用開源的Commons-Validaor支持最好

          Interceptor(攔截器)

          Spring的攔截器提供接口需要自己編寫,在這點不如WebWork做的好.全面

          (這里提一下WebWork和Struts的區別最主要的區別在于WebWork在建立一個Action時是新New一個對象而Struts是SingleMoule所有的都繼承它的一個Action,所以根據項目需要合適的選擇.)

          3.View層

          1) 標簽庫:JSP2.0/JSTL

          由于Webwork或Spring的標簽確實很有限,一般view層用JSTL標簽,而且據說JSTL設計很好速度是所有標簽中最快的使用起來也很簡單

          2) 富客戶端:DOJO Widgets, YUI(YahooUI),FCKEditor, Coolest日歷控件

          Dojo主要提供Tree, Tab等富客戶端控件,可以用其進行輔助客戶端開發

          YahooUI和DOJO一樣它有自己的一套javascript調試控制臺,主要支持ajax開發也有很多Tree,Table,Menu等富客戶端控件

          FCKEditor 最流行的文本編輯器

          Coolest日歷控件 目前很多日歷控件可用,集成在項目中也比較簡單,這個只是其中的一個,界面不錯的說..

          3) JavaScript:Prototype.js

          Prototype.js作為javascript的成功的開源框架,封裝了很多好用的功能,通過它很容易編寫AJAX應用,現在AJAX技術逐漸成熟,框架資源比較豐富,比如YUI,DWR等等,也是因為JavaScript沒有合適的調試工具,所以沒有必要從零開始編寫AJAX應用,個人認為多用一些成熟的Ajax框架實現無刷新更新頁面是不錯的選擇.

          4)表格控件:Display Tag ,Extreme Table

          這兩個的功能差不多,都是View層表格的生成,界面也比較相向,可以導出Excel,Pdf,對Spring支持很容易.

          相比較而言比較推薦ExtremeTable,它的設計很好功能上比DisplayTag多一些,支持Ajax,封裝了一些攔截器,而且最方面的是在主頁wiki中有詳細的中文使用文檔.

          5):OSCache

          OSCache是OpenSymphony組織提供的一個J2EE架構中Web應用層的緩存技術實現組件,Cache是一種用于提高系統響應速度、改善系統運行性能的技術。尤其是在Web應用中,通過緩存頁面的輸出結果,可以很顯著的改善系統的穩定性和運行性能。

          它主要用在處理短時間或一定時間內一些數據或頁面不會發生變化,或將一些不變的統計報表,緩沖在內存,可以充分的減輕服務器的壓力,防治負載平衡,快速重啟服務器(通過硬盤緩存).

          6)SiteMesh

          sitemesh應用Decorator模式主要用于提高頁面的可維護性和復用性,其原理是用Filter截取request和response,把頁面組件head,content,banner結合為一個完整的視圖。通常我們都是用include標簽在每個jsp頁面中來不斷的包含各種header, stylesheet, scripts and footer,現在,在sitemesh的幫助下,我們刪掉他們輕松達到復合視圖模式.

          Sitemesh也是 OpenSymphony的一個項目現在最近的版本是2.2,目前OpenSymphony自從04年就沒有更新的版本了..感覺它還是比較有創新的一種頁面組裝方式, OpenSymphony開源組織的代碼一般寫的比較漂亮,可以改其源代碼對自己的項目進行適配.

          測試發現Sitemesh還存在一些問題,比如中文問題,它的默認編碼是iso-8859-1在使用時候需要做一些改動.

          7)CSS,XHTML

          這個不用說了,遵循W3C標準的web頁面開發.

          8)分頁標簽: pager-taglib組件

          Pager-taglib 是一套分頁標簽庫,可以靈活地實現多種不同風格的分頁導航頁面,并且可以很好的與服務器分頁邏輯分離.使用起來也比較簡單.

          9)Form: Jodd Form taglib

          Jodd Form taglib使用比較簡單,只要把form的頭尾以包住

          就會自動綁定mybean, 自動綁定mybean的所有同名屬性到普通html標記input, selectbox, checkbox,radiobox.....在這些input框里不用再寫任何代碼…

          10)Ajax:DWR

          J2EE應用最常用的ajax框架

          11)報表 圖表

          Eclipse BIRT功能比較強大,也很龐大..好幾十M,一般沒有特別需求或別的圖表設計軟件可以解決的不用它

          JasperReports+ iReport是一個基于Java的開源報表工具,它可以在Java環境下像其它IDE報表工具一樣來制作報表。JasperReports支持PDF、HTML、XLS、CSV和XML文件輸出格式。JasperReports是當前Java開發者最常用的報表工具。

          JFreeChart主要是用來制作各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。

          琴棋報表,國產的..重點推薦,適合中國的情況,開放源代碼,使用完全免費。純JAVA開發,適用多種系統平臺。特別適合B/S結構的系統。官方網站有其優點介紹,看來用它還是不錯的選擇,最重要的是支持國產呵呵

          4.權限控制: Acegi

          Acegi是Spring Framework 下最成熟的安全系統,它提供了強大靈活的企業級安全服務,如完善的認證和授權機制,Http資源訪問控制,Method 調用訪問控制等等,支持CAS

          (耶魯大學的單點登陸技術,這個單點登陸方案比較出名.我也進行過配置使用,可以根據項目需要,如果用戶分布在不同的地方不同的系統通用一套登陸口令可以用它進行解決,一般注冊機登陸機就是這樣解決的)

          Acegi只是于Spring結合最好的安全框架,功能比較強大,當然還有一些其他的安全框架,這里列舉一些比較流行的是我從網上找到的,使用方法看其官方文檔把…

          JAAS, Seraph, jSai - Servlet Security, Gabriel, JOSSO, Kasai, jPAM, OpenSAML都是些安全控制的框架..真夠多的呵呵

          5.全文檢索

          1) Lucene

          Lucene是一套全文索引接口,可以通過它將數據進行倒排文件處理加入索引文件,它的索引速度和查詢速度是相當快的,查詢百萬級數據毫秒級出結果,現在最火的Apache開源項目,版本更新速度很快現在已經到了2.0,每個版本更新的都比較大,目前用的最多的版本應該是1.4.3,但它有個不太方面的地方單個索引文件有2G文件限制,現在2.0版本沒有這個限制,我研究的比較多,它的擴展性比較好,可以很方面的擴充其分詞接口和查詢接口.

          基于它的開發的系統很多,比如最常用的Eclipse的搜索功能,還有一些開源的軟件比如Compass,Nutch,Lius,還有我最近做的InSearch(企業級FTP文件網頁搜索) < form> < /form>

          6.公共Util類

          主要是Jakarta-Commons類庫,其中最常用得是以下幾個類庫

          1) Jakarta-Commons-Language

          最常用得類是StringUtils類,提供了使用的字符串處理的常用方法效率比較高

          2) Jakarta-Commons-Beantuils

          主要用Beantuils能夠獲得反射函數封裝及對嵌套屬性,map,array型屬性的讀取。

          3) Jakarta-Commons-Collections

          里面有很多Utils方法

          7.日志管理

          Log4J

          任務是日志記錄,分為Info,Warn,error幾個層次可以更好的調試程序

          8 開源的J2EE框架

          1) Appfuse

          Appfuse是Matt Raible 開發的一個指導性的入門級J2EE框架, 它對如何集成流行的Spring、Hibernate、iBatis、Struts、Xdcolet、JUnit等基礎框架給出了示范. 在持久層,AppFuse采用了Hibernate O/R映射工具;在容器方面,它采用了Spring,用戶可以自由選擇Struts、Spring/MVC,Webwork,JSF這幾個Web框架。

          2) SpringSide

          SpringSide較完整的演示了企業應用的各個方面,是一個電子商務網站的應用 SpringSide也大量參考了Appfuse中的優秀經驗。最重要的是它是國內的一個開源項目,可以了解到國內現在的一些實際技術動態和方向很有指導意義…

          9.模版 Template

          主要有Veloctiy和Freemarker

          模板用Servlet提供的數據動態地生成 HTML。編譯器速度快,輸出接近靜態HTML頁面的速度。

          10.工作流

          主要有JBpm Shark Osworkflow.

          項目管理軟件

          dotProject:是一個基于LAMP的開源項目管理軟件。最出名的項目管理軟件

          JIRA: 項目計劃,任務安排,錯誤管理

          Bugzilla:提交和管理bug,和eclipse集成,可以通過安裝MyEclipse配置一下即可使用

          BugFree借鑒微軟公司軟件研發理念、免費開放源代碼、基于Web的精簡版Bug管理

          CVS:這個就不介紹了都在用.

          SVN: SubVersion已逐漸超越CVS,更適應于JavaEE的項目。Apache用了它很久后,Sourceforge剛剛推出SVN的支持。

          測試用例:主要JUnit單元測試,編寫TestCase,Spring也對Junit做了很好的支持

          后記:

          以Spring為主的應用開發可選用的組件中間件真是眼花繚亂,所以針對不同的項目需求可以利用不同的開源產品解決,比如用Spring+Hibernate/ iBATIS或Spring+WebWork+Hibernate/ iBATIS或Spring+Struts+Hibernate/ iBATIS,合理的框架設計和代碼復用設計對項目開發效率和程序性能有很大的提高,也有利于后期的維護。

          (責任編輯:龔勛)

          閱讀全文
          類別:j2ee編程 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/4046a8c26b6f21130ff47728.html
          posted @ 2009-11-13 11:38 niuky 閱讀(234) | 評論 (0)編輯 收藏

          David Heinemeier Hansson 受雇與 37 Signal ,但是仍然可以自己選擇建立自己的 Rails 框架來完成項目,他應該算是個"主動程序員"。Firebird 數據庫的領導者同時也是 Interbase 數據庫的創始人 Jim Starkey 將自己的公司賣給了 Mysql AB 而不得不給 Mysql 干活,從某方面說,他應該是個"被動程序員"。大多數第三世界國家的程序員應該屬于"被動程序員",他們編程只是為了一份養家糊口的工作,他們無權選擇自 己喜歡的編程語言或者框架,因為這是公司給他選擇的,因為如果選了其他,他可能就找不到工作了。曾經有個即將離職的同事讓我給他推薦一個比較好的編程框 架,可以很容易完成一個網站的制作,我給他推薦了 Zope, 還有 Rails, 他聽我的介紹覺得不錯 ,當我告訴他必須學習 python 和 Ruby 編程語言時,他顯得很驚愕,"那能找到工作嗎?"。這話其實也表達了大多數國內程序員的想法。看看招聘網站就知道,現在最需要的程序員是 Java 程序員,最需要了解的框架是 Struts。如果不會你很難得到面試的機會,所以就算你不會也要在自己的簡歷中"修飾"一下。

             有些自己創業的人可以自己選擇喜歡的編程語言和框架,當然那畢竟是少數。如果我能夠選擇的話,我肯定不用 Java 來做網站應用。因為它完成一個簡單的工作太麻煩了,很難快速適應需求的變化。當然我也不會去用 PHP ,因為我已經習慣了面向對象的編程方式了。 我發現一個奇怪的現象:大多數轉向學習 Ruby on rails 框架的人都是來自 Java 陣營的程序員,而轉向Python 框架Zope,django 的程序員大多有 ASP,PHP 背景。因為 Ruby 是一個真正的面向對象的語言, 它同時具備了腳本語言的特點,而 Python 首先是一個腳本語言,它具備了一些 OO 的特征。Java 程序員 很難忍受走回頭路,所以他們選擇了一個比Java更面向對象的語言 Ruby ,而PHP,ASP程序員沒有那么重的思想負擔,他們選擇 Python 可能是因為它的代碼更 Beauty ,遠比他們以前寫的"意大利面條"式的PHP,ASP 代碼要干凈的多。

            無論是 python, 還是 Ruby 這些非主流程序語言開發的框架,使用起來都異常的簡便,他們可謂是真正從程序員角度考慮的框架。為什么 Ruby 一出,攪的 Java 的世界一片混亂,我想原因還是出在 Java 這里,當 Java 程序員想當然地認為程序開發應該如此麻煩的時候,Rails 的出現讓他們立刻覺得被這些所謂的 Java 流行框架和 Sun 給欺騙了,這種欺騙是如此之深,以至于他們中間有的人"頭也不回"的離開了 Java, 轉而攻擊 Java 的種種不是。這其中比較有名的人就是 Bruce Tate ,這位老兄寫了兩本轟動 Java 世界的書,Spring: A Developer's Notebook 和 Better, Faster, Lighter Java (該書可是獲得 Jolt 大獎的,恰好我還都讀過),隨著 Rails 的流行,這位仁兄立刻叛逃出 Java 陣營,寫了 Beyond Java 一書,著重介紹了一些非Java 框架,比如 Smalltalk 的Seaside, 和 Rails。

            Java 為什么這么復雜,我想了很久,得出這么個結論:這是因為 Sun 希望它那么復雜。為什么這么說呢?Sun 不是一個好的軟件公司,它最擅長做的是制定規范,這很類似Java 編程中的 Interface, 經常編寫 Java 程序的人,會發現 Interface 可能是出現最多的一個詞匯了,任何框架中都充滿了Interface —接口,大多數編程書都推薦面向接口編程(當然這不是Java的錯,是設計模式要求的,不過 Java 將此發揮的最好)。首先定義接口,然后針對接口編寫不同的實現,至少提供默認的實現。Sun 也是如此,看看 J2ee 的規范包含了多少 J 打頭的技術, JDBC,JNI,JCA,JDO,JPA .... ,現在的 JCP 組織更加如此,每隔一段時間,就有大量的規范問世,Draft 的,還是 Final 的,充斥著Java 世界,這是 Sun 希望的, 每定義一個規范,就會有很多廠商來實現它,Java 的軟件市場就做大了,這樣 Sun 就可以靠授權,認證拿更多的錢,你看 Sun 的股票那么低迷,而卻擁有那么雄厚的流動資金,原因再明白不過了,只要 Sun 還擁有 Java ,它就擁有了一切。

            Sun 希望 Java 變得復雜,就如同程序員希望 Perl 代碼難看一樣,這樣做是可以帶來好處的。Java 的復雜性也帶來了產業鏈上其他行業的繁榮,比如咨詢,在 Php ,Perl 流行 Internet 的年代,網站開發似乎還不需要咨詢師,包括 C/S 盛行的時候,企業開發也不需要咨詢師,然而隨著 J2EE 逐步主宰企業級開發,咨詢行業也開始興旺起來。企業大把大把的把錢投入到開發咨詢中,究竟效果如何,不得而知。我想對大多數程序員,尤其是那些有自己想法 的程序員來說,請求咨詢公司,還不如自己去了解來得清楚。軟件開發咨詢師在我看來,有點象是"律師"—"代表貪婪的公司,讓這個世界變得更糟糕一些"(中 Alex 的對白)。如果說國外的咨詢師是希望通過主觀的努力來解決客觀存在的開發復雜性的話,那么國內的咨詢行業可能把原本復雜的軟件開發變得更加復雜了。我不相 信他們,我寧可選擇某個軟件的培訓,而不希望有人來從頭到尾指點你如何開發,因為國內咨詢師的水平比你從書本上了解的高不到哪里去,公司又何必花費這筆冤 枉錢呢。

            那么如果你是個"主動程序員",你會跟著 Sun 的指揮棒走嗎? 我想離開 Java 世界,你選擇的機會應該很多,但是前提是:你愿不愿意離開 Java 。因為大多數人覺得改變現狀其實并不是個好事情,學習一個新語言和框架意為著你過去所有的經驗就消失了,這其中有風險。對大多數程序員 來說,編程其實就是份工作,跟賣盒飯,裝機器沒什么區別,只要搞好本職工作就可以。試圖改變現狀的人很痛苦,了解差異的人也是如此,就如同 Neo 在接受紅藥丸和藍藥丸。

            我在當年學習 Perl 的時候曾經買過一本《Learning perl》,書的作者曾經這么說,學習 Perl 是為了讓自己把更多的時間用在去滑雪, PHP 的創始人 Rasmus Lerdorf 也曾經這樣表示過,他希望自己能夠減少盯著電腦的時間,可是這么多年過去了,他發現自己還是要繼續盯著該死的電腦。其實我對選擇框架語言也并沒什么興趣, 我只是希望能夠以簡單的方式完成工作,而把時間省下來去聽聽音樂,看看電影。實際上我跟不希望改變現狀的人沒什么不同,他們不希望學習新的東西,因為現有 的東西很熟悉了,學習新框架,還不如把時間放到玩上去,我的目的一樣,我學習只是希望自己的工作更輕松一點,這樣可以用更多的時間來玩。所以每當我看到各 種技術論壇上充斥著Java, .net , ROR ,Python 之類的爭吵,我都覺得很好笑。其實為了維護一個語言而爭吵最沒有意義。編程語言就和英語,計算機一樣,就是個工具,選擇它們只是為了盡可能簡單地完成工 作,提高生活質量。為了語言而語言,為了框架而框架都是沒必要的。"主動程序員"可以選擇自己的方式來工作,這是大多數人做不到的。如果有可能,我也希望 做一個"主動程序員"。


          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/tianya111/archive/2007/03/12/1527176.aspx

          閱讀全文
          類別:美文轉載 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/b8ec6b09c02b9cc73bc76395.html
          posted @ 2009-11-13 11:38 niuky 閱讀(152) | 評論 (0)編輯 收藏

          50多個強大的jQuery插件應用實例

          原文:50+ Amazing Jquery Examples- Part1

          jQuery是近段時間里比較流行的一個JavaScript框架,不斷有使用者開發出新的 jQuery插件。下面收集了50個開發者最喜歡使用的jQuery插件。這僅僅是第一個系列,你先品嘗,第二道大餐即將到來。
          Sliding Panels -滑動門控制
          1) Sliding Panels For jQuery -元素可以展開或關閉,創建出手風琴的滑動效果。

          j37 50多個強大的jQuery插件應用實例

          (2) jQuery Collapse -這個jQuery插件同樣點擊后滑動展開或關閉DIV層。
          Menu - 菜單
          3) LavaLamp

          menu

          (4) A Navigation Menu- 錨鏈接的無序列表嵌套, 可以添加2級菜單

          menu

          (5) SuckerFish Style

          menu

          Tabs - 選項卡
          6) jQuery UI Tabs / Tabs 3 - 基于 jQuery 的一個Tab選項卡導航

          j12 50多個強大的jQuery插件應用實例

          (7) TabContainer Theme - 當用戶在選項卡之間進行切換時,產生JQuery風格的淡出動效果。

          j23 50多個強大的jQuery插件應用實例
          Accordion- 手風琴效果
          8 ) jQuery Accordion

          Demo
          accordion

          (9) Simple JQuery Accordion menu

          accordion
          SlideShows - 幻燈片
          10) jQZoom-讓你在你的網頁上很簡單的實現圖片的縮放功能。

          rating

          (11) Image/Photo Gallery Viewer- 一個圖像/相片的畫廊展示插件。可以讓你對圖片進行分組、并產生像Flash一樣的多種瀏覽特效。

          rating
          Transition Effects - 過渡特效
          12) InnerFade - 可以讓網頁中的任何元素產生淡化效果

          j13 50多個強大的jQuery插件應用實例

          (13) Easing Plugin-另外一個簡單的過渡效果插件

          (14) Highlight Fade

          (15) jQuery Cycle Plugin- 擁有多種過渡效果的一個Gallery插件。

          accordion

          奇幻的jQuery
          16) Riding carousels with jQuery - 這個jQuery插件可以生成一個水平或垂直的列表,并且允許你控制DIV層的滑動顯示。

          Demo :
          j9 50多個強大的jQuery插件應用實例

          Color Picker -拾色器
          17) Farbtastic -這個 jQuery 插件可以讓你通過Javascript添加一個或多個拾色器widgets到一個頁面中。

          Demo :
          j36 50多個強大的jQuery插件應用實例

          (18) jQuery Color Picker
          LightBox -燈箱效果
          19) jQuery ThickBox - is a webpage user interface dialog widget written in JavaScript.

          Demo :

          j10 50多個強大的jQuery插件應用實例

          (20) SimpleModal Demos - its goal is providing developers with a cross-browser overlay and container that will be populated with content provided to SimpleModal.

          Demo :

          j17 50多個強大的jQuery插件應用實例

          (21) jQuery lightBox Plugin - simple, elegant, unobtrusive, no need extra markup and is used to overlay images on the current page through the power and flexibility of jQuery′s selector.

          Demo :

          j7 50多個強大的jQuery插件應用實例

          (
          iframe
          22) JQuery iFrame Plugin

          j38 50多個強大的jQuery插件應用實例
          Form Validation -表單驗證器
          23) Validation - 有一套完整相當的形式驗證規則。該插件還動態地創建ID和聯系信息。

          Demo :

          f9 50多個強大的jQuery插件應用實例

          (24) Ajax Form Validation - 在客戶端使用jquery驗證的一種形式,它可以驗證用戶名是否有效等。

          Demo :

          j11 50多個強大的jQuery插件應用實例

          (25) jQuery AlphaNumeric -歡迎對對表單域中的某些字符進行限制

          j16 50多個強大的jQuery插件應用實例
          Form Elements - 表單事件
          j15 50多個強大的jQuery插件應用實例

          (26) jquery.Combobox - 從現在的選擇元素中創建一個個性的HTML組合 Demo is here.

          (27) jQuery Checkbox -樣式化選擇框,從而提高交互能力。

          (28) File Style Plugin for jQuery -File Style插件讓你可以使用圖像做為文件瀏覽按鈕,你還可以樣式化文件名稱區域。
          Star Rating - 星形評級系統
          rating

          (29) Simple Star Rating System

          30)Half-Star Rating Plugin
          ToolTips -提示工具
          31) Tooltip Plugin Examples - 一個花俏的提示應用。 可以對提示信息進行自定義位置, 設置陰影效果和添加更多內容等.你可以點擊demo 演示.

          (32) The jQuery Tooltip

          tool tip
          Tables Plugins -表格插件
          33) Zebra Tables Demo -使用jQuery來創建出斑馬線風格的數據表格,鼠標懸浮時能改變背景色。

          Demo :

          zebra tables

          (34) Table Sorter Plugin - 把一個標準的HTML表格分解成Thead和Tbody標簽構成的分類表格,不需要刷新。它能夠成功地解析和整理多種類型的數據,包括聯系資料。

          table sorter

          (35) AutoScroll for jQuery -可以生成網頁表格的熱點自動滾動效果

          auto scroll

          (36) Scrollable HTML table plugin- 用來轉換表格為普通的滾動HTML。不需要額外的編碼。

          Demo :

          Scrollable table
          Draggable Droppables And Selectables 拖拽
          37) Sortables - 一個簡單強大的拖拽插件。

          sort

          (38) Draggables and droppables- 這是一個很好的演示。用來實現拖拽樹形菜單項目的操作

          drag drop
          Style Switcher - 切換風絡
          39) Switch stylesheets with jQuery允許訪客選擇他們喜歡的網站樣式,使用了Cookie記錄,也就是同一個用戶下次再訪問時,除非他不切換,否則會保留他選擇的樣式。

          Demo演示.
          Rounded Corners 圓角效果
          40) jQuery Corner Demo

          rounded corners

          (41) JQuery Curvy Corners- 這個插件可以讓你生成光滑、無鋸齒的圓角效果。

          rounded corners
          Must See jQuery Examples 應該了解的一些jQuery應用實例
          42) jQuery Air - 一個非常非常特別的客戶管理界面應用插件,太特別了,太太太特別了。

          Demo :

          j6 50多個強大的jQuery插件應用實例

          (43) HeatColor

          Demo :

          j19 50多個強大的jQuery插件應用實例

          (44) Simple jQuery Examples

          (45) Date Picker -一個靈活個性的jQuery日歷組件。

          Demo :

          j32 50多個強大的jQuery插件應用實例

          (46) ScrollTo -這個jQuery插件可以讓你實現當點擊鏈接時中滾動到頁面中的某一對象

          (47) 3-Column Splitter Layout 一個3欄布局分配插件。

          j29 50多個強大的jQuery插件應用實例

          (48) Pager jQuery -一個小巧的 jQuery插件,用來增加分頁的頁碼效果

          j33 50多個強大的jQuery插件應用實例

          (49) Select box manipulation

          (50) Cookie Plugin for jQuery

          51) JQuery BlockUI Plugin

          j41 50多個強大的jQuery插件應用實例

          標簽: , , , , , , , , , , , , , ,

          閱讀全文
          類別:Jquery 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/81f105f71983732a730eecc9.html
          posted @ 2009-11-13 11:38 niuky 閱讀(731) | 評論 (0)編輯 收藏
                現在很多朋友用jQuery來編寫javascript啦,要是有jQuery的代碼提示功能就更好了,其實有很多這樣的插件,這里就說說Spket吧!       

                  以下內容轉自http://www.cnblogs.com/meetrice/archive/2008/06/16/1223146.html

                                          http://blog.sina.com.cn/s/blog_4b81125f0100bhxy.html

          1. Spket的安裝(三種方式):

              (1)Plugin:
                  最低要求: eclipse平臺運行時3.2.x ,
                  文件為: spket-1.6.16.zip別的插件的安裝無異,相信不用我多說了吧
               (2)Spket IDE:
                  最低要求:你需要java 1.5或更高版本運行安裝程序,可獨立使用(不用裝Eclipse
                   文件為: spket-1.6.16.jar
                  安裝步驟:

                      1、打開cmd,

                      2、在spket-1.6.16.jar文件目錄下輸入java -jar spket-1.6.16.jar
                       3、回車(相信你已看到安裝畫面
              (3)Update Site
                       這是更新網站,為spket的ide 。
                       使用它,打開eclipse的updatemanager (在eclipse下的幫助菜單) ,并新增一個書簽為:
                       http://www.spket.com/update

          2. Elipse開發jQuery環境設置(Spket):
              首先需要安裝Spket,如上,之后進行JQuery的配置:
              (1)從http://jquery.com/下載開發用的Javascript文件,如下圖,一定要選擇紅框里面的選項
             

             (2)配置Eclipse里面的Spket Javascript Profiles,如下圖:
            

             1) 從window->Preferences...進去

             2) 如上圖選擇Spket -> Javascript Profiles

             3) 點擊New...輸入JQuery建立新的profile

             4) 點擊Add Library,并選擇JQuery,建立新的Library

             5) 點擊Add File, 選擇剛下載的JQuery文件

             6) 如果想讓JQuery成為缺省的Javascript Profile,則點擊Default。

              然后新建Js文件,就可以使用JQuery的代碼提示功能了:
            

          閱讀全文
          類別:Js 查看評論
          文章來源:http://hi.baidu.com/ninky/blog/item/16d2b6a18b17c48347106485.html
          posted @ 2009-11-13 11:38 niuky 閱讀(1511) | 評論 (0)編輯 收藏
          僅列出標題  
          主站蜘蛛池模板: 福州市| 阳高县| 长子县| 闽侯县| 尚义县| 且末县| 娄底市| 冀州市| 衡阳市| 房产| 东乡县| 龙川县| 台北市| 绥化市| 凤山市| 临西县| 诏安县| 文山县| 同德县| 星座| 泸州市| 益阳市| 始兴县| 惠来县| 双流县| 平度市| 张家口市| 彰武县| 华亭县| 白水县| 平舆县| 常熟市| 东乡族自治县| 北辰区| 云安县| 甘洛县| 象山县| 正定县| 白山市| 宝应县| 临沂市|