温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

雪山飞鹄

温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

BlogJava 首页 新随笔 联系 聚合 管理
  215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks

#

     摘要:   此文档中除MySQL 存储过程参数类型(in、out、inout)小节来自网上,其余均为本人原创,欢迎大家转载,如有不足,请指教。 由于是在word中编辑好拷贝过来的所以字体较小大家点此下载电子版文档    MySQL存储过程 1.1         CREATE &nb...  阅读全文
posted @ 2009-11-24 17:12 雪山飞鹄 阅读(116070) | 评论 (30)编辑 收藏

        log4j是一款很强大的日志记录工具,使用起来十分灵活,功能也十分强大.本人在开发中喜欢将日志以HTML的形式输出,该种形式输出的日志比较清晰,在阅读的时候可以达到事半功倍的效果
贴出log4j的配置文件
log4j.properties

#All level less than INFO will be logged
log4j.rootLogger
=INFO, A1

#A1 is the output device
log4j.appender.A1
=org.apache.log4j.FileAppender
log4j.appender.A1.File
=e:/log4j.htm 

#use html layout
log4j.appender.A1.layout
=org.apache.log4j.HTMLLayout
生成的日志文件:
posted @ 2009-11-18 11:49 雪山飞鹄 阅读(3145) | 评论 (1)编辑 收藏

在spring开发中收集了几个常见的异常
(1)org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class

'com.microsoft.sqlserver.jdbc.SQLServerDriver'

      答:sqljdbc.jar

(2)java.lang.ClassNotFoundException: org.springframework.ejb.config.JeeNamespaceHandler

     答:spring-remoting.jar

(3)java.lang.ClassNotFoundException: org.springframework.scripting.config.LangNamespaceHandler   

     答:spring-support.jar

(4)java.lang.ClassNotFoundException: org.springframework.transaction.config.TxNamespaceHandler  

     答:spring-dao.jar

(5)java.lang.ClassNotFoundException: org.springframework.aop.config.AopNamespaceHandler

  答:spring-aop.jar

posted @ 2009-11-16 15:18 雪山飞鹄 阅读(1650) | 评论 (1)编辑 收藏

     摘要: applicationContext.xml 文件: <bean id="dataSource"         class="com.mchange.v2.c3p0.ComboPooledDataSource"         destroy-method="clo...  阅读全文
posted @ 2009-11-16 15:08 雪山飞鹄 阅读(8209) | 评论 (2)编辑 收藏

//设置jframe无边框,无标题
  this.setUndecorated(true);
posted @ 2009-11-09 12:00 雪山飞鹄 阅读(1989) | 评论 (0)编辑 收藏

 首先解释两个概念,何为序列化?何为反序列化?

序列化:将对象转化成流的过程称为序列化

反序列化:将流转化成对象的过程称之为反序列化

序列化与反序列化必须遵守的原则

a)         Java对象

java中要想使一个java对象可以实现序列化与反序列化,必须让该类实现java.io.Serializable接口

java.io.Serializable接口定义如下:

publicinterface Serializable {

}

从上述定义中可以看到该接口中未定义任何方法,这大大的简化了开发者

b)      序列化主要依赖java.io.ObjectOutputStream,该类对java.io.FileOutputStream进一步做了封装,这里主要使用ObjectOutputStream类的writeObject()方法实现序列化功能

Demo:

/**

     *将对象序列化到磁盘文件中

     *@paramo

     *@throwsException

     */

    publicstaticvoid writeObject(Object o) throws Exception{

       File f=new File("d:""user.tmp");

       if(f.exists()){

           f.delete();

       }

       FileOutputStream os=new FileOutputStream(f);

       //ObjectOutputStream 核心类

       ObjectOutputStream oos=new ObjectOutputStream(os);

       oos.writeObject(o);

       oos.close();

       os.close();

    }

c)      反序列化主要依赖java.io.ObjectInputStream,该类对java.io.InputStream进一步做了封装,这里主要使用ObjectInputStream类的readObject()方法实现序列化功能

Demo:

/**

     *反序列化,将磁盘文件转化为对象

     *@paramf

     *@return

     *@throwsException

     */

    publicstatic User readObject(File f) throws Exception{

       InputStream is=new FileInputStream(f);

       //ObjectOutputStream 核心类

       ObjectInputStream ois=new ObjectInputStream(is);

       return (User)ois.readObject();

    }

贴出完整的demo

Java对象:

package com.io.bean;

import java.io.Serializable;

