littleQ

终于明白曾经他们失落的目光,当年的你们是否一样;间有懈怠或有颓放,难知多久方能补上;今起,不再彷徨!

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  33 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks

#

我这里说的淘宝的可乐,不是挂在http://www.taobao.com上买的可乐,而是淘宝公司里,实实在在可以喝的可乐。说是可乐,其实就是饮料的代名词了。
昨天上午去淘宝,发现在楼梯口有一个冰箱,里面有很多种饮料,冰箱上贴着字条:一元一瓶,请自取。
没人看管,你拿多少罐,都不会有人知道。但是我还没有看到有人拿了饮料却不付钱的,大家都很自觉地把钱塞进了钱箱。
一元一罐,是公司对员工的福利;员工又靠这种自觉,享受这种福利。

posted @ 2008-08-15 08:26 littleQ 阅读(168) | 评论 (0)编辑 收藏

在js里,一个中文字符的length是1,但是提交到数据库中,就占了两个字节,验证误差,直接抛异常。
如果一个字段在oracle里是varchar2(64),如果录入33个汉字,用length的话是33,但是到oracle里就是66个字节了,插入操作肯定出错。
我们可以定义一个新的函数getBytes()取得字符串的字节数,在java里,这个函数是标准函数。
String.prototype.getBytes = function() {    
    
var cArr = this.match(/[^\x00-\xff]/ig);    
    
return this.length + (cArr == null ? 0 : cArr.length);    
}


function paramCheck(cur){
    
if(cur.value.getBytes() > 64){
    alert(
"字符超过64个字符");
    
return false;
    }

    
return true;
}
getBytes用正则表达式来判断字符串中包含汉字的个数,包含的汉字都放到数组cArr中,这样cArr的长度就是汉字的总数。getBytes方法返回length加上汉字数,就是总的字节数。
只是使用了[^\x00-\xff],这个有点恶心,有些特殊字符也是能匹配到的,比如}等。
但是如果使用[^\u4E00-\u9FA5]的话,却不能匹配到中文……

posted @ 2008-08-12 15:52 littleQ 阅读(6288) | 评论 (6)编辑 收藏

我们有个很小的升级包要做,其实就是在某个页面加个链接,属于文案的修改。看上去,应该是很简单的,几秒种就能搞定的事情。可是事实却非如此。

早上9点,发邮件向SCM申请分支权限,大概11点的时候,拿到分支的读写权限,开始checkout,几十M的东西,速度不是很快,花了好几分钟的时间。然后开始编译,Eclipse导入工程……老太婆似的拖了半个多小时(第一次import,总是特别慢)。这时才进入升级包的主题---文案修改。几秒钟写完。因为参数是动态的,就要重新编译后部署到jboss自测一下,启动jboss也是一个漫长的过程,war包太大。

jboss的启动,花了2-3分钟,这时候,机器已经很卡,2G的内存都有点吃不消,打开IE都慢了很多。

把所有的功能,都放到一个应用里,的确是一件很愚蠢的事情……公司现在在做的事情,就是慢慢的开始重构,做面向服务的应用。我们还刚刚开始起步……

posted @ 2008-08-12 14:38 littleQ 阅读(162) | 评论 (0)编辑 收藏


在javaeye上看到有人推荐这本《java并发编程实践》,正好又听我们公司的一个同事说起,说这本的确不错。

作为一名java开发人员,尤其是j2ee开发,并发的处理是大头。

附书评:
Sun社区线程指导区推荐读物之一(当然是推荐的英文版)。书写的循序渐进,实例丰富。这次博文的中文版翻译质量较好,还没有全部看完,但已经开始对几个做java的朋友推荐了 :) 

Java currency framework是java 5新加入的,但感觉了解的人不多,多数人还是自己写线程池,队列。这个框架其实已经融入到Java里面,学会使用这个框架能让多线程程序的编写事半功倍。另外对其他语言的多线程编程也会有所启发。现在国内能买到的详细解释这个框架的书不多,这本书算是现阶段的精品了。
posted @ 2008-08-11 14:24 littleQ 阅读(169) | 评论 (1)编辑 收藏

话说有了DVD,linux的安装就是很简单的事情了,和硬盘安装相比----尤其当你当前的操作系统是vista的时候,硬盘安装很是繁琐。

