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 阅读(134) | 评论 (0)编辑 收藏

2009年9月24日 #

     摘要:        今天想学学正则表达式,就随便写了个爬虫。由于才疏学浅,有不足地方请多多指出。         网页来源,是自己在网上爬写URL保存到文件中,然后在根据文件中的URL来找该网页中的Email地址。具体实现看代码 import ...  阅读全文
posted @ 2009-09-24 22:06 Orsen 阅读(379) | 评论 (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 阅读(132) | 评论 (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 阅读(99) | 评论 (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 阅读(91) | 评论 (0)编辑 收藏

仅列出标题