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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心 BestCoder Round #39 1001 Delete

题目传送门 1 /*2 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少;3 否则再在tot里减去多余的即为答案4 用set容器也可以做,思路一样5 */6 #include &l…

java this() super()_java中的this和super

this对象本身。public class ThisTest {ThisTest tTest;public ThisTest(){tTest this;}public void test(){System.out.println(this);}public static void main(String arg[]){new ThisTest().test();}}成员方法引用。成员变量引用。public class ThisTest {String name;Str…

配置汇编环境:使用vs2010+MASM

1、将MASM32下载并安装到根目录(得到include和lib文件夹),官网即可下载,有64位版本2、配置vs2010 (1)添加项目 a、新建空白解决方案 b、添加空项目 c、项目属性->生成自定义-&g…

java 抽象类命名_Java的抽象类和接口

一.抽象类首先看抽象方法:抽象方法只有方法签名,没有方法的实现。并且被abstract修饰。 例如: abstract void test();有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。抽象类的规则:抽象类必须使用abstr…

JSP、Servlet中get请求和post请求的区别总结

在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法。前两天看《Head First Servlets & JSP》看到其中讲关于Servlet中get请求和post请求的区别,现总结如下: 1:请求数据的大小不同。 因为get请求的数…

用java解决约瑟夫循环问题_Java采用循环链表结构求解约瑟夫问题

本文实例讲述了Java采用循环链表结构求解约瑟夫问题的方法。分享给大家供大家参考。具体分析如下:这是第一次java考试的试题,对于没看过链表的同学来说就不会做,现在回头看看,还真不难。约瑟夫问题:有n个人&#xff0c…

在ubuntu上搭建开发环境9---Ubuntu删除ibus出现的问题及解决

删除 ibus输入法:  sudo apt-get install ibus 我们会遇到下面的问题 Ubuntu 14.04 系统设置很多选项消失。 其实遇到这个问题的一个最主要的原因是之前执行过卸载ibus输入法的操作,所以为了避免这个问题请不要卸载ibus输入法,大家依然可以…

java制作图形界面数据库_java图形界面以及链接数据库

import java、awt、*;import java、awt、event、*;import javax、swing、*;import java、sql、*;public class NoteTextArea extends JFrame implements ActionListener{private JPanel jpnew JPanel();private JButton[] jb new JButton[4];private JComboBox box;private JT…

HDU 3951 (博弈) Coin Game

先考虑两种简单的情况: 如果先手能一次把硬币拿完,即 k > n ,那么先手胜如果每次只能拿一个硬币, 即 k 1 ,那么如果有奇数个硬币先手胜,如果有偶数个硬币后手胜。剩下的情况就是先手一次拿不完&#xf…

顺序表的插入与删除java_C++实现顺序表的常用操作(插入删出查找输出)

实现顺序表的插入,删除,查找,输出操作在C语言中经常用到。下面小编给大家整理实现代码,一起看下吧代码如下所示:#includeusing namespace std;#define MAXSIZE 15typedef int DataType;typedef struct{DataType data[M…

Android实例-手机安全卫士(三十六)-根据Service是否开启确定CheckBox选中状态

一、目标 1、根据service是否在后台运行情况来确定CheckBox的选中状态; 2、解决"设置中心"的“开启来电号码显示归属地”功能在退出程序再进入时选中状态消失,在任务管理器中关闭“来显”服务时,功能仍为选中状态 二、代码实现 1、…

把java复制到e_编写一个程序,将e:\java目录下的所有.java文件复制到e:\jad目录下...

package cn.io.file.demo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.FilenameFilter;import java.io.IOException;/*** 编写一个程序,将e:\java目录下…

HTTP - PUT 上传文件/Shell

今天遇到几个PUT上传的点,但是都没利用起来。一怒之下,在自己本地试了一下。步骤如下: 一、环境: 首先,根据 配置Apache服务器支持向目录PUT文件 更新一下httpd.conf文件,重启所有服务。 二、HTTP - PUT PU…

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件。如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供。我们将相关信息存储在一个intent中,例…

java实现手机开关机_Android 系统重启与关机:Java 代码实现

粘贴一篇关于权限的文章:最近在做个东西,巧合碰到了sharedUserId 的问题,所以收集了一些资料,存存档备份。安装在设备中的每一个apk文件,Android 给每个 APK 进程分配一个单独的用户空间,其 manifest 中的 userid 就是…

C# 泛型的协变和逆变

1. 可变性的类型:协变性和逆变性 可变性是以一种类型安全的方式,将一个对象当做另一个对象来使用。如果不能将一个类型替换为另一个类型,那么这个类型就称之为:不变量。协变和逆变是两个相互对立的概念: 如果某个返回的…

java数据类型的站位_Java 数据类型在实际开发中应用

在前边的文章中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型。在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的对象(比如基本数据类型存在与…

块状元素的居中,首先设置宽度,再设 margin: 0 auto

块状元素的居中,首先设置宽度 width"10px",再设 margin: 0 auto; 。转载于:https://www.cnblogs.com/npk19195global/p/4475576.html

java amf3_Java AMF3 反序列化漏洞分析

写在前面的话AMF(Action Message Format)是一种二进制序列化格式,之前主要是Flash应用程序在使用这种格式。近期,Code White发现有多个Java AMF库中存在目前,漏洞相关信息已上报至美国CERT(详情请参考美国CERT VU#307983)概述目前&#xff0c…

typecho除了首页其他大部分网页404怎么办?

server {listen 80;server_name blog.localhost; #绑定域名index index.htm index.html index.php; #默认文件root /data/webroot/blog; #网站根目录location ~ \.php$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;include fastcgi_params;}if (-f $request_filenam…