当然,DVD安装也不是一帆风顺的事情,昨天,我搞到一张正版的SuSE Enterprise Desktop 10,安装的时候,还是遇到了一个小问题,相信很多人也是遇到过的。

在选择安装后,读盘十几秒后就会停止,弹出一下提示:

Could not find the SUSE Linux Installation CD

Activating manual setup program.

 

这是因为找不到光驱的USB驱动。如果你是牛人的话,知道怎么在kernel model里加载正确的模块驱动,就没必要继续看下去了~我自己尝试着去加载一下驱动,太多了,无所适从~

在网上找到了一些相关帖子,并成功的找到了解决方案。

是在从光盘启动后,后看到安装界面:

boot from harddisk
start installation
start installation without ********
********************忘了*****

 

反正有四个选项,一般来说就是选第二个,直接进入安装了,但是这样就可能会出现找不到CD的错误提示。如何解决?很简单。选在start installation时,下方会有一个option输入框,输入"insmod=ide-generic"即可。enter,成功。

 

后面的安装过程,我就不多说了。还需要强调的一点是,总共的安装时间是在1个多小时,需要安装的人不要在半夜进行……会很困~

posted @ 2008-08-08 10:28 littleQ 阅读(1255) | 评论 (0)编辑 收藏

今天听到一个很有意思的,也很黄的比喻:淘宝好比是一家妓院。

淘宝现在还是小淘宝,卖家必须把商品放到淘宝上,买家才能看到,比较狭隘。淘宝现在要做的,是大淘宝。任何商家只要接入淘宝提供的开放平台,C类买家就能找到自己想要的商品。

淘宝就是一个妓院,C类和B类卖家,都是妓女,而买家,就是嫖客了。嫖客来妓院,找的就是妓女,他不管你妓女是哪来的。搜索,就是找最合适的,最喜欢的妓女。

而支付宝做什么?支付宝就是避孕套,安全交易,就用支付宝。

作为一个支付工具,公正是原则性的。不能说给淘宝提供优质的安全套,就给其他商户劣质的不安全的产品。也不能说,你想用我的避孕套,就来淘宝这家妓院,这不行的。嫖客想去哪家妓院,是嫖客的事。


很够马叉虫的……不过,很形象。

posted @ 2008-08-07 21:48 littleQ 阅读(250) | 评论 (1)编辑 收藏

晚上在公司快回家的时候,正好看到李斯在看他的blog流量,就顺便问了一下他个广告收入。听到结果后还是挺惊讶的,比我想象的多。然后他就在鼓动我去弄个dreamhost,说了一大堆,说什么只要你弄的好,赚钱那是肯定的,再差也肯定能收回本钱。听了觉得还是比较心动,有钱赚,谁不喜欢呢。接着他又说申请一年的,他有优惠码,可以帮我优惠50美金。50美金哦!当时差点按捺不住就办了。

可是稍微想想,我只是一个刚开始写blog的新人,网络广告也向来被大家深恶痛绝,我想我还是再观望着比较好。不能被这点钱迷了心智,blog还是要好好写,练好自己的文风,慢慢能把blog写好,于己于人,都是一件很好的事情。至于广告,以后再说吧,现在有空去学学其他的理财,也许这样更合理一些。

记得前几天还看到有人发帖,痛骂了那些在自己首页发广告的人,当时看的时候,也是觉得一个技术论坛,广告能少则少。如果真要放首页,放到页尾吧……

posted @ 2008-08-01 22:28 littleQ 阅读(125) | 评论 (0)编辑 收藏

 Deploying the application

在我们运行Controller之前,必须对其进行编译。我们可以使用javac或者任何IDE去编译Controller。接下来,我们要让Tomcat知道我们的web应用程序。我们需要创建一个war包,然后部署到Tomcat中,这步只需要将war包拷贝到:/dev/Tomcat6/webapps目录下。

我们的.war文件中的/WEB-INF文件夹包含以下文件:

web.xml
induction-demoapp.xml

以下.jar文件在WEB-INF/lib:

acciente-induction-1.x.xb.jar
acciente-commons-1.x.xb.jar

最后,以下工具jar包也同样在WEB-INF/lib:

apache-bcel-5.2.jar
apache-commons-collections-3.2.1.jar
apache-commons-digester-1.8.jar
apache-commons-fileupload-1.2.1.jar
apache-commons-io-1.4.jar
apache-commons-logging-1.1.1.jar
apache-freemarker-2.3.12.jar