publicclass User implements Serializable {

   

    privateintuserId;

    private String userName;

    private String userSex;

    privateintuserAge;

    publicint getUserAge() {

       returnuserAge;

    }

    publicvoid setUserAge(int userAge) {

       this.userAge = userAge;

    }

    publicint getUserId() {

       returnuserId;

    }

    publicvoid setUserId(int userId) {

       this.userId = userId;

    }

    public String getUserName() {

       returnuserName;

    }

    publicvoid setUserName(String userName) {

       this.userName = userName;

    }

    public String getUserSex() {

       returnuserSex;

    }

    publicvoid setUserSex(String userSex) {

       this.userSex = userSex;

    }

    @Override

    public String toString() {

       returnthis.getUserId() + "   " + this.getUserName() + "   "

              + this.getUserSex() + "    " + this.getUserAge();

    }

}

序列化与反序列化

package com.io.test;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import com.io.bean.User;

publicclass TestSerializable {

    /**

     *将对象序列化到磁盘文件中

     *@paramo

     *@throwsException

     */

    publicstaticvoid writeObject(Object o) throws Exception{

       File f=new File("d:""user.tmp");

       if(f.exists()){

           f.delete();

       }

       FileOutputStream os=new FileOutputStream(f);

       //ObjectOutputStream 核心类

       ObjectOutputStream oos=new ObjectOutputStream(os);

       oos.writeObject(o);

       oos.close();

       os.close();

    }

   

    /**

     *反序列化,将磁盘文件转化为对象

     *@paramf

     *@return

     *@throwsException

     */

    publicstatic User readObject(File f) throws Exception{

       InputStream is=new FileInputStream(f);

       //ObjectOutputStream 核心类

       ObjectInputStream ois=new ObjectInputStream(is);

       return (User)ois.readObject();

    }

   

   

    publicstaticvoid main(String[] args) throws Exception{

      

       /*****************将对象序列化***************/

      

    /* 

        User user=new User();

       user.setUserId(1);

       user.setUserName("张艺谋");

       user.setUserSex("");

       user.setUserAge(50);

       TestSerializable.writeObject(user);

    */

      

       /*****************将对象序反列化***************/

      

       User user=TestSerializable.readObject(new File("d:""user.tmp"));

       System.out.println(user);

    }

}

posted @ 2009-11-09 10:43 雪山飞鹄 阅读(38972) | 评论 (7)编辑 收藏

 

package com.fengjing.javamail;

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

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import sun.misc.BASE64Encoder;

public class SendMail {

 
public static void main(String[] args) throws Exception{

  Properties props
=new Properties();
  
//设置采用邮箱认证
  props.setProperty("mail.smtp.auth""true");
  
//获得session
  Session session=Session.getInstance(props);
  
//设置调试信息
  session.setDebug(true);
  
//创建message
  Message message=new MimeMessage(session);
  
  
//对message做些配置
  
//邮件主题
  message.setSubject("这是用javamail写得带附件的邮件");
  
//邮件发送人
  message.setFrom(new InternetAddress("*****@163.com"));
  
//发送时间
  message.setSentDate(new Date());
  
//设置收件人
  /**
   * RecipientType.TO 指定邮件发送类型
   * RecipientType.TO 直接发送
   * RecipientType.CC 抄送
   * RecipientType.BCC 暗送
   * new Address[]{} 邮件接收人列表
   
*/
  message.addRecipients(RecipientType.TO, 
new Address[]{
    
new InternetAddress("*******@sohu.com")
  });
  
  
//使用message中的setText()方法发送文本文件
  
//message.setText("邮件正文");
  /**
   * "<span style='color:red'>这是用javamail发送的邮件正文</span>" 邮件内容
   * "text/html;charset=utf-8" 指定编码
   
*/
  
//message.setContent("<span style='color:red'>这是用javamail发送的邮件正文</span>", "text/html;charset=utf-8");
  
  
/**********创建带附件的邮件********************/
  
  
//创建Multipart对象,最后将Multipart对象添加到message中
  Multipart multipart=new MimeMultipart();
  
//创建MimeBodyPart对象
  MimeBodyPart mimeBodyPart=new MimeBodyPart();
  
//设置附件内容
  FileDataSource fds=new FileDataSource("d:\\5.jpg");
  
//设置附件的名字
  
  
/********************处理附件中文名乱码***************************/
 
  sun.misc.BASE64Encoder enc 
= new sun.misc.BASE64Encoder(); 
  
//System.out.println(enc.encode("徐熙媛.jpg".getBytes()));
  mimeBodyPart.setFileName("=?GB2312?B?"+enc.encode("徐熙媛.jpg".getBytes())+"?=");
 
  
//处理附件
  mimeBodyPart.setDataHandler(new DataHandler(fds));
  
  multipart.addBodyPart(mimeBodyPart);
  
  
/********设置邮件正文内容********/
  
  
//新创建MimeBodyPart对象,否则正文将会覆盖掉附件内容
  mimeBodyPart=new MimeBodyPart();
  
//设置邮件正文内容
  mimeBodyPart.setContent("<span style='color:red'>这是用javamail发送的邮件正文</span>""text/html;charset=utf-8");
  
//将MimeBodyPart添加到Multipart中
  multipart.addBodyPart(mimeBodyPart);
 
  
//将multipart添加到message中
  message.setContent(multipart);

  
//创建传输对象
  Transport transport=session.getTransport("smtp");
  
//配置连接信息
  /**
   * smtp.sohu.com 指定主机
   * 25 端口号
   * sxyx 用户名
   * ******** 密码
   
*/
  transport.connect(
"smtp.sohu.com"25"sxyx""*******");
  
//发送消息
  /**
   * message 消息内容
   * message.getAllRecipients() 收件人地址  
   * 返回
   * message.addRecipients()方法中指定的邮件接收人列表
   
*/
  transport.sendMessage(message, message.getAllRecipients());
  transport.close();
 }

}

