http://www.iteye.com/topic/688217

http://blog.csdn.net/feiren127/article/details/7551782

把svnkit.jar添加到项目中,用于实现svn功能。 把jackson-all-1.6.2.jar添加到项目中,用于显示树列表。把javaee.ar添加到项目中。

新建一个类(SVNUtil.class)实现svn功能

private String svnRoot;

private String userName;

private String password;

private SVNRepository repository;

/***

* 构造方法

* @param svnRoot

*             svn根目录

*/

public SVNUtil(String svnRoot) {

this.svnRoot=svnRoot;

}

/***

* 构造方法

* @param svnRoot

*             svn根目录

* @param userName

*             登录用户名

* @param password

*             登录密码

*/

public SVNUtil(String svnRoot, String userName, String password) {

this.svnRoot=svnRoot;

this.userName=userName;

this.password=password;

}

/***

* 通过不同的协议初始化版本库

*/

private static void setupLibrary() {

// 对于使用http://和https://

DAVRepositoryFactory.setup();

//对于使用svn:/ /和svn+xxx:/ /

SVNRepositoryFactoryImpl.setup();

//对于使用file://

FSRepositoryFactory.setup();

}

每次连接库都进行登陆验证

/***

* 登录验证

* @return

*/

public boolean login(){

setupLibrary();

try{

//创建库连接

repository=SVNRepositoryFactory.create(SVNURL.parseURIEncoded(this.svnRoot));

//身份验证

ISVNAuthenticationManager authManager = SVNWCUtil

.createDefaultAuthenticationManager(this.userName,

this.password);

//创建身份验证管理器

repository.setAuthenticationManager(authManager);

return true;

} catch(SVNException svne){

svne.printStackTrace();

return false;

}

}

下面的方法实现查询给定路径下的条目列表功能

/***

*

* @param path

* @return 查询给定路径下的条目列表

* @throws SVNException

*/

@SuppressWarnings("rawtypes")

public List listEntries(String path)

throws SVNException {

Collection entries = repository.getDir(path, -1, null,

(Collection) null);

Iterator iterator = entries.iterator();

List svns = new ArrayList();

while (iterator.hasNext()) {

SVNDirEntry entry = (SVNDirEntry) iterator.next();

SVN svn = new SVN();

svn.setCommitMessage(entry.getCommitMessage());

svn.setDate(entry.getDate());

svn.setKind(entry.getKind().toString());

svn.setName(entry.getName());

svn.setRepositoryRoot(entry.getRepositoryRoot().toString());

svn.setRevision(entry.getRevision());

svn.setSize(entry.getSize()/1024);

svn.setUrl(path.equals("") ? "/"+entry.getName() : path +"/"+entry.getName());

svn.setAuthor(entry.getAuthor());

svn.setState(svn.getKind() == "file"?null:"closed");

svns.add(svn);

}

新建一个SVNServlet

添加一个方法用于把java对象转换为json字符串

/**

* 将java对象转换为json字符串

*

* @param obj

*            :可以为map,list,javaBean等

* @return json字符串

* @createTime 2010-11-23 下午07:42:58

*/

public static String object2Json(Object obj) {

try {

StringWriter sw = new StringWriter();

JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);

mapper.writeValue(gen, obj);

gen.close();

return sw.toString();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

this.doPost(request, response);

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

Object svns = null;

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

String path = request.getParameter("pid");

String url = "svn://localhost/svndemo1";

String usrName = "usrName";

String password = "password";

if (path == null) {

path = "";

}

path = new String(path.getBytes("ISO-8859-1"),"UTF-8");

String type = request.getParameter("type");

PrintWriter out = response.getWriter();

try {

SVNUtil svnUtil = new SVNUtil(url, usrName, password);

if (svnUtil.login()) {

/*用于查询历史记录

if ("history".equals(type)) {

List svnl = svnUtil.getHistory(path);

HashMap sv = new HashMap();

sv.put("total", svnl.size());

sv.put("rows", svnl);

svns = sv;

} else {*/

svns = svnUtil.listEntries(path);

//}

//把java对象转换成json字符串

String json = SVNServlet.object2Json(svns);

out.print(json);

} else {

System.out.println("验证失败");

}

} catch (SVNException ex) {

ex.printStackTrace();

}

out.flush();

out.close();

}

新建一个index.jsp用户显示版本数列表,页面显示我使用了jquery-easyui模板

pageEncoding="utf-8"%>

String path = request.getContextPath();

String basePath = request.getScheme() + "://"

+ request.getServerName() + ":" + request.getServerPort()

+ path + "/";

%>

html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

">

SVN

href="plugs/themes/default/easyui.css">

$(function() {

$(‘#test‘).treegrid({

title : ‘SVN列表‘,

nowrap : false,

rownumbers : true,

collapsible : false,

url : ‘svn?pid=‘,

idField : ‘url‘,

treeField : ‘url‘,

frozenColumns : [ [ {

title : ‘路径‘,

field : ‘url‘,

width : 350,

formatter : function(value) {

return ‘‘ + decodeURI(value.substr(value.lastIndexOf("/"))) + ‘‘;

}

} ] ],

columns : [ [ {

field : ‘name‘,

title : ‘名称‘,

width : 120

}, {

field : ‘size‘,

title : ‘文件大小(KB)‘,

width : 80,

rowspan : 2

}, {

field : ‘revision‘,

title : ‘版本号‘,

width : 80,

rowspan : 2

}, {

field : ‘author‘,

title : ‘作者‘,

width : 100,

rowspan : 2

}, {

field : ‘date‘,

title : ‘修改日期‘,

width : 130,

rowspan : 2

}, {

field : ‘commitMessage‘,

title : ‘注释‘,

width : 150,

rowspan : 2

}, {

field : ‘kind‘,

title : ‘操作‘,

width : 120,

align : ‘center‘,

rowspan : 2,

formatter : function(value) {

return value==‘file‘ ? ‘下载历史版本‘ : ‘‘;

}

}] ],

onBeforeExpand : function(row, param) {

$(this).treegrid(‘options‘).url = ‘svn?pid=‘+encodeURI(decodeURI(row.url));

}

});

});