这些.jar文件分别来自于这些工程:Apache Commons库和Apache BCEL库来自Apache Software Foundation. Freemarker库源自Visigoth Software Society.

我们主意到应用程序类的代码(在这里,就是单个Controller)没有存储在.war文件中,相反,我们会在应用程序的配置文件induction-demoapp.xml中指明编译后.class文件的位置.不管我们什么时候重新编译一个应用程序类,下一次访问这个类的时候,Induction会检测出class文件发生了变化,然后"热部署"JVM.因此,当我们修改或者编译应用程序类的时候,没有必要去重新创建或者重新部署war.

Induction同样也支持将应用程序类放到.war/WEB-INF/classes,或者将.jar放到/WEB-INF/lib,或者Tomcat可以找到的classpath下的其他任何位置.不过在开发中,我们推荐将应用程序类放在war包外面,这样可以通过class"热重载"来提高生产率.如果有必要的话,应用程序类可以重新打包成.war文件用于传递.接下来,我们来看看war包里面的内容.

首先来看看web.xml.我们在web.xml中所需要做的就是定义Inductiondispatcher servlet去处理对应用程序的请求.

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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"
           version="2.5">
   <description>DemoApp</description>

   <servlet>
       <servlet-name>demoapp</servlet-name>
       <servlet-class>com.acciente.induction.dispatcher.HttpDispatcher</servlet-class>
       <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
       <servlet-name>demoapp</servlet-name>
       <url-pattern>/*</url-pattern>
   </servlet-mapping>
</web-app>

我们再来看看induction-demoapp.xml的内容.假设我们编译后的应用程序类是放在c:/project/demoapp/classes目录下,induction-demoapp.xml的内容就是:

<!-- this file contains the configuration for the Induction dispatcher -->
<config>
<!-- The following section allows you to specify locations from which
Induction will automatically reload a class if the file has changed -->
<java-class-path>
<compiled-directory>
<directory>c:/project/demoapp/classes</directory>
</compiled-directory>
</java-class-path>
</config>

创建好上面所描述的war包后,部署到Tomcat.现在,我们可以开始运行我们的应用程序了.

Running the application

假设Tomcat运行在localhost:8080,war包的名字是induction-demo.war,在浏览器中输入以下URL:

http://localhost:8080/induction-demo/demoapp/helloworld1_app/HelloWorldController/

你会在浏览器输出界面看到字符串:

Hello World, using a simple println()

Controlling the URL resolution

现在我们来进一步的看下用来运行ControllerURL:http://localhost:8080/induction-demo/demoapp/helloworld1_app/HelloWorldController/.第一部分http://localhost:8080/induction-demo通过Tomcat指向dispatcher servlet,也就是说这一部分是与Induction无关的.通过Induction处理的URL部分是/demoapp/helloworld1_app/HelloWorldController/.

InductionURL分解成完整的Controller类和方法名.URL转换成Controller的类名和方法名,是通过InductionControllerResolver类口完成的.当开发者没有指定一个定制的Controller resolver,Induction会默认使用一个相当简单的controller resolver.默认的controller resolver是这么工作的:分析路径/demoapp/helloworld1_app/HelloWorldController/,把第一个'/'到最后一个'/'之间的内容作为完整的类名(/demoapp/helloworld1_app/HelloWorldController/就是对应到demoapp.helloworld1_app.HelloWorldController).最后一个'/'后所有的内容作为方法名.在我们的例子中,最后一个'/'后没有任何字符串,因此默认的resolver会使用一个隐性的方法名(默认的resolver使用"handler"作为隐性的方法名,不过可以在Induction的配置文件中进行修改).

Dynamic reloading

我们来找点乐子,修改一下controller中打印的字符串的值,编译后重新刷新你的浏览器,你会发现修改起了作用.不必再经过"创建war->重新部署->等待"的过程了.

Conclusion

总结一下我们的指南.在指南中,我们讨论了一些关键的思想,在接下来的view Tutorial中会介绍在Induction中如何使用views.Modles会在Modles Tutorial中进行介绍.

posted @ 2008-07-31 22:17 littleQ 阅读(1099) | 评论 (4)编辑 收藏

欢迎使用Induction!Induction是使用java编程语言进行web应用开发的健壮高性能的框架。Induction属于基于请求的web框架,作为一个servlet部署在servlet容器中。Induction宣扬MVC的方法进行web应用开发。Induction的几个关键设计目标是:
1.当modles,views和controllers发生变化时,消除对web应用程序必须重载的需求(我们相信一次简单的页面刷新就足够了)
2.modles,views,controllers之间的绑定是声明式的,这种方式可以在任何IDE中都能被解析
3.使得数据跟踪在用户界面模板中可用(尤其是HTML模板)
4.文件上传处理应该简单到很平凡的地步
5.在HTML表格中,数组(arrays)和字典类型(dictionary types )的使用应该尽可能简单
6.明智的使用XML(在每个应用程序中,Induction只需要一个XML文件)
7.是一种能够适应多种pattern应用的可扩充的架构
8.高性能
9.从JDK1.4到1.6都兼容(包括1.4和1.6)

About this tutorial
这份指南的目的是让你更快的使用Induction。Induction需要一个servlet容器。在这份指南中,我们使用Apache的Tomcat,不过你可以选择使用任何服从标准的servlet容器。

Installing
我们假设你已经在c:/dev/Tomcat6安装了Tomcat6。Induction本身不需要任何的安装步骤,它的jar包可以很容易地引入到你的web应用程序中。

Writing our first application - hello world
在这份指南中,我们会写一个简单的"hello world"应用,在这个应用里我们会列举出Induction的许多重要概念。

Writing a controller
首先我们写一个controller作为我们指南的开始,因为controllers是web应用程序中一个典型的entry。好,现在让我们开始写一个controller,让它在浏览器中打印一串字符。

package demoapp.helloworld1_app;
 
import com.acciente.induction.controller.Controller;
import com.acciente.induction.controller.Response;
import java.io.IOException;

/**
 * A very simple controller that does the customary "Hello World"
  
*/

