- 浏览: 108532 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
zaizi5408:
已经改好了,但是有个问题text3的 更改后无法支持
mac上sublime 支持json, xml 格式化 -
Mybeautiful:
有一个问题,当格式化Json时,里面节点的顺序会变
mac上sublime 支持json, xml 格式化 -
squll369:
zl_dream1106 写道squll369 写道zl_dr ...
日历控件,完全用CSS+JS实现 -
zl_dream1106:
squll369 写道zl_dream1106 写道请问这句话 ...
日历控件,完全用CSS+JS实现 -
zhu547043537:
应该是将解压的三个jar放到插件目录中去
推荐一个eclipse UML 插件
最近项目组要搭一个wiki,经过筛选我们决定使用JSPWiki(网上有大量的分析),待搭完以后,发现他不支持附件文件内容搜索,也就是说,如果这篇wiki中上传了一些doc,xls等文件是不能被搜索到的,但是在jspwiki.properties配置中有如下配置:
jspwiki.searchProvider =LuceneSearchProvider jspwiki.lucene.analyzer = org.apache.lucene.analysis.standard.StandardAnalyzer
也就是JSPWiki也是用lucene来做检索的,于是下了他的源码,看了下这个类com.ecyrd.jspwiki.search.LuceneSearchProvider,发现了如下方法:
protected String getAttachmentContent( Attachment att ) { AttachmentManager mgr = m_engine.getAttachmentManager(); //FIXME: Add attachment plugin structure String filename = att.getFileName(); if(filename.endsWith(".txt") || filename.endsWith(".xml") || filename.endsWith(".ini") || filename.endsWith(".html")) { InputStream attStream; try { attStream = mgr.getAttachmentStream( att ); StringWriter sout = new StringWriter(); FileUtil.copyContents( new InputStreamReader(attStream), sout ); attStream.close(); sout.close(); return sout.toString(); } catch (ProviderException e) { log.error("Attachment cannot be loaded", e); return null; } catch (IOException e) { log.error("Attachment cannot be loaded", e); return null; } } ......
就是说支持文本文件附件(txt,xml,ini,html)的内容搜索,试了一下,上传了一个txt文件,果然是可以被查出来,。
于是决定给这个类动动手术,添加点功能让它可以支持doc和xls, 添加了如下代码在下面(office 2003到2007,文件格式不同,分开来写了),然后重新打包(打好的jar,我放在附件里),启动JSPWiki, 实验了一下,word 和 excel的文件可以被查出来了。
注意的是,这个类的作用是,在附件文件上传,用lucene建立了索引,所以实验的话,一定要重新上传文件,在改这个class之前上传的文件时没有用的。
...... else if(filename.endsWith(".doc")){ InputStream attStream = null; try { attStream = mgr.getAttachmentStream(att); WordExtractor extractor = new WordExtractor(attStream); String s = extractor.getText(); log.debug("Extracted text: " + s + " from attachment: " + filename); return s; } catch (Exception e) { log.error("Attachment cannot be loaded", e); return null; } finally { if(attStream != null){ try { attStream.close(); } catch (IOException e) { log.warn("Couldn't close attachment stream for " + filename, e); } } } } else if(filename.endsWith(".docx")){ InputStream attStream = null; try { attStream = mgr.getAttachmentStream(att); XWPFWordExtractor extractor = new XWPFWordExtractor(new XWPFDocument(attStream)); String s = extractor.getText(); log.debug("Extracted text: " + s + " from attachment: " + filename); return s; } catch (Exception e) { log.error("Attachment cannot be loaded", e); return null; } finally { if(attStream != null){ try { attStream.close(); } catch (IOException e) { log.warn("Couldn't close attachment stream for " + filename, e); } } } } else if(filename.endsWith(".xls")){ InputStream attStream = null; try { attStream = mgr.getAttachmentStream(att); HSSFWorkbook workbook=new HSSFWorkbook(attStream); HSSFSheet sheet=null; StringBuffer sb = new StringBuffer(); for(int i = 0; i < workbook.getNumberOfSheets(); i++) { sheet=workbook.getSheetAt(i); if(sheet == null){ continue; } for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) { HSSFRow row=sheet.getRow(j); if(row == null){ continue; } for (int k = 0; k < row.getLastCellNum(); k++) { sb.append(row.getCell(k)); sb.append(" "); } } } String s = sb.toString(); log.debug("Extracted text: " + s + " from attachment: " + filename); return s; } catch (Exception e) { log.error("Attachment cannot be loaded", e); return null; } finally { if(attStream != null){ try { attStream.close(); } catch (IOException e) { log.warn("Couldn't close attachment stream for " + filename, e); } } } } else if(filename.endsWith(".xlsx")){ InputStream attStream = null; try { attStream = mgr.getAttachmentStream(att); XSSFWorkbook workbook = new XSSFWorkbook(attStream); XSSFSheet sheet=null; StringBuffer sb = new StringBuffer(); for(int i = 0; i < workbook.getNumberOfSheets(); i++) { sheet = workbook.getSheetAt(i); if(sheet == null){ continue; } for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) { XSSFRow row=sheet.getRow(j); if(row == null){ continue; } for (int k = 0; k < row.getLastCellNum(); k++) { sb.append(row.getCell(k)); sb.append(" "); } } } String s = sb.toString(); log.debug("Extracted text: " + s + " from attachment: " + filename); return s; } catch (Exception e) { log.error("Attachment cannot be loaded", e); return null; } finally { if(attStream != null){ try { attStream.close(); } catch (IOException e) { log.warn("Couldn't close attachment stream for " + filename, e); } } } } ......
- JSPWiki.jar (1019.4 KB)
- 下载次数: 31
发表评论
-
Maven 中的自动测试
2013-12-28 08:54 1216我们用maven来管理一个项目,只要将测试类放在s ... -
mac上sublime 支持json, xml 格式化
2013-12-01 10:57 15165利用Tidy来format, 1. 首先下载插件的 ... -
在JDK中直接获取datasource,不利用其他的东东
2013-11-02 11:42 1083现在都在用spring里, ... -
Web的服务器文件浏览器
2013-04-21 11:39 1616昨天在家,写了一个web的文件浏览器,可以方便的查看和下载 ... -
mac 下使用eclipse (字体模糊,全屏)
2013-03-07 14:13 5434刚买了一台mac pro,安装了eclipse 3.7(4. ... -
eclispe的字体重新设定
2012-11-06 11:03 934eclispe 自从更新到了indigo版本后,那些字体的设定 ... -
推荐一个eclipse UML 插件
2012-09-21 17:31 3920原来一直用EA来画UML, 最近公司遭遇版权问题,EA不能使用 ... -
String 超多位数相加
2011-08-23 15:44 1763利用上篇写的StringOrder,再写一个"无聊 ... -
String 顺序倒序迭代实现
2011-08-23 13:54 2476面试老是会遇到一些用String来考算法的题目,要取出Stri ... -
Java回调机制,利用回调写的JDBC 访问例子
2011-08-01 14:14 1748首先说说为什么要用到回调这个方式, 我 ... -
获取classpath里文件的URL
2011-07-19 12:40 1337通常,我们在项目中,要获得一个文件的url,可以通过如下2种方 ... -
利用多例模式编写配置文件读取器
2011-07-13 23:26 1029多例模式是单例模式的一个变种,可以根据一个特征值购建 ... -
代理模式(Proxy)笔记
2011-06-24 14:24 1153我对代理模式的理解就是,对于类中的方法进行拦截的一 ... -
Tomcat发布项目方法的3种方式
2011-06-23 00:24 11371.最简单的方式,将web项目文件件拷贝到webapps 目录 ... -
四则运算表达式求解的简单实现
2011-06-22 11:04 1766这2天比较空,就实现了一个四则运算表达式求解,记录在此,它可以 ... -
DAO层和Service层中访问Session
2011-06-19 13:13 10240很多情况下,我们需要在DAO或者Service层拿到S ...
相关推荐
5. **模板与插件**:JSPWiki支持自定义模板,提供丰富的插件系统,如表格、日历、搜索等,增强功能。 ### 四、JSPWiki源码分析 1. **架构**:JSPWiki基于MVC模式设计,使用Servlet处理HTTP请求,JSP负责视图展示,...
默认情况下,JSPWiki使用内置的文件系统存储页面内容,对于小规模应用而言,这种模式是可行的。然而,随着页面数量的增加,文件系统的性能瓶颈会逐渐显现,如搜索效率低、备份复杂等问题。此时,将数据存储迁移到...
2. **插件**:JSPWiki支持通过插件扩展功能,如搜索、评论、表单等,这些插件通常以单独的JAR形式存在。 3. **依赖库**:JSPWiki依赖于许多其他的Java库,如Apache Commons、iText(用于PDF导出)等,这些库的JAR...
所有过10下载资源归0 JSPWiki是一个不错的wiki引擎,...JSPWiki不使用现成的数据库管理软件,所有的文件以文本文件的形式存放。它利用类似CVS的机制保证了文件版本的完整性。支持中文,支持版本比较、权限管理等功能!
1. 主题和插件:JSPWiki支持更换主题,以及通过安装插件来扩展功能,如搜索引擎优化、评论系统等。 2. 性能优化:根据服务器负载,调整缓存设置、数据库连接池大小等。 3. 安全性:定期更新JSPWiki以获取最新的安全...
2. **模版应用**: 将"jspwiki中文模版"的文件覆盖到JSPWiki的安装目录下的相应位置,尤其是`templates`目录,确保模版的JSP文件替换掉默认的模板。 3. **配置调整**: 修改`WEB-INF/web.xml`配置文件,设置wiki的...
- **版本控制**:JSPWiki提供了版本控制系统,可以查看历史版本,比较和恢复旧版内容。 - **权限管理**:支持用户注册和登录,可设置不同的权限级别,如读写权限,确保信息安全。 - **多语言支持**:JSPWiki支持多种...
除了内置的角色外,JSPWiki 还支持自定义的基于组的角色,这些组角色有一些限制: - 组名称不能与内置角色(如 Admin、Authenticated 等)相同。 - 组名称也不能与现有用户的用户名相同。 **1.3 权限** 在 ...
4. **Store**:存储层处理数据的持久化,JSPWiki支持多种存储后端,如文件系统、数据库等,这部分源码展示了如何与不同存储机制交互。 5. **Web-INF**:包含web.xml配置文件,定义了Servlet和过滤器的配置,以及...
7. **搜索功能**:内置的搜索引擎帮助用户快速查找所需内容。 **安装与部署** JSPWiki-2.8.2-bin.zip通常包括以下步骤: 1. 解压缩文件,得到包含war文件和其他配置文件的目录结构。 2. 将war文件部署到支持Servlet...
7. **搜索引擎优化**:2.8.4版本可能包含了对搜索引擎优化的改进,使得wiki内容更容易被搜索引擎发现和索引,从而提升在线可见度。 8. **模板与样式**:用户可以自定义页面模板和样式表,以符合组织的品牌形象或者...
在Web应用中,多部分请求常用于上传文件,这表明JSPWiki可能支持用户上传文件到Wiki页面,增强了交互性。 **4. Wiki系统基础** Wiki系统是一种协作式的内容管理系统,允许用户创建、编辑和链接页面。JSPWiki遵循...
JSPWiki is a simple WikiWiki clone. It keeps all of itsformatting in JSP files, and uses a custom Java class calledcom.ecyrd.jspwiki.WikiEngine to all interfacing with the Wiki
此外,`jspwiki`还具备了链接、标签、搜索等功能,方便用户组织和查找信息。它使用Markdown或Wiki语法,使得文本格式化变得简单,同时支持插件系统,通过安装额外的插件可以扩展其功能。 在提供的压缩包文件中,...
JSPWiki的核心特性可能包括页面版本控制、用户认证、页面链接跟踪、以及支持wikitext语法,使得非技术人员也能方便地编辑和贡献内容。 "jspwiki_jspwiki源码"标签强调了这是JSPWiki项目的源代码,这意味着我们可以...
JSPWiki需要一个数据库来存储页面内容和其他元数据。常见的支持数据库包括MySQL、PostgreSQL、HSQLDB等。配置数据库通常涉及到以下几个步骤: - 修改`jspwiki.properties`文件中的数据库连接参数,如URL、用户名、...
1. **易用性**:JSPWiki使用简单的文本格式来创建页面,支持Markdown和wikitext语法,使得非程序员也能轻松编辑内容。 2. **版本控制**:JSPWiki内置了版本控制系统,可以追踪每一次编辑,方便查看历史版本并恢复旧...
- 配置web.xml和jspwiki.properties文件,设置数据库连接、权限管理等参数。 - 启动服务器,通过浏览器访问指定URL即可开始使用JSPWiki。 4. **JSPWiki的使用** - 用户注册:新用户可以通过注册账号来参与编辑和...
JSPWiki安装包,详细安装过程可以查看我写的博客,JSPWiki环境搭建