function download(){

setTimeout(function(){

var node = $(‘#test‘).treegrid(‘getSelected‘);

if(node !=null)

window.open("download?url="+encodeURI(decodeURI(node.url))+"&size="+node.size+"&name="+encodeURI(decodeURI(node.name))+"&revision="+node.revision);

},200);

}

function viewHistory(){

setTimeout(function(){

var node = $(‘#test‘).treegrid(‘getSelected‘);

if(node != null) {

window.open("history.jsp?uri="+encodeURI(decodeURI(node.url)),"_blank","height=400,width=700,status=yes,toolbar=no,menubar=no,location=no");

}

}, 200);

}

原文:http://www.cnblogs.com/softidea/p/4267762.html

svn客户端 java_svn纯java客户端SVNKit学习整理(转)相关推荐

  1. fastdfs java客户端_FastDFS的Java客户端访问

    FastDFS的Java客户端访问: 没前奏,直接上车. 1. 引入依赖: net.oschina.zcx7878 fastdfs-client-java 1.27.0.0 2.在项目resource ...

  2. fastdfs java客户端 下载_FastDFS java客户端文件上传demo

    FastDFS不多讲,直接上java调用代码,以下代码是一个spring mvc中一个完整的上传请求,请参阅 @RequestMapping(value = "/upload", ...

  3. 纯服务器 客户端文件,纯服务器 客户端文件

    纯服务器 客户端文件 内容精选 换一换 目前数据库服务器备份Agent安装包需要提交工单进行获取.当前仅支持x86计算类型的服务器,暂不支持鲲鹏计算类型的服务器.用户需要启用数据库备份前,需先在弹性云 ...

  4. mongodb java客户端_mongodb的java客户端

    6. mongoDB的java客户端 1. springboot操作mongodb 1. maven配置 org.springframework.boot spring-boot-starter-da ...

  5. Java设计模式(学习整理)---命令模式

    设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...

  6. java客户端开发_ElasticSearch java 客户端开发

    2.1介绍:ES提供了两个JAVA REST client 版本 Java Low Level REST Client :用于Elasticsearch的官方低级客户端.它允许通过http与Elast ...

  7. Java设计模式(学习整理)---单例模式

    1.概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例 ...

  8. Java设计模式(学习整理)---策略模式

       1. 模式定义          把会变化的内容取出并封装起来,以便以后可以轻易地改动或扩充部分,而不影响不需要变化的其他部分: 2.模式本质:  少用继承,多用组合,简单地说就是:固定不变的信 ...

  9. Java基础个人学习整理

    Java基础笔记整理 -James Gosling 可以做什么:开发网站,Android开发,大数据, 计算机(computer):硬件(Hardware)和软件(Software)(系统软件和应用软 ...

最新文章

  1. MDEV Primer
  2. Linux 的系统运行级别
  3. python简单的爬虫教程中召唤小海龟_Python练习,网络小爬虫(初级)
  4. Vue用Cordova打包后的app自升级功能实现
  5. java collections读书笔记(4) stack
  6. 在web.config中配置httpHandlers节点是的说明
  7. 第十二届蓝桥杯Java省赛A组试题:异或数列
  8. eos-unittest
  9. 基于visual Studio2013解决面试题之0707最小元素
  10. Oracle中sql相关的命令
  11. Linux下常用的优秀软件
  12. 网易云课堂C++开发工程师案例-网吧收银系统(MFC+ADO) C++收银系统
  13. HTML跳转页面指定位置的几种方法
  14. 黑马程序员—因为感恩,所以我也来深圳黑马当班主任
  15. 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被
  16. 本地HTML文档批量翻译软件
  17. Vue-报错1(命名规范)
  18. Oracle练习脚本
  19. Fluent UDF代码编写
  20. 物联网卡怎么激活 如何计费

热门文章

  1. python预测疾病_吴裕雄--天生自然python机器学习:使用Logistic回归从疝气病症预测病马的死亡率...
  2. error C2143: syntax error : missing ';' before '}'
  3. java用内部类实现多重继承
  4. IDEA包的分层显示
  5. 山东大学 2020级数据库系统 实验二
  6. 【OpenCV 例程200篇】62. 图像锐化——钝化掩蔽
  7. 智能车辆手册 pdf_SIMULINK在虚拟车辆开发方面的应用
  8. 重磅福利 | 全网唯一,多年踩坑经验,探索测试策略新奇方法之案例剖析(一)...
  9. 情人节用python写个贪吃蛇安慰自己
  10. bzoj5324:[Jxoi2018]守卫