- 浏览: 499170 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
springdata_spring:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
maven archetype:generate 的进一步理解 -
springaop_springmvc:
apache lucene开源框架demo使用实例教程源代码下 ...
lucene 使用教程<转> -
springmvc-freemarker:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
maven 简单实用教程 -
nich002:
zealot 写道顶,推荐maven开发过程系列 大家不要点这 ...
maven 简单实用教程 -
刘宇斌:
您好 有个问题想请教您一下 您这个是通过jdbc连接的,如何 ...
云计算实战 (海量日志管理)hive -- hive + hiveclient (hive 客户端)
“portal”一词中文翻译为“门户”,所谓门户是指各种信息的集成。
rose portal基于rose框架,是rose的一个插件。这个技术不是基于JavaEE的portlet规范,您只需要使用标准的servlet容器即可实现,而且更简单。
本示例示范如何使用rose portal (基于servlet规范),在一个门户可以显示两个独立的“信息”
创建控制器
1个是Portal主控,另外2个是窗口控制器 1) 在controllers或子目录下创建Portal控制器:PortalController,创建处理方法,并声明Portal参数
package ninja.paoding_rose.test.controllers; import net.paoding.rose.web.annotation.Path; import net.paoding.rose.web.annotation.rest.Get; import net.paoding.rose.web.portal.Portal; @Path("portal") public class PortalController { // 标注@Get,表示这个方法要处理的是对/portal的GET请求 // 在主控控制方法上声明Portal参数即表示这个页面是portal,就这样! @Get public String home(Portal portal) throws Exception { // 使用addWindow向这个portal页面加入各种子信息(我们成为窗口) portal.addWindow("docin","/windows/docin"); // 第一个参数是用于标识该窗口,使得portal页面中可以引用到这个窗口的html // // 第二个参数表示这个窗口的地址(可以包含参数),这个地址等价于forward的地址(也就是这里只要能forward的地址都可以,无论是否是rose框架的,甚至可以是一个jsp页面) // // 因此,地址没有说一定要以"/windows"开始 portal.addWindow("ninja","/windows/ninja?name=value"); return "portal_page"; } }
2) 在controllers.windows下创建可被/windows/docin,/windows/ninja 访问的控制器以及方法 DocinController.java
package ninja.paoding_rose.test.controllers.windows; import net.paoding.rose.web.Invocation; import net.paoding.rose.web.annotation.Path; import net.paoding.rose.web.annotation.rest.Get; @Path("docin") public class DocinController { // 这个方法处理"/windows/weather",它只是返回一串中文,而非jsp、vm等页面 @Get public String docin(Invocation inv) { return "@豆丁豆丁豆丁豆丁豆丁豆丁豆丁!"; } }
NinjaController.java
package ninja.paoding_rose.test.controllers.windows; import java.util.ArrayList; import java.util.List; import net.paoding.rose.web.Invocation; import net.paoding.rose.web.annotation.Path; import net.paoding.rose.web.annotation.rest.Get; import net.paoding.rose.web.portal.Window; @Path("ninja") public class NinjaController { // 在控制器使用全局变量并不好,在此仅是一个演示而已 private int count; // 方法名是什么不要紧,关进是@Get代表了这个方法用于处理对/ninja的GET请求 @Get public String ninja(Invocation inv, Window window) { List<String> list = new ArrayList<String>(); list.add("偷袭"); list.add("忍术"); list.add(String.valueOf(count++)); inv.addModel("todolist", list); // // 返回页面,rose将从这个模块对应的/views/windows下找名字以ninja开始的页面 return "ninja"; } }
webapp/views下创建PortalController需要的portal_page.jsp (这里亦可以用rose 所支持的.vm文件)
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head> <link href="/static/portal.css" rel="stylesheet" type="text/css" media="all" /> <title>Portal</title> </head> <body> <h2>Portal</h2> <div class="window"> <div class="title">豆丁</div> <!--这里使用$weather的"weather"即是第一个window的标识--> <div class="content">${docin}</div> </div> <div class="window"> <div class="title">忍者</div> <!--$todo实际是一个Window对象,velocity会调用其toString()输出html的--> <div class="content">${ninja}</div> </div> </body> </html>
window页面
webapp/views/windows创建ninjaController需要的页面 ninja.jsp (亦可以用ninja.vm 但写法很不同。)
<%@ page import="java.util.*" %> <ul> <% List<String> result = (List<String>)request.getAttribute("todolist"); for(String oneItem : result){ %> <li><%=oneItem %></li> <% } %> </ul>
并发数配置
在web.xml的<web-app>下配置并发参数值:
<context-param> <param-name>portalExecutorCorePoolSize</param-name> <param-value>200</param-value> </context-param>
如果没有配置以上参数,默认portalExecutorCorePoolSize取1,相当于除了http主线程外只有另外1个执行线程, 这对程序的正确性没有任何影响,只是并发能力下降了,整个portal的执行时间也会变长。
高级话题
1) 可以在PortalController.home方法上设置@PortalSetting(timeout = 100)表示最多等待各个窗口100ms(包括window的页面渲染耗费时间)
2) 可以通过引入xiaonei-commons-interceptors的@Throughput(maxConcurrent = 20)放置在window的xxx方法上,控制最多并发数
3) 可在web.xml配置全局参数设置poral执行器的线程池参数:portalExecutorCorePoolSize、portalExecutorMaxPoolSize、portalExecutorKeepAliveSeconds
参数意义分别参考java.util.concurrent.ThreadPoolExecutor的corePoolSize、maximumPoolSize、keepAliveTime说明
4) 在portal-home页面中的$weather实际是一个net.paoding.rose.web.portal.Window对象,因此可通过$weather.success 判断window的执行是否完成并且是200的,通过$weather.statusCode等了解具体的执行情况。详细请参考net.paoding.rose.web.portal.Window类属性列表。
5) 可在window的控制器TodoController.xxx方法中声明Window window对象,通过window.setTilte(title)或window.set(name, value)相关属性,并在portal-home.vm使用$todo.title 在todo.vm中,则除了使用todo的名字使用$todo.title,也可以通过$window.title来使用。每个$window在不同的窗口的页面代表自己的Window对象,不会“乱串”
启动后,访问http://[yourlocal]/[yourprojectname]/portal
可以看到 两个div(这里可以叫做window) 分别通过不同的controller 返回数据。
想了解vm页面用法请参考:
http://code.google.com/p/paoding-rose/wiki/Rose_Portal_Demo
此链接为paoding-rose的project home 里面也有paoding-rose 其它方面的介绍
国人罕见的开源项目, 用着也很不错。 祝愿其团队日益强大、此项目风靡国内外。
-----------------------
补充些东西:
portal 的真正意义在于, 在一个页面上如果一个模块down 掉,其它模块还能正常使用。
如人人网的用户个性主页,“用户评论” 模块出现异常,在之前的服务器架构上则会导致整个页面出现异常(因为是由一个controller处理的请求) 。 可能有人说 我用ajax。可以。但ajax是一个页面的多个模块同时向服务器发了多个请求。为服务器增压。而且完全用js 控制页面,也会出现很多不兼容问题。
现在最好的解决方案问世:rose 的portal 整个请求由一个控制器来处理并由这个控制器分发给每个window 的控制器。这些大家都能理解。但关键点在于它的意义。 就在于 portal 的 home 方法的超时配置:@PortalSetting(timeout = 100)
和 并发配置:
<context-param> <param-name>portalExecutorCorePoolSize</param-name> <param-value>200</param-value> </context-param>
代码不想再一点点上贴,直接发个包儿吧 见附件。
- rose_test.rar (44.8 KB)
- 下载次数: 109
发表评论
-
微博feed系统的push和pull模式和时间分区拉模式架构探
2011-02-15 13:58 2670sns系统,微博系统都应用到了feed(每条微博或者sns ... -
Eclipse没有提示解决办法
2011-01-18 20:38 2305Eclipse没有提示解决办法 window->Pref ... -
java 获得客户端真是ip地址
2010-12-28 15:46 1654/** * ip校验 * @p ... -
java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
2010-10-19 12:56 1813请把antlr 的jar 换成你所下载的hibernate 自 ... -
java.lang.NoSuchFieldError: MANUAL
2010-10-19 12:54 2853请吧hibernate的jar 替换成 3.2 或以上版本。 -
找不到 org/springframework/dao/support/PersistenceExceptionTranslator
2010-10-18 17:10 4323如果用的spring2 则原因是缺少spring-dao.j ... -
eclipse 伽利略 卸载插件
2010-10-11 16:58 1793最近才知道原来Eclipse还可以自己卸载已 ... -
Error deploying artifact: Failed to transfer file:XXXXX Return co de is: 401
2010-10-11 11:09 6986原文出处: http://www.javatang.com ... -
警告:xxxx 是 Sun 的专用 API,可能会在未来版本中删除
2010-10-09 13:43 5825[ERROR] BUILD FAILURE [INFO ... -
url 传参 (location.href 或 firame的src 等) 乱码的解决方案(屡试不爽)
2010-09-26 15:23 1976String xxxxx = new String(requ ... -
Apache tika -- 解析多种类型(word、pdf、txt 等)文件!
2010-08-15 09:26 10447apache 是个伟大的组织。 在lucene 检索 如火如 ... -
cannot make any changes to the index (it was opened with readOnly = true)
2010-08-15 09:14 2030此异常为用IndexReader 删除索引所报的错。 异常原 ... -
Java 解析word(2003/2007)
2010-08-01 18:01 10145现在 microsoft word 有好几个版本 97、200 ... -
no segments* file found in org.apache.lucene.store.FSDirectory
2010-08-01 17:59 4680遇到以上异常,原因: writer = ... -
获得只有 [年 月 日] 的Date 对象
2010-07-27 00:31 4839SimpleDateFormat simpleDateForm ... -
java 与 SqlServer 交互遇到的问题及解决方案<updating>
2010-07-23 16:04 1805----------【HIbernate】java.lang. ... -
weblogic下 ClassNotFoundException: org.hibernate.hql.ast.HqlToken 异常解决
2010-07-05 06:24 2053拥有Hibernate3.jar的应用,被部署到w ... -
spring 3.0 + 使用手记
2010-07-01 17:04 17391) ModelAndView 跳转问题 今天遇到了个纠结的 ... -
weblogic 下解决文件批读取
2010-06-22 16:36 1561自己写了些sql 脚本的配置文件,以前在tomca ... -
由replaceAll引发的java.util.regex.PatternSyntaxException错误
2010-06-13 03:18 1881如text.replaceAll(filename, newP ...
相关推荐
人人网和糯米网释出的开源web框架,很好用,怎么用可以参考
本文将深入探讨如何在Spring Boot项目中整合Paoding-Rose,以实现更高效、灵活的数据库管理和应用部署。 首先,让我们理解Spring Boot和Paoding-Rose的基本概念。Spring Boot简化了Spring应用程序的初始设置和配置...
"Paoding Rose" 是一个Java Web开发框架,其1.0.1版本的jar包名为"paoding-rose-1.0.1.jar"。这个框架由一系列组件组成,旨在简化Web应用程序的开发过程,提高开发效率。在描述中提到的“包含基本所需要的jar,比较...
paoding-rose-2.0
paoding-rose-jade 是一个基于Annotation的数据库访问框架,它支持以接口 + Annotation + SQL 语句的形式,依据开发者的DAO接口在运行时通过java proxy技术创建DAO实例,不需要编写DAO实际实现代码。
"paoding-rose-master" 这个文件名通常表示这是项目的主要分支,可能是GitHub或其他版本控制系统中的默认分支。"master"通常代表了项目的主线,包含了最新的稳定代码。下载这个zip文件后,开发者可以解压得到项目的...
"Paoding Rose" 是一个历史悠久的Java Web开发框架,它主要专注于提高开发效率和提供灵活...同时,你还可以通过阅读文档或博客(如提供的博文链接)来了解如何使用和配置这个框架,从而在实际项目中应用Paoding Rose。
描述中提到"Rose 是由 人人网、糯米网 提供的、基于Servlet规范、Spring‘规范’的开放源代码WEB开发框架",这进一步细化了Paoding Rose的背景和特性。它是由知名互联网公司人人网和糯米网贡献的开源项目,遵循...
本改造项目的主要目标是将`Paoding-Rose`的应用中的视图层渲染引擎由其他方式替换为`Freemarker`。`Freemarker`是一个非侵入性的模板引擎,这意味着它不会与你的业务逻辑代码直接耦合,而是通过模板文件来控制输出。...
"Paoding Rose Demo" 是一个基于Paoding Rose框架构建的示例项目,它展示了该框架在实际应用中的使用方法和功能特性。Paoding Rose是中国Java社区中流行的一种轻量级开发框架,它专注于Web和数据库的集成开发,旨在...
环境配置为maven3.1.1,tomcat6.0.41,jdk1.7,myeclipse10,mysql数据库。使用paoding rose框架,spring3,mybatis3;在dao层简单进行BaseDao设计;用VM实现页面显示。 在controller层实现了单条user数据的显示。
paoding-rose-demo paoding-rose 环境构建 准备工作 jdk 安装完成 gradle 安装完成 网络ok 构建项目结构工具 构建项目 生成一枚空的web项目结构如下 | |____src | | |____main | | | |____java | | | | |____org | |...
"paoding-rose-googlecode" 是一个基于Java的开源项目,最初托管在Google Code上,主要专注于Web开发领域的框架和工具集。这个项目的核心目标是提高开发效率,提供灵活的配置,以及强大的功能来简化复杂的Web应用...
在实现这个简单实例的过程中,首先需要集成Paoding和Lucene到你的项目中。安装完成后,你需要创建一个索引器,使用Paoding对输入的文本进行分词,然后用Lucene的API将这些词构建为索引。索引过程通常包括打开读写器...
**中文分词技术详解——以paoding为例** 中文分词是自然语言处理中的基础步骤,对于中文文本的理解和分析至关重要。在Java领域中,paoding(又称“庖丁”)是一个高效、灵活的中文分词库,专为处理大规模中文文本而...
Rose框架,全称为Paoding Rose,是由人人网和糯米网共同推出的开源Java Web开发框架,旨在提供高效的开发体验。它以其简洁的API设计、强大的功能以及良好的性能,在Java开发社区中获得了不少关注。在本文中,我们将...
【标题】"paoding.rar" 是一个压缩文件,其中包含了 "paoding" 项目的核心组件——"paoding analyzer"。这个工具主要针对中文文本处理,尤其是中文分词,是实现自然语言处理(NLP)任务的关键步骤。 【描述】...
【Lucene Demo (Paoding)】是一个展示如何在Java环境中使用Apache Lucene库进行全文搜索引擎构建的示例项目。Lucene是开源的全文检索引擎库,它提供了强大的文本搜索功能,而Paoding则是针对中文处理的插件,优化了...
1. **配置Paoding**: 首先需要下载Paoding的jar包,并将其添加到项目的类路径中。同时,我们需要配置Paoding的相关参数,如分词模式、停用词列表等。停用词列表通常用于过滤掉在搜索时无实际意义的词,如“的”、...