svn客户端 java_svn纯java客户端SVNKit学习整理(转)
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学习整理(转)相关推荐
- fastdfs java客户端_FastDFS的Java客户端访问
FastDFS的Java客户端访问: 没前奏,直接上车. 1. 引入依赖: net.oschina.zcx7878 fastdfs-client-java 1.27.0.0 2.在项目resource ...
- fastdfs java客户端 下载_FastDFS java客户端文件上传demo
FastDFS不多讲,直接上java调用代码,以下代码是一个spring mvc中一个完整的上传请求,请参阅 @RequestMapping(value = "/upload", ...
- 纯服务器 客户端文件,纯服务器 客户端文件
纯服务器 客户端文件 内容精选 换一换 目前数据库服务器备份Agent安装包需要提交工单进行获取.当前仅支持x86计算类型的服务器,暂不支持鲲鹏计算类型的服务器.用户需要启用数据库备份前,需先在弹性云 ...
- mongodb java客户端_mongodb的java客户端
6. mongoDB的java客户端 1. springboot操作mongodb 1. maven配置 org.springframework.boot spring-boot-starter-da ...
- Java设计模式(学习整理)---命令模式
设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...
- java客户端开发_ElasticSearch java 客户端开发
2.1介绍:ES提供了两个JAVA REST client 版本 Java Low Level REST Client :用于Elasticsearch的官方低级客户端.它允许通过http与Elast ...
- Java设计模式(学习整理)---单例模式
1.概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例 ...
- Java设计模式(学习整理)---策略模式
1. 模式定义 把会变化的内容取出并封装起来,以便以后可以轻易地改动或扩充部分,而不影响不需要变化的其他部分: 2.模式本质: 少用继承,多用组合,简单地说就是:固定不变的信 ...
- Java基础个人学习整理
Java基础笔记整理 -James Gosling 可以做什么:开发网站,Android开发,大数据, 计算机(computer):硬件(Hardware)和软件(Software)(系统软件和应用软 ...
最新文章
- MDEV Primer
- Linux 的系统运行级别
- python简单的爬虫教程中召唤小海龟_Python练习,网络小爬虫(初级)
- Vue用Cordova打包后的app自升级功能实现
- java collections读书笔记(4) stack
- 在web.config中配置httpHandlers节点是的说明
- 第十二届蓝桥杯Java省赛A组试题:异或数列
- eos-unittest
- 基于visual Studio2013解决面试题之0707最小元素
- Oracle中sql相关的命令
- Linux下常用的优秀软件
- 网易云课堂C++开发工程师案例-网吧收银系统(MFC+ADO) C++收银系统
- HTML跳转页面指定位置的几种方法
- 黑马程序员—因为感恩,所以我也来深圳黑马当班主任
- 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被
- 本地HTML文档批量翻译软件
- Vue-报错1(命名规范)
- Oracle练习脚本
- Fluent UDF代码编写
- 物联网卡怎么激活 如何计费
热门文章
- python预测疾病_吴裕雄--天生自然python机器学习:使用Logistic回归从疝气病症预测病马的死亡率...
- error C2143: syntax error : missing ';' before '}'
- java用内部类实现多重继承
- IDEA包的分层显示
- 山东大学 2020级数据库系统 实验二
- 【OpenCV 例程200篇】62. 图像锐化——钝化掩蔽
- 智能车辆手册 pdf_SIMULINK在虚拟车辆开发方面的应用
- 重磅福利 | 全网唯一,多年踩坑经验,探索测试策略新奇方法之案例剖析(一)...
- 情人节用python写个贪吃蛇安慰自己
- bzoj5324:[Jxoi2018]守卫