qqjianyue代码工

砌java代码
posts - 26, comments - 0, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2008年11月14日

jms:
(Java   Message   Service)    
  JMS定义了Java中访问消息中间件的接口。    
   
  JMS只是接口,并没有给予实现,实现JMS接口的消息中间件叫JMS   Provider,这样的消息中间件可以从Java里通过JMS接口进行调用。    
   
  JMS   消息模型    
  JMS消息由两部分构成:header和body。header包含消息的识别信息和路由信息,body包含消息的实际数据。    
   
  根据数据格式,JMS消息可分为以下五种:    
   
  BytesMessage   消息是字节流。    
  MapMessage   消息是一系列的命名和值的对应组合。    
  ObjectMessage   消息是一个流化的Java对象。    
  StreamMessage   消息是Java中的输入输出流。    
  TextMessage   消息是一个字符串,这种类型将会广泛用于XML格式的数据。

cms:
Content Management System,CMS其实就是内容管理系统,,,可以理解为,CMS帮你把一个网站的程序部分的事全做完了 你要做的只是一个网站里面美工的部份,搞几个静态网页模板,一个门户级的网站就出来了!

CMS,大概2004以前,如果想进行网站内容管理,基本上都是靠手工维护,但千变万化的信息流,但没有好的程序支持,还继续靠手工完成是不可能的事,如果有一个好的系统来支撑你的网站,那将节省大量的人力物力,开发者就可能给客户一个软件包,可以用它定期人工修改网站。只要你配置安装好,你的编辑,在线记者,更新员只要定期更新数据,剩下的事就交给CMS去处理

posted @ 2008-11-14 08:14 Qzi 阅读(24) | 评论 (0)编辑 收藏

2008年11月9日

