坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Category Archives: java

这里有原创java教程,都是来自工作中的积累,有时候有些些弱。

rose手册第三章九节:controller层:上传文件

3.9.1 其实很简单 添加依赖包:commons-io.jar html中使用 enctype="multipart/form-data",method="POST" 直接看后端代码吧。 @Post("/doUpload")      public String doUpload(@Param("file") MultipartFile file) {          return "@ upload ok!" + file.getOriginalFilename();      }   3.9.2 其他 可以同时接收所有的文件 // 不声明@Param   // files可以是一个数组或者List   public String upload(MultipartFile[] files) {       return "@ok-" + Arrays.toString(files);   } &nbs

Continue reading

Posted in java | Tagged | 8 Comments

rose手册第三章八节:controller层:门户必备pipe支持

3.8.1 什么是pipe? ------------------ * pipe起源于facebook的工程师对他们网页提速的方案:将网页分解为Pagelets的小块(在rose叫做window的小块),然后通过后端多重管道运行,以达到性能的最佳。 * pipe巧妙使用了http 1.1连接有timeout的机制,充分使用一次http连接来传递数据。 * pipe可使用户在大多数浏览器中感受到延迟减少了一半。 3.8.2 与facebook的bigpipe相比rose pipe如何? -------------------------------------------- * fb并未在开源项目中公布过使用方法 * bigpipe神似是php+js搞定的 * rose pipe可以自由选择线程池大小,完全出自上一节的portal的基础 * 完全实现bigpipe功能,天然的对业务开发者透明 3.8.3 看实例 ------------ HelloController.java @Get("/3.8")   public String pipe(Pipe pipe) {       pipe.addWindow("p1", "/wp1");       pipe.addWindow("p2", "/wp2");      &

Continue reading

Posted in java | Tagged | 13 Comments

rose手册第三章七节:controller层:门户必备portal支持

3.7.1 什么是portal? -------------------- *字面意思,做门户用的。 *简单来说,把一个网页分成了N个区域,每个区域由不同的action去执行,多线程并行提高cpu使用率。 3.7.2 使用例子 ----------- *要使用portal,必须先在web.xml里声明所使用的线程池大小: <context-param>           <param-name>portalExecutorCorePoolSize</param-name>           <param-value>1024</param-value>   </context-param>   *然后看示例代码: @Get("/3.7")   public String portal(Portal portal) {       portal.addWindow("p1", "/wp1");       portal.addWindow("p2", "

Continue reading

Posted in java | Tagged | 11 Comments

rose手册第三章六节:controller层:一闪而过的信息,flash支持

3.6.1 需求描述 历史上,做web的需求时,经常遇到一个情况:在A页面修改/添加/删除了信息,提交,提示“修改/添加/删除成功!”。 rose的flash(并非你所想象的adobe的flash)建设性地使这一需求在开发过程中简单快捷化。 3.6.2 使用过程 使用过程会很愉快,在两个action之间,通过return "r:/xxx"来跳转(实际是301),只需要在第一个action里使用flash.put,在第二个action里使用flash.get即可。 @Get("/flash1")     public String flashStep1(Flash flash) {         flash.add("msg", "修改成功!");         return "r:/flash2";     }        @Get("/flash2")     public String flashStep2(Invocation inv, Flash flash) { &

Continue reading

Posted in java | Tagged | Leave a comment

rose手册第三章五节:controller层:统一的参数验证办法

3.5.1 用来做什么 ---------------- * 我们把的参数验证办法叫ParamValidator * 一般来说,像比如说验证http传来的参数是不是为空呀啥的(发挥你的想象力)。 * 好处在于不用再重复地写if else 3.5.2 怎么用 ------------ * 来看一个例子,验证用户的参数不可为空(灰常灰常的实用): public class NotBlankParamValidator implements ParamValidator {          @Override       public boolean supports(ParamMetaData metaData) {           return metaData.getAnnotation(NotBlank.class) != null;       }          @Override       publ

Continue reading

Posted in java | Tagged | 17 Comments

rose手册第三章四节:controller层:自定义http参数支持

3.4.1 http参数支持的一些前言 ----------------------------------------- * 我们把一个controller的类里的一个方法叫做action,它实际对应用户看到的一个url。 * 在action里可以接收各种各样的参数,也可以自己定义需要的参数。 * rose自己定义了一些常见的类型,基本上很有机会会用到自己定义,但是在某些情况下,也是个不错的选择: * 用来对指定的参数类型的值进行固定的修改和赋值。 3.4.2 看一个例子 -------------------------- ChenBeanResolver.java放在controllers目录下: public class ChenBeanResolver implements ParamResolver {          @Override       public Object resolve(Invocation inv, ParamMetaData metaData) throws Exception {           for (String paramNam

Continue reading

Posted in java | Tagged | Leave a comment

rose手册第三章三节:controller层:ErrorHandler支持

3.3.1 ErrorHandler的作用 一般来说传统的编程都会到处去try,特别是java里,try来try去的(如果你用erlang一定就知道,已经知道的可能性,怎么能叫异常?都try了还是让它崩了算了。。。)。 如果打开你的项目,每个java文件中的代码都有一堆的try,那这时候就是ErrorHandle上阵的时候了。 ErrorHanle致力于:统一捕捉和处理各种异常,可区分对待和返回;统一的出错体验。 非常类似做web开发时的500统一出错页面这样的东东。 3.3.2 示例 /** * @author chenzhen@xiaomi.com * 2010-12-1 */ package com.chen.controllers; import net.paoding.rose.web.ControllerErrorHandler; import net.paoding.rose.web.Invocation; public class ErrorHandler implements ControllerErrorHandler { public Object onError(Invocation inv, Throwable ex) throws Throwable { // TODO logger.error("handle err:", …

Continue reading

Posted in java | Tagged | 2 Comments

rose手册第三章二节:controller层:拦截器支持

3.2.1 拦截器作用 面向切面编程(AOP)方法可以让一个项目更加关注核心逻辑,常见的一些最佳实践包括 权限 缓存 错误处理 延时加载 调试 持久化 资源池 等等。。。 而此处的拦截器目标是在controller层提供各种在controller执行前、执行后的代码切入,以达到各种可AOP的目标。 简单地说,拦截器能干的事情就是当你的项目写了一半时发现缺少啥全局要做的事情(比如需要验证权限),不用担心,搞一个拦截器就是了。 3.2.2 拦截器例子 public class AccessTrackInterceptor extends ControllerInterceptorAdapter { public AccessTrackInterceptor() { setPriority(29600); } @Override public Clas

Continue reading

Posted in java | Tagged | 6 Comments

rose手册第三章一节:controller层:url对照规则与返回结果规则

3.1.1) url对照规则——最简单的例子 先看看怎样把url和某个方法对应起来。为了方便说明,现在我们来一起完成一个极简版的贴吧。 1)贴吧需要什么功能? 贴吧中当然会有很多“主帖”(topic),“主帖”下会有很多“跟帖”(comment)。 一般,贴吧中最基本的,会有下面这几个功能需要我们完成: 显示主帖列表 显示单个主帖和它的跟贴 显示单个跟贴 创建一个主帖 创建一个跟贴 2)设计 web API 然后让我们来规划一个REST风格的 web API :(“GET”和“POST”是指HTTP1.1中的请求方法) 显示主帖列表 GET http://github.com/myforum/topic 显示单个主帖和它的跟贴 GET http://github.com/myforum/topic/123 显示单个跟贴 GET http://github.com/myforum/topic/123/comment/456 创建一个主帖 POST http://github.com/myforum/topic 创建一个跟贴 POST http://github.com/myforum/topic/123/comment 可以发现一个共同点,所有API中,URI部分的第一级都是“/myforum”(但这并不是规定,仅仅为了演示)。 3)实现 web API 首先新建一个类,这个类的类名必须以“Controller”结尾:

Continue reading

Posted in java | Tagged , | 6 Comments

rose手册第二章:配置与使用

ROSE 2.1 基础环境 * 普通的pc机,del 380 * ubuntu 10.04基本不升级 * java version "1.6.0_29" * eclipse * m2clipse * 茶一杯 2.2 maven简介 * maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs,你一定会自问,是否有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择,将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码,运行测试,生成文档并宿主项目网页。 * maven对一个项目进入了固定的默认目录定义: * src/main/java 写主要的java实现 * src/main/resources 写主要的配置文件 * src/test/java 写test case * src/test/resources 写test case所需要的配置文件 …

Continue reading

Posted in java | Tagged | 7 Comments
Page 2 of 812345...Last »