orsen成長錄

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            3 隨筆 :: 2 文章 :: 0 評論 :: 0 Trackbacks

          2009年9月29日 #

          一:form要繼承validate以上的form類這樣才可以,但是前臺驗證可以重寫父類的validate方法
          后臺驗證必須繼承ValidatorForm或ValidatorActionForm,測試發現:如果只做前臺驗證的話,不論用那個都可以。
          二:在struts-config.xml加入,加載Struts的動態驗證模塊。
          <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
                  <set-property property="pathnames"
                    value="/org/apache/struts/validator/validator-rules.xml,
                        /WEB-INF/validation.xml"/>
          </plug-in>
          三:在增加validation.xml文件,配置需要驗證的Form表單。
          <?xml version="1.0" encoding="utf-8" ?>
          <!DOCTYPE form-validation PUBLIC
               "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
               "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
          <form-validation>
              <formset>
            <form name="userInfoForm" >
             <field property="username" depends="required">
              // resource="false"說明不用Struts的資源文件,輸出消息自己寫
              //有多個Struts資源文件 bundle="這里是自愿文件的key值"
              <msg name="required" key="用戶名必填" resource="false"/>
             </field>
             <field property="password" depends="required">
              <msg name="required" key="errors.required"/>
              //給資源文件賦值研究
              <arg key="errors.required" position="0" name="password"/>
             </field>
            </form>
              </formset>
          </form-validation>
          四:網頁端,在網頁中應用。
          注意:form一定要用html:form包裝,負責不能通過自動驗證
          <!--使用生成生成腳本驗證該表單-->
          <html:form action="userinfo.do?method=login"  method="post"  onsubmit="return validateUserInfoForm(this)">
           用戶名稱:<input type="text" name="username"><br>
           擁護密碼:<input type="password" name="password"><br>
           <input type="submit" value="登陸"><br>
          </html:form>
          <!--動態生成驗證腳本-->
          <html:javascript formName="userInfoForm"/>
          posted @ 2009-09-29 20:19 Orsen 閱讀(141) | 評論 (0)編輯 收藏

          2009年9月24日 #

               摘要:        今天想學學正則表達式,就隨便寫了個爬蟲。由于才疏學淺,有不足地方請多多指出。         網頁來源,是自己在網上爬寫URL保存到文件中,然后在根據文件中的URL來找該網頁中的Email地址。具體實現看代碼 import ...  閱讀全文
          posted @ 2009-09-24 22:06 Orsen 閱讀(390) | 評論 (0)編輯 收藏

          --通過使用隱式游標和記錄為mydept表添加內容
          Declare  
          Type  dept_rec 
          Is Record
          (
               r_deptno  dept.deptno
          %Type,
               r_dname   dept.dname
          %Type,
               r_loc     dept.loc
          %Type
          );
          v_deptrec   dept_rec;
          Begin
               
          Select deptno,dname,loc Into v_deptrec From dept
               
          Where deptno=&dno;
               
          Insert Into mydept Values v_deptrec;
                dbms_output.put_line(
          '插值成功');
               Exception 
               
          When NO_DATA_FOUND Then
               dbms_output.put_line(
          '該部門不存在');
               
          When Others Then
               dbms_output.put_line(
          '發生異常,插值失敗');
          End ;


          --結合游標從DEPT表中查詢數據,將相應的數據插入到MYDEPT表中
          Declare  
          Type  dept_rec 
          Is Record
          (
               r_deptno  dept.deptno
          %Type,
               r_dname   dept.dname
          %Type,
               r_loc     dept.loc
          %Type
          );
          Cursor dept_cursor Is
          Select * From dept Order By deptno Asc;
          v_deptrec   dept_rec;
          Begin

                
          --打開游標
                Open dept_cursor;
                
          --從游標中取值
                Fetch dept_cursor Into v_deptrec;
                
          While(dept_cursor%Found) Loop
                     
          Insert Into mydept Values v_deptrec;
                dbms_output.put_line(
          '插值成功');
                
          Fetch dept_cursor Into v_deptrec;          
                
          End Loop;
                
          Close dept_cursor;
               Exception 
          When Others Then
               dbms_output.put_line(
          '發生異常,插值失敗');
          End ;


          --使用面向游標的記錄
          --
          通過面向游標的記錄顯示部門信息
          Declare Cursor dept_cursor
          Is
          Select * From mydept Order By deptno Asc;
          --定義一個面向游標的記錄
          v_deptrec dept_cursor%Rowtype;
          Begin
               
          Open dept_cursor;
               Loop 
               
          Fetch  dept_cursor Into v_deptrec;      
                    
          Delete From mydept Where deptno=v_deptrec.deptno;
                    dbms_output.put_line(v_deptrec.deptno
          ||' 信息刪除成功');
               
          Exit When dept_cursor%Notfound ;
               
          End Loop;
               
          Close dept_cursor;
               Exception 
          When Others Then
               dbms_output.put_line(
          '發生異常,刪除失敗');
          End;
          posted @ 2009-09-24 12:58 Orsen 閱讀(139) | 評論 (0)編輯 收藏

          2009年9月23日 #

          -----------------建立儲存過程---------------------------------
          本存儲過程只是為里演示,根據輸入的emp表中的id號得到對應的name值。
          存儲過程代碼
          --v_ename 輸出參數 一定要用 into 給其賦植 
          --
          v_empno 輸入參數 一定不要用 “:=”方式是給變量賦植 
          create or replace procedure getNameById(
              v_ename out 
          varchar2,v_empno in number 
              ) 
          is
          begin
            
          select ename into v_ename from emp where empno = v_empno;
          end getNameById;
          ----------------------java 代碼中調用------------------------------
          //{ call getNameById(?,?) } 調用儲存過程專用語言,無論輸出參數輸入參數都要用占位
          //如果有輸出參數一定要在執行前對輸出參數注冊,讓JDK知道你要輸出什么類型的參數,執行后可以取道輸出參數的值
          //有輸入參數要給輸入參數賦植
          CallableStatement cs 
          = conn.prepareCall("{ call getNameById(?,?) }");
              cs.registerOutParameter(
          1, Types.VARCHAR);
              cs.setInt(
          2, empno);
              cs.
          execute();
              String ename 
          = cs.getString(1);
          posted @ 2009-09-23 20:15 Orsen 閱讀(108) | 評論 (0)編輯 收藏

          Struts實現文件上傳
          ---------------------------單文件--------------------------------------
          -----jsp頁面 一定要加入enctype和method為post

          1<html:form action="/fileUpLoad" method="post" enctype="multipart/form-data">  
          2    FileName: <html:text property="filename" /><br>    
          3    File:<html:file property="file"/><br>
          4        <html:submit />
          5</html:form>
          -----form中包含個文件屬性
          public class FileUpLoadForm extends ActionForm {
              
          private String filename;
              
          private FormFile file; //這個要記住,這是Struts把文件給封裝了。
              public String getFilename() {
                  
          return filename;
              }

              
          public void setFilename(String filename) {
                  
          this.filename = filename;
              }

              
          public FormFile getFile() {
                  
          return file;
              }

              
          public void setFile(FormFile file) {
                  
          this.file = file;
              }
              
          }
          ----action中要用二進制來操作文件。如果要寫入數據庫的話,其實也不太難,用到PreparedStatement進行操作。只貼出來主要代碼,部分省略。
          FileUpLoadForm files = (FileUpLoadForm)form;
              String filename 
          = files.getFilename();
              String realname 
          = files.getFile().getFileName();
              System.out.println(
          "用戶文件名:" +filename + "       真實文件名:" +realname);
              
          byte[] bytes= files.getFile().getFileData();
              OutputStream out 
          = new FileOutputStream("c://"+realname);
              out.write(bytes);
              out.flush();
              out.close();

          --改進形式
              byte[] bytes= new byte[2048]; //每次都2M的讀寫
              InputStream in = files.getFile().getInputStream();
              OutputStream out 
          = new FileOutputStream("c://"+realname);
              
          int i = 0;
              
          while( (i = in.read(bytes, 02048)) != -1){
                  out.write(bytes);
              }

              out.flush();
              out.close();
          -------------------------------多文件-----------------------------------
          本人思路是通過不同的表單屬性的名字來區分,和一般從form給vo賦值一樣,取一個判斷一個,
          但是可以吧保存上傳的文件操作 可以封裝成一個類或者方法,達到重用。
          posted @ 2009-09-23 20:02 Orsen 閱讀(99) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 若羌县| 云南省| 乌苏市| 滨州市| 龙州县| 珲春市| 延川县| 濮阳市| 兴隆县| 奉新县| 乌海市| 广东省| 金川县| 武隆县| 宁乡县| 永城市| 宁津县| 安龙县| 内乡县| 喀喇沁旗| 襄汾县| 哈巴河县| 甘德县| 巫山县| 东辽县| 靖边县| 怀远县| 邯郸县| 徐闻县| 阜新| 招远市| 治多县| 九台市| 胶州市| 白朗县| 临夏县| 铁岭县| 建阳市| 邵阳县| 绍兴市| 长泰县|