public class HelloWorldController implements Controller
{
   
public void handler( Response oReponse ) throws IOException
   
{
      oReponse.setContentType( 
"text/plain" );
      oReponse.out().println( 
"Hello World, using a simple println()" );
   }

}
 

在我们运行这个controller之前,先仔细的看一下。首先我们注意到HelloWorldController类实现了Induction的Controller,Controller接口只是一个简单的标记接口,没有定义任何方法给它的实现类。当Induction接收到一个request请求后,激活一个Controller实现,比如HelloWorldController类,Induction首先核实这个类是否是实现Controller接口。因此目前Controller接口的存在的唯一理由是安全(主要考虑到Controller接口的可配置性)。因为Controller只是一个标记性接口,所以handler方法并不是接口定义的。

接下来,我们可以看到handler方法有一个Response参数,Response类是继承javax.servlet.http.HttpServletResponse接口,并简单的对servlet容器的response对象进行了封装。Induction通过注入的方式,将参数Response值传给handler方法。一些能够作为handler参数的值,也是通过自动注入的方式,只要它们是遵循以下类型:
Type Description
Request facade to the servlet request, extends javax.servlet.http.HttpServletRequest
Response facade to the servlet response, extends javax.servlet.http.HttpServletResponse
Form provides access to the HTML form (if any) submitted with this request
ControllerResolver.Resolution provides access to the controller resolution object (very useful for writing generic parameterized controllers)
model_class_name instance of a user provided model class, the instance is managed to conform to a user specified lifecycle

上面的类名是不完整的,Request, Response和Form类的更多信息,在package com.acciente.induction.controller中查看。

 

原文地址:http://www.inductionframework.org/getting-started-tutorial.html

先翻译一部分放上来,后面的会尽快贴出。

翻译的不通畅的地方,请见谅~

posted @ 2008-07-30 22:16 littleQ 阅读(1145) | 评论 (3)编辑 收藏

Induction,一种新的java web应用框架。国内好像还没有相关中文资料。最近事情不是很多,准备翻译一下它的官方指南,打发一下时间,顺便也锻炼一下英语能力。
如果有谁对Induction也有兴趣的,欢迎一起啊~

先给上官方的http://www.inductionframework.org/getting-started-tutorial.html
posted @ 2008-07-30 16:46 littleQ 阅读(105) | 评论 (0)编辑 收藏

仅列出标题
共4页: 上一页 1 2 3 4 下一页