基本类型:
布尔类型:boolean不能够自动也不能强制转换成其他类型,但是可以进行&,&&,|,||运算
字符类型:char(16)其他基本类型不能够自动转变为字符类型,但可以强制转换为char,但是可以有截断现象
整形类型:byte(8),short(16),int(32),long(64)初始化的时候都是使用整数字面量直接赋值,但是byte与byte,short与short变量相加,默认都得到int的值,所以必须强制转换才能够返回原来类型的值(例如:(byte)(b1+b2))
浮点类型:float(32),double(64)浮点数的字面量默认都是double类型,所以需要强制转换成float才能够初始化float,或者加上f或F后缀。(例如float f1 = 1.4F或者float f1 = (float)1.4

整形还可以使用八进制(以0开头的整形数字字面量)、十六进制(以0x开头的整形字面量)初始化;
浮点型:字面量不可以是八进制十六进制,但int可以自动转化为浮点,所以仍然可以使用8进制16进制初始化,但是可以使用浮点计数法初始化,同样可以加上f或d后缀,例1.23e+33F等
字符型char可以直接使用

unicode转义符:
\uXXXX 四个16进制的数,在文本里面就是代表着某个字符,所以可以'\uXXXX'初始化一个char,可以\u0022\uXXXX\u0022初始化一个String,因为刚好\u0022代表双引号。当然\uXXXX不能是双引号,否则就编译出错了。

自动类型转换:byte---short---int---long---float---double
但是short与char不能够相互自动转换,但是可以相互强制转换
整型字面量可以初始化char,只要不超过65535的范围,也就是也能够使用8进制16进制初始化,但是整型变量不能够赋值给char;
char可以自动转换成int及以上

变量声明与定义:
int[] intArray;    //OK
int intArray[];    //OK
前面的加上 “= new int[变量or常量]” 都是可以的,但是“= new int(5)”是错误的
int[] intArray[];  //OK,但是代表的是数组的数组
int[5] intArray;  //False
int intArray[5];  //False

posted @ 2008-11-09 10:26 Qzi 阅读(24) | 评论 (0)编辑 收藏

2008年10月21日

参考java core总结,java 5与之前的不同包括:

1.泛型编程

2.包装类的自动打包拆包

3.格式化输出:增加printf函数

4.StringBuilder类:非线程安全的StringBuffer

5.可变参数列表:声明方式public void mymethod(String arg1,Object… args),记住...

6.增强的for循环:for(type variable:数组或数组列表)

7.静态导入:import static 导入类 就可以使用本地方法一样使用导入类的静态方法

8.协变的返回类型,即override的函数可以返回原函数返回类型的子类型,而不是要求相同返回类型

9.控制台输入

10.内容窗格授权:JframeJDialogJApplet可以使用addsetLayout函数,以前需要getContentPane().add(component)getContentPane().setLayout(manager);

posted @ 2008-10-21 20:45 Qzi 阅读(26) | 评论 (0)编辑 收藏

线程生命周期:新建线程、排队、运行、等待、死亡,明显包含了下面线程生存期的三种状态。

线程生存期三种状态:就绪、运行、等待(挂起)

与线程相关的一些函数区别:

线程暂停或者停止:stopsuspendsleepwait

成员方法stop会解除由线程获得的所有锁定,并且使线程进入死亡状态,相当于run方法的被强制中断;

成员方法suspend仍然持有线程之前的所有锁定,并且使线程进入等待状态,需要使用resume重激活;

静态方法 sleep不释放对象锁,可以指定暂停线程的mini Seconds数,暂停当前线程;

成员方法wait导致本线程放弃对象锁,进入挂起状态,并且需要通过notify或者notifyAll来使线程进入就绪状态;

 

线程池机制:

线程池管理器:创建销毁线程池、将工作线程放入线程池

工作线程:执行任务(即任务接口)的线程,在没有任务时候等待

任务队列:提供线程申请缓冲机制

任务接口:规定任务的入口、任务执行完后的收尾工作、任务的执行状态

posted @ 2008-10-21 20:43 Qzi 阅读(29) | 评论 (0)编辑 收藏

 

测试:定义为在受控的条件下对应用程序进行操作,以对程序质量进行评估

 

质量:可以定义为产品的优点(特性)减去其中存在的问题(bug

 

测试的重要性:测试的反面是不测试,即把程序验证工作都丢到软件开发完毕或者交付给客户。辩驳观点是:越迟发现程序的问题,修复其的成本越高。

 

测试人员做什么:保证程序的bug是影响最小的bug,将程序的bug降到最小风险。

 

测试与QAQuality Assurance)的区别:QA关注软件工程的过程,通过改善过程提高软件的质量,他不对软件进行剖析以找出问题,而只是验证软件是否满足一套已定义的质量标准和用户协议。

测试更关心的是剖析软件,观察软件的运行,并在质量内部层次进行报告,发现软件的bug

 

测试人员素质:验证、检测、防范、反映。

 

bug:是没有预料到的行为,软件做了某些认为是错误的事情。

 

自动化测试:使用软件工具来代替手工进行的一系列动作,通常使用脚本或者代码驱动应用程序,可以通过可视用户界面完成,或者直接命令模拟客户端功能。

构建版本验证测试(Build verification test, BVT)针对软件最新版本而做的一些列自动化测试;回归测试(Regression testing)测试以前曾经正常工作的场景,确保代码修改后没有打破原来的功能或者产生其他方面的副作用。

posted @ 2008-10-21 20:43 Qzi 阅读(26) | 评论 (0)编辑 收藏

2008年10月7日

ZIP压缩IO涉及类(包括操作文件夹压缩)

ZipEntry标识zip文件中单个文件的入口,它也支持路径加文件名,所以通过配置它,可以建立目录层次的zip文件(见下例子)

ZipOutputStreamwrite数据到zip文件的对象

ZipInputStream,从zip文件中read数据的对象,其实基本上这个没有作用

ZipFile,获取zip文件里面单个文件入口,getInputStream()等信息的对象,初始化ZipFile zf = new ZipFile(zip压缩文件的File对象);

           Enumeration entries = =zf.entries()可以获得所有的zip文件里面的文件入口。

原理就是:entry指定单个文件相对zip压缩文件内部根目录的位置,Stream操作输出输入,ZipFile代表的就是整个zip文件


JAR压缩类与ZIP是几乎一模一样对应的分别为:JarEntry JarFile JarInputStream JarOutputStream

GZIP格式,只提供GZIPInputStream和GZIPOutputStream类,因为其作用是单纯的压缩与解压,不维护文件结构。多数用于基于流的数据传送过程实现数据压缩。用法就如Bufer Stream一样,是stream之间的又一个过滤类,只是Buffer提供缓冲,而GZIP提供压缩。
例如需要网络传送压缩就可以这样做:
客户端:
Socket socket = new Socket(服务器地址字符串, 服务器端口);
BufferOutputStream out = new BufferOutPutStream(new GZIPOutputStream(socket.getOutputStream()));
然后就可以操作数据输出了
服务器端:
ServerSocket sSocket =   new ServerSocket(服务器端口);
Socket socket = sSocket.accept();
BufferInputStream in = new BufferInputStream(new GZIPInputStream(socket.getInputStream()));
然后就可以读入数据了。
明显网络数据传送就加了一个压缩,性能就可以提高了。

posted @ 2008-10-07 14:15 Qzi 阅读(1088) | 评论 (0)编辑 收藏

2008年10月4日

     摘要: 元字符

\w 匹配字母或数字或下划线或汉字等。等效于Unicode字符类别 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。如果用ECMAScript选项指定了符合 ECMAScript的行为,则\w只等效于[a-zA-Z_0-9]。

\b 单词的开头或结尾,如果需要更精确的说法,\b匹配这样的位置:它的前一个字符和后一个字符不全是\w

. 除换行符以外的所有字符

* 表示数量,任意数量,所以 .* 加起来就表示除换行符以外的任意数量字符,\w*表示任意字符

+ 是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。

\d 单个数字

\s 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。

^ 匹配你要用来查找的字符串的开头,$匹配结尾。和忽略大小写的选项类似,有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项,^和$的意义就变成了匹配  阅读全文

posted @ 2008-10-04 20:00 Qzi 阅读(47) | 评论 (0)编辑 收藏

Pattern类:
例子:
        Pattern pattern = Pattern.compile("[,\\s]+");
        String[] result = pattern.split("one two three,four,five, six");
        for(int i = 0; i<result.length; i++){
            System.out.println(result[i]);
        }
输出结果是:
one
two
three
four
five
six
Pattern类的静态方法compile用来编译正则表达式,在此[,\\s]+表示若干个","或者若干个空格匹配
split方法使用正则匹配将字符串切割成各子串并且返回

Matcher类:
注意,Matcher的获得是通过Pattern.matcher(CharSequence charSequence);输入必须是实现了CharSequence接口的类
常用方法:
matches()判断整个输入串是否匹配,整个匹配则返回true
例如下面会输出true
        String str1 = "hello";
        Pattern pattern1 = Pattern.compile("hello");
        Matcher matcher1 = pattern1.matcher(str1);
        System.out.println(matcher1.matches());

lookingAt()从头开始寻找,找到匹配则返回true
例如下面会输出true
        String str2 = "hello yangfan!";
        Pattern pattern2 = Pattern.compile("hello");
        Matcher matcher2 = pattern2.matcher(str2);
        System.out.println(matcher2.lookingAt());

find()扫描输入串,寻找下一个匹配子串,存在则返回true
例如下面将会将所有no替换成yes
        Pattern pattern = Pattern.compile("no");
        Matcher matcher = pattern.matcher("Does jianyue love yangfan? no;" +
                "Does jianyue love yangfan? no;Does jianyue love yangfan? no;");
        StringBuffer sb = new StringBuffer();
        boolean find = matcher.find();
        while(find){
            matcher.appendReplacement(sb, "yes");
            find = matcher.find();
        }
        matcher.appendTail(sb);
        System.out.println(sb.toString());

posted @ 2008-10-04 19:50 Qzi 阅读(68) | 评论 (0)编辑 收藏

初始化:
StringTokenizer st = new StringTokenizer(String str);
默认的分隔符,即空白符(空格、制表符、回车)
或者
StringTokenizer st = new StringTokenizer(String str, String token);
使用token作为分隔符

常用函数:
st.countTokens()返回token的数量
st.hasMOreTokens()判断时候当前位置之后是否还有token
st.nextToken()返回当前位置到下一个token之前或者字符串结束之前的字符串

简单示例:
        String str = "wo shi li jian yue, what your name? yangfan?";
        String[] stringArray = new String[100];
        StringTokenizer st = new StringTokenizer(str, ",");
        int i;
        for(i = 0; st.hasMoreTokens(); i++){
            stringArray[i] = st.nextToken();
        }
        for(int j = 0; j<i; j++){
            System.out.println(stringArray[j]);
        }
以","为分隔符,将会输出","之前和之后的两行字符串

posted @ 2008-10-04 18:01 Qzi 阅读(40) | 评论 (0)编辑 收藏

2008年10月1日

 

创建 Filter(过滤器)

 实际开发中都需要开发一些很有用的过滤器,来解决中文表单提交问题啊,给请求和响

应加入 GZIP压缩功能啊,用户权限控制啊,等等,然而遗憾的 MyEclipse不支持直接创建

过滤器。在这里只好手工创建一个解决 Tomcat表单提交中文问题的过滤器。

 选择菜单 File > New > Class,来创建一个名为 TomcatFormFilter 的类,包名为

filters。然后把类的代码修改为如下所示:

package filters;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;

public class TomcatFormFilter implements Filter {

 /**

   * Request.java

   * HttpServletRequestWrapper 进行扩充, 不影响原来的功能并能提供所

有的 HttpServletRequest

   * 接口中的功能. 它可以统一的对 Tomcat 默认设置下的中文问题进行解决而只

需要用新的 Request 对象替换页面中的

   * request 对象即可.

   */

 class Request extends HttpServletRequestWrapper

 {

      public Request(HttpServletRequest request) {

        super(request);

      }

   /**

   * 转换由表单读取的数据的内码.

   * ISO 字符转到 GBK.

   */

   public String toChi(String input) {

      try {

          byte[] bytes = input.getBytes("ISO8859-1");

          return new String(bytes, "GBK");

        }

      catch (Exception ex) {

        }

      return null;

 }

      /**

       * Return the HttpServletRequest holded by this object.

       */

      private HttpServletRequest getHttpServletRequest()

      {

          return (HttpServletRequest)super.getRequest();

      }

   /**

   * 读取参数 -- 修正了中文问题.

   */

      public String getParameter(String name)

      {

        return

toChi(getHttpServletRequest().getParameter(name));

      }

   /**

   * 读取参数列表 - 修正了中文问题.

   */

      public String[] getParameterValues(String name)

      {

          String values[] =

getHttpServletRequest().getParameterValues(name);

          if (values != null) {

            for (int i = 0; i < values.length; i++) {

              values[i] = toChi(values[i]);

            }

          }

          return values;

      }

 }

 public void destroy() {

 }

 public void doFilter(ServletRequest request, ServletResponse

response,

   FilterChain chain) throws IOException, ServletException {

    HttpServletRequest httpreq = (HttpServletRequest)request;

   if(httpreq.getMethod().equals("POST")) {

   request.setCharacterEncoding("GBK");

 } else {

   request = new Request(httpreq);

 }

 chain.doFilter(request, response);

 }

 public void init(FilterConfig filterConfig) throws

ServletException {

 }

}

清单 8.5 过滤器代码

然后修改 web.xml 加入 Servlet 定义,修改后的代码清单如下所示:

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

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

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

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

 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <servlet>

   <description>

      This is the description of my J2EE component

   </description>

   <display-name>

      This is the display name of my J2EE component

   </display-name>

   <servlet-name>LoginServlet</servlet-name>

   <servlet-class>servlets.LoginServlet</servlet-class>

 </servlet>

 <filter>

   <filter-name>TomcatFormFilter</filter-name>

   <filter-class>filters.TomcatFormFilter</filter-class>

 </filter>

 <filter-mapping>

   <filter-name>TomcatFormFilter</filter-name>

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

 </filter-mapping>

 <servlet-mapping>

   <servlet-name>LoginServlet</servlet-name>

   <url-pattern>/login.aspx</url-pattern>

 </servlet-mapping>

 <welcome-file-list>

   <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

</web-app>

清单 8.6加入了过滤器的 web.xml 内容

清单中的粗斜体部分就是新加入的过滤器的映射信息。

posted @ 2008-10-01 09:52 Qzi 阅读(63) | 评论 (0)编辑 收藏