文中提到的base64编码其实可以替换为cos.jar(既欧莱里公司提供的文件上传包)
posted @ 2009-11-05 15:15 雪山飞鹄 阅读(788) | 评论 (0)编辑 收藏

       鉴于此文图片丢失,影响阅读质量,特上传此博文word文档,广大网友可点此下载word文档

呵呵,最近一直在看struts2方面的资料。大家都知道web开发过程中,我们经常要处理客户端(用户)提交过来的数据(增加记录)及后台数据库查询出来的数据(修改记录),这里难免会出现一些不符合要求的数据,我们称为“脏数据”。这里就借助于struts2提供的验证框架来做数据的验证(其实它依赖的还是webwork)

在使用struts2或者说webwork的验证框架时必须遵守以下几点:

在这里不要管为什么,人家就是这么约定的,我们只要照做就是了。除非你是科研人员,如果仅仅是项目需要,建议大家还是不要在这上面花过多的时间,不值得。

在对应的Action的包下(必须跟该Action在同一个目录)创建验证框架规则(.xml文件)

xml文件的命名必须遵守如下规则:

1)         该文件必须跟该对应的Action在同一个目录

2)         Action的名字---对应Action中的方法名(execute方法除外)-validation.xml

如:

如图所示该文件名由三部分组成:

第一部分:Action的类名

第二部分:Action中的方法名

第三部分:validation.xml(固定)

         这三部分之间用横线连接-

         验证规则(EmployeeAction-updateEmployee-validation.xml)内容

         因为Action是基于模型驱动的即在Action引用了对象模型,所以在写验证规则的时候字段属性为Action中对象模型名.具体的属性()

Action中的引用关系

EmployeeAction-updateEmployee-validation.xml中的配置内容

详细参看EmployeeAction-updateEmployee-validation.xml中的配置

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

<!DOCTYPE validators PUBLIC

       "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

       "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

       <validators>

           <field name="employee.empName">

               <field-validator type="requiredstring">

                   <message>雇员姓名不能为空</message>

               </field-validator>

           </field>

             <field name="employee.age">

               <field-validator type="required">

                   <message>雇员年龄不能为空</message>

               </field-validator>

           </field>

          <field name="employee.sex">

               <field-validator type="requiredstring">

                   <message>雇员性别不能为空</message>

               </field-validator>

           </field>

           <field name="employee.context">

               <field-validator type="requiredstring">

                   <message>雇员备注信息不能为空</message>

               </field-validator>

           </field>

       </validators>

<field name="验证字段(Action中对象模型名字.具体的属性)">

               <field-validator type="requiredstring">   验证规则

                   <message>验证出错信息</message>

               </field-validator>

</field>

最后千万别忘了在struts.xml文件中一定要配置一个结果为input的转向

否则验证失败时会出现如下错误:


鉴于此文图片丢失,影响阅读质量,特上传此博文word文档,广大网友可点此下载word文档

posted @ 2009-10-23 17:42 雪山飞鹄 阅读(3688) | 评论 (6)编辑 收藏

     摘要:   Struts2文件上传 大家都知道struts2对文件上传做了很好的封装,使文件上传不再那么恐怖。这里面struts2的文件上传主要依赖的是org.apache.struts2.interceptor.FileUploadInterceptor这个拦截器 关于这个拦截器我不想做过多的研究,这里主要讨论的是该拦截器里面定义的几个关于文件上传的重要属性。 ...  阅读全文
posted @ 2009-10-22 09:35 雪山飞鹄 阅读(9504) | 评论 (3)编辑 收藏

     摘要:   Struts2文件上传一些小细节 大家都知道struts2对文件上传做了很好的封装,使文件上传不再那么恐怖。这里面struts2的文件上传主要依赖的是org.apache.struts2.interceptor.FileUploadInterceptor这个拦截器 关于这个拦截器我不想做过多的研究,这里主要讨论的是该拦截器里面定义的几个关于文件上传的重要属性。 ...  阅读全文
posted @ 2009-10-21 10:33 雪山飞鹄 阅读(590) | 评论 (0)编辑 收藏

仅列出标题
共22页: First 上一页 14 15 16 17 18 19 20 21 22 下一页