- 浏览: 225308 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (212)
- 架构师-01-文档目录 (3)
- 架构师-02-组织 (7)
- 架构师-03-实施 (35)
- 架构师-04-监督 (14)
- 架构师-05-工具 (29)
- 架构师-09-引用文集 (63)
- 专题-01-微博应用 (5)
- 专题-02-GoogleEarth (1)
- 专题-03-运行维护 (9)
- 专题-04-经纪人营平 (3)
- 专题-05-RCP&RAP (5)
- 专题-06-框架PK (3)
- 专题-07-Android (13)
- 专题-08-UI (3)
- 专题-liferay6 (6)
- 专题-extjs4 (3)
- 专题-CXF (3)
- 专题-封闭网络的社会化 (0)
- 扯谈 (4)
- 外包 (9)
- 专题-C++ (4)
- 专题-09-BI (2)
- jquery&easyui (2)
- 专题-搜索引擎 (1)
最新评论
-
brighter:
oMapper.configure(Deserializati ...
jackson 抛出 bean 中没有定义字段的错误,只好用 gson -
PassFeed_free:
public Bitmap decode(ImageDecod ...
android universalimageloader 几点改进 -
PassFeed_free:
楼主你好, 请问这个库, 在大屏显示高清图片 ,listvie ...
android universalimageloader 几点改进 -
yonghong:
楼主只是揣测
JIRA4.1 升级到 JIRA5.1 -
abdxj:
"Could NOT parse license t ...
JIRA4.1 升级到 JIRA5.1
facebook 很火,那条能聊天的底部工具条更惹眼,似乎也容易抄袭,好象还很受用,决定抄一把。
(1)基础框架就选 DWR,为什么,因为我讨厌写太多 JS 脚本。还有更重要的原因是 DWR3 支持多种 WEB 容器的 comet 特性。我喜欢这句话“Asynchronous servlet support for Tomcat and Glassfish”。
那么多的 web 容器,每个都有自己的 Comet 长连接实现,自己去实现每个容器的特殊接口,不如交给 dwr 去搞定。
从零开始写也是不可能的,幸好 dwr.war 的包中已经有了个基础的聊天 demo,所以功能上是不成问题。
(2)外观要长得象 facebook 的底条,开源的一两个,拼凑一下。
-http://www.sohtanaka.com/web-design/examples/footer-panel/
-http://anantgarg.com/2009/05/13/gmail-facebook-style-jquery-chat/
-http://www.cometchat.com/ 这个抄得神似一些,可惜需要美刀。
(4)如果能配上代码,就完美许多了。coming soon.
(5)还是直接拿来用比较好,这个站点几乎是最佳了,极力推荐一下下:http://code.google.com/p/ijab/
======================================================================
选择 ijab , 接下来是集成 ijab 的功能了。
一般来说,拥有注册用户的网站都有自己的用户和群组,无需要再另外注册和管理了,后台 xmpp 服务器首选 OpenFire,如何无缝集成 OpenFire+iJab+自己网站会员管理?
(1)OpenFire + iJab 比较容易, http://code.google.com/p/ijab/wiki/iJabWithOpenfire
(2)搞了许久才测试成功,版本的选择很重要
. Openfire3.6.4
. iJab1.03
. 主系统页面和 http-bind 必须相同域名,有两种方法一是用 apache 代理,二是在 tomcat Web应用中加入代理 servlet,都测试通过
(3)apache 代理
<VirtualHost 192.168.1.100:80> ServerAdmin webmaster@plusweb.com DocumentRoot /D/WORK/SAND/JAVA/workspace/sns/ijab <Directory /D/WORK/SAND/JAVA/workspace/sns/ijab> Options +Indexes +Multiviews </Directory> ServerName ideall01.gicp.net AddDefaultCharset UTF-8 RewriteEngine on RewriteRule http-bind/ http://localhost:7070/http-bind/ [P] </VirtualHost> AddDefaultCharset UTF-8 Options +MultiViews <IfModule mod_rewrite.c> RewriteEngine On RewriteRule http-bind/ http://localhost:7070/http-bind/ [P] </IfModule>
这个单独ijab可以使用,无法和我的应用集成一起。
(4)加入 servlet 的方法很好,我很喜欢。
<servlet> <servlet-name>HttpBindServlet</servlet-name> <servlet-class>com.plus.openfire.servlet.ProxyServlet</servlet-class> <init-param> <param-name>url</param-name> <param-value>http://192.168.1.100:7070/http-bind/</param-value> </init-param> </servlet> <!--@@JSPC-SERVLETS@@--> <!-- Servlet mappings --> <servlet-mapping> <servlet-name>HttpBindServlet</servlet-name> <url-pattern>/http-bind/*</url-pattern> </servlet-mapping>
以下代码来自于http://www.iteye.com/topic/520109
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ProxyServlet extends HttpServlet { private String url; /** * 对servlet进行请求处理,并将结果在指定输出流中输出 * * @param os * @param servletName * @param parm * @throws IOException * @throws MalformedURLException */ private void process(HttpServletRequest req, HttpServletResponse resp, String[] target) throws MalformedURLException, IOException { // 取得连接 HttpURLConnection huc = (HttpURLConnection) new URL(url + target[0]) .openConnection(); // 设置连接属性 huc.setDoOutput(true); huc.setRequestMethod("POST"); huc.setUseCaches(false); huc.setInstanceFollowRedirects(true); huc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); huc.connect(); // 往目标servlet中提供参数 OutputStream targetOS = huc.getOutputStream(); targetOS.write(target[1].getBytes()); targetOS.flush(); targetOS.close(); // 取得页面输出,并设置页面编码及缓存设置 resp.setContentType(huc.getContentType()); resp.setHeader("Cache-Control", huc.getHeaderField("Cache-Control")); resp.setHeader("Pragma", huc.getHeaderField("Pragma")); resp.setHeader("Expires", huc.getHeaderField("Expires")); OutputStream os = resp.getOutputStream(); // 将目标servlet的输入流直接往页面输出 InputStream targetIS = huc.getInputStream(); int r; while ((r = targetIS.read()) != -1) { os.write(r); } targetIS.close(); os.flush(); os.close(); huc.disconnect(); } /** * 将参数中的目标分离成由目标servlet名称和参数组成的数组 * * @param queryString * @return * @throws UnsupportedEncodingException */ private String[] parse(Map map) throws UnsupportedEncodingException { String[] arr = { "", "" }; Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry me = (Entry) iter.next(); String[] varr = (String[]) me.getValue(); if ("servletName".equals(me.getKey())) { // 取出servlet名称 arr[0] = varr[0]; } else { // 重新组装参数字符串 for (int i = 0; i < varr.length; i++) { // 参数需要进行转码,实现字符集的统一 arr[1] += "&" + me.getKey() + "=" + URLEncoder.encode(varr[i], "utf-8"); } } } arr[1] = arr[1].replaceAll("^&", ""); return arr; } @Override public void init() throws ServletException { // 设置目标服务器地址 url = this.getInitParameter("url"); if (!url.endsWith("/")) url = url + "/"; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String[] target = parse(req.getParameterMap()); process(req, resp, target); } }
发表评论
-
集成Hibernate Search做全文检索
2014-05-03 15:42 539集成Hibernate Search做全文检索 原文来自 h ... -
Base64扩展,自定义字串和顺序
2012-12-06 11:10 1676Base64很标准,sun 的 jdk 包含了实现,JS ... -
避免跨域问题 ajax proxy
2012-12-04 09:31 818前端全是 AJAX 框架,其中用到一些动态 API 调用,动静 ... -
Arc-03-32 用户事件跟踪
2012-07-05 15:25 729参照 clickstream 项目,保存到数据库 1.实现原 ... -
CXF 结合jaxb返回json字符串时,当属性为数值型字符串时,没有双引号问题
2012-06-04 14:00 2098问题:CXF 结合jaxb返回json字符串时,当属性为数值型 ... -
Arc-03-30-Postgresql 数据导出到Sqlite
2012-05-15 09:39 0用了空间数据库 PostGis,所以用了 Postgresql ... -
extjs4 有用的资源链接
2012-05-12 01:07 659对 Ext 扩展的一些小总结 http://laodaoba ... -
Arc-03-29 CXF 实现 REST 方式上传文件
2012-04-09 00:46 3069CXF 实现 REST 方式上传文件 /** ... -
Arch-03-28 Jndi 配置 Mongodb jetty 实现
2012-03-06 15:20 1623使用 springdata mongodb,直接使用 spri ... -
Arc-03-27-FTP 服务和客户端小结
2012-01-29 18:08 772尽管局域网中传输文件有 n 多方法,samba,webdav, ... -
Arc-03-26-相册图片短码编码实现
2011-12-29 17:01 911应用中需要上传用户图片,不想数据库单独维护图片的信息,想直接从 ... -
Arch-03-25-JAVA异常列表
2011-12-20 09:37 916ClassCastException 类型转换异常类 ... -
Arch-03-24- Spring Security 应用
2011-11-08 17:47 1435Spring Security 用了几次,还没有在集群环境中使 ... -
Arch-03-23- ActiveMQ 实践
2011-10-28 15:03 823ActiveMQ 到了非用不可的地步了,学习一下吧。主要用途定 ... -
Arch-03-22- 编程实现多数据源,水平切分,异种数据源
2011-10-20 17:35 815在 Spring 的框架下,通过编程实现多数据源(JDBC), ... -
Arch-03-21- Spring 中调用 Guice 中的注入
2011-10-06 20:27 882当 spring 和 guice 共同存在一个项目中,且 sp ... -
Arch-03-20- Shindig 实践
2011-10-06 16:53 779之前已经抄录了几篇网文,初步了解 shindig 功能与特性, ... -
Arch-03-19- NoSQL实践
2011-09-26 10:27 1333虽然对新技术甚为谨慎,但目前大家所做的伪 sns 的 nosq ... -
Arch-03-18- 用 Mysql-proxy 搭建 MySQL 集群
2011-09-20 10:21 882对应上篇 pgpool2 搭建 postgresql 集群,因 ... -
Arch-03-17- 用 pgpool-II 搭建 PostgreSQL 集群
2011-09-19 10:00 3015(一)方案 尽管做数据库 postgresql 集群的方式 ...
相关推荐
Arch-Linux-Install-ScriptArch_Linux_安装脚本_Arch-Linux-Installer
Next Generation On Demand (NGOD) Asset Architecture Comcast-SP-NGOD-ASSET-ARCH-I03-100731 Issued July 31, 2010
"cacti-plugin-arch-2.0.tar.gz" 是一个针对Cacti的插件包,用于扩展Cacti的功能,提供更丰富的监控选项。此插件名为“Arch”,可能是对系统架构或性能分析相关的增强。 该压缩包文件的名称表明它是版本2.0,通常这...
OpenRISC是一种开源的指令集架构(ISA),它致力于提供一个简单、易于实现和使用的处理器核心,适用于广泛的嵌入式系统和应用程序。该文档是关于OpenRISC1000架构的手册,版本号为1.0,修订号为0,发布日期为2012年...
标题“Arch-03-08-热敏打印机集成方法”指的是关于在计算机系统或应用程序中集成热敏打印机的技术过程。热敏打印机是一种利用热敏纸进行打印的设备,广泛应用于零售、餐饮和其他需要快速、小票打印的场景。集成热敏...
基于android8.1源码平台中生成的jar,亲测可用!!!!
变系数ARCH-M模型是时间序列分析领域的重要研究对象,其核心在于通过截面似然估计来检验模型是否具有条件异方差性(ARCH效应)。首先,我们来探讨一下条件异方差性的概念,它是指在时间序列分析中,随机变量的条件...
UPnP(通用即插即用)技术是一种允许设备在家庭或...总而言之,通过《UPnP™ Device Architecture 1.1》文档,我们可以系统地掌握UPnP技术的基础知识和架构原理,并进一步探索如何在各种网络设备中实现和应用UPnP技术。
标题“Arch-03-15- Nginx+tomcat 配置负载均衡动静分离”涉及的是在Web服务器架构中使用Nginx与Tomcat的集成,通过配置实现负载均衡和动静态资源分离。这样的架构可以提高系统的可用性和响应速度,减轻后端应用...
本篇内容将深入探讨处理器架构中的顺序执行(Sequential Execution, SEQ)机制,包括其硬件结构、指令流、以及各执行阶段的具体功能。通过北京大学《计算机系统导论》第十讲提供的材料,本文旨在为读者提供一个全面...
标题中的"Python库 | arch-4.11-cp35-cp35m-win32.whl"指的是一个特定版本的Python库,名为“arch”,版本为4.11,适用于Python 3.5解释器(由"cp35"标识),且是针对32位Windows操作系统("win32")的。"cp35m"表示...
Next Generation On Demand (NGOD) Overall Architecture Comcast-SP-NGOD-GEN-ARCH-I03-100731 Issued July 31, 2010
总的来说,arch-snds100驱动程序是为s3c44b0x处理器定制的一个关键组件,它确保了系统对snds100设备的全面支持,提供了高效的数据交互和功能实现。通过深入理解驱动的工作原理和使用方法,开发人员可以更好地优化...
python库。 资源全名:arch-4.8.0-cp27-cp27m-win32.whl
NULL 博文链接:https://cnmqw.iteye.com/blog/1243596
资源来自pypi官网。 资源全名:arch-4.17-cp39-cp39-manylinux1_x86_64.whl
总结来说,UPnP-arch-DeviceArchitecture-v2.0是一份详尽的UPnP协议开发指南,它不仅覆盖了UPnP协议的核心功能,还提供了网络设备开发的关键实现步骤。通过这份文件,开发者可以更深入地理解和掌握UPnP协议,从而在...
资源来自pypi官网。 资源全名:arch-4.9.1-cp36-cp36m-macosx_10_6_intel.whl
安装克隆这个仓库git clone https://github.com/jannispinter/arch-openwrt-buildroot.git构建 docker 镜像 cd arch-openwrt-buildrootdocker build -t= " arch-openwrt-buildroot:trunk " . 最后的点表示Dockerfile...
我的Arch_Linux安装步骤和日志_Arch-Linux-install-log