ssh2实例(带截图)
SSH2整合实例详细教程

本次教程是SSH2的环境搭建,主要用到的技术是struts2.0+hibernate3.2+spring2.0,这种架构在现在很流行的,也是很多高校学生做毕业设计的架构,今天我们就用这种架构做一个简单的实例,详细的步骤,在于抛砖引玉,给大家一点启发。
一、创建数据库的时候会创建出联合主键<Composite-id>。
二、项目创建1、打开MyEclipse,点击File,指向New,点击Web Project。
2、输入工程名SSH,J2EE Specification Level为Java EE 5.0,点Finish即可创建完项目。
三、添加hibernate环境1、右击刚建立的SSH项目,指向MyEclipse,点击Add Hibernate Capabilities。
2、出现如下对话框之后,选择要用到的Hibernate3.2,以及所用到的包,选择Copy checked Library Jars to project folder and add to build-path,点击Next。
3、到了这一步,按默认设置,点击Next。
4、取消Specify database connection details的选择,再点击Next。
5、取消Create SessionFactory class选择,最后点击Finish。
这样一些有关hibernate的jar包点导进来了,以及建了一个hibernate.cfg.xml文件。
导入前:导入后:四、添加spring环境1、和添加hibernate环境的方法大致相同,右击SSH项目,指向MyEclipse,点击Add spring Capabilities。
2、选择要用到的Spring 2.0,勾选用到的库,注意还要勾选Spring 2.0 Web Libraries的库,一共是勾选了5个库的。
再选择Copy checked Library contents to project folder(TLDs always copied),点击Next。
用SSH2实现简单的用户登录注册删除功能

第一次尝试把SSH2整合起来,这里记下编写当中遇到的问题和自己的思考一、使用struts编写登陆注册等界面Java代码1.<body>2.This is my Register page. <br>3.<form action = "register!register" method = "post">ername:<s:textfield name ="username"/><br>5.password:<s:password name = "password1"/><br>6.repeatpassword:<s:password name = "password2"/><br>7.email:<s:textfield name ="email"/><br>8.<s:submit value ="submit"/><br>9.<s:reset value ="reset"/><br>10. <s:actionerror /> <s:actionmessage />11. </form>12. </body>注意这里的 <s:actionerror /> <s:actionmessage />用法表示出Action中的this.addActionError("the username repeated");字符串参数。
由于之前分析过很多类似的界面,这里不再赘述二、在spring框架中引入hibernate框架首先我引入spring框架,在其配置文件中,引入hibernate框架。
SSH2详细(框架搭建)

applicationContext.xml常用配置:
sessionFactory配置:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactor yBean">
<filter-name>struts</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
第五页,编辑于星期三:六点 八分。
struts2相关配置
struts.xml文件配置 在项目src目录下添加struts.xml配置文件。其基本配置如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
一个属性被映射为主键 . 置于 getXxxx() 前 .
第十七页,编辑于星期三:六点 八分。
JPA相关注解
@GeneratedValue(strategy=GenerationType,generator="")
可选
strategy: 表示主键生成策略 , 有 AUTO,INDENTITY,SEQUENCE 和 TABLE 4 种 , 分别表示让 ORM 框架自动选择 ,
ganymed-ssh2使用

ganymed-ssh2使⽤通过maven库获取ganymed-ssh2-262.jar,这是⼀个实现了ssh2协议的⼯具包,可以远程连接linux机器,执⾏命令,有些⼯作全靠它了⽰例代码如下:<!--⾸先要建⽴连接,传⼊ip(默认端⼝22),登录⽤户名和密码-->private static Connection getConnection(String hostname, String username, String password) throws Exception {Connection conn = null;try {conn = new Connection(hostname);conn.connect();boolean isAuthenticated = conn.authenticateWithPassword(username, password);if (isAuthenticated == false) {throw new IOException("Authentication failed.");}} catch (Exception e) {throw new IOException("username or password error.");}return conn;}<!--执⾏⼀条命令,传⼊connect相关参数,命令和超时时间-->public static String execRemoteCommand(String hostname, String username, String password, String command, long timeout)throws Exception {Connection conn = getConnection(hostname, username, password);StringBuilder sb = new StringBuilder();Session session = null;try {session = conn.openSession();session.requestPTY("vt100", 80, 24, 640, 480, null);session.execCommand(command);InputStream stdout = new StreamGobbler(session.getStdout());BufferedReader br = new BufferedReader(new InputStreamReader(stdout));long start = System.currentTimeMillis();char[] arr = new char[512];int read;int i = 0;while (true) {read = br.read(arr, 0, arr.length);if (read < 0 || (System.currentTimeMillis() - start) > timeout * 1000) {break;}sb.append(new String(arr, 0, read));i++;}} finally {if (session != null) {session.close();}if (conn != null) {conn.close();}}return sb.toString();}<!--执⾏多条命令,传⼊connect相关参数,命令和超时时间-->public static String execRemoteCommand(String hostname, String username, String password, String[] command, long timeout)throws Exception {Connection conn = getConnection(hostname, username, password);StringBuilder sb = new StringBuilder();Session session = null;try {for (int t = 0; t < command.length; t++) {session = conn.openSession();session.requestPTY("vt100", 80, 24, 640, 480, null);session.execCommand(command[t]);InputStream stdout = new StreamGobbler(session.getStdout());BufferedReader br = new BufferedReader(new InputStreamReader(stdout));long start = System.currentTimeMillis();char[] arr = new char[512];int read;int i = 0;while (true) {read = br.read(arr, 0, arr.length);if (read < 0 || (System.currentTimeMillis() - start) > timeout * 1000) {break;}sb.append(new String(arr, 0, read));i++;}session.close();}} finally {if (conn != null) {conn.close();}}return sb.toString();}最近⽤这个⼯具包做了个远程下载的功能OutputStream out = response.getOutputStream();Connection conn = getConnection(sshcfg.getHost(), sshcfg.getUsername(), sshcfg.getPassword());SCPInputStream ins=null;try { SCPClient scpClient = conn.createSCPClient(); ins = scpClient.get(fpath); //InputStream stdout = new StreamGobbler(ins); byte[] arr = new byte[512]; int read; while (true) { read = ins.read(arr); if (read < 0) break; out.write(arr);}//ins.close();} finally { if(ins!=null)ins.close(); if (conn != null) { conn.close(); }}注意:new InputStreamReader(stdout)这个的使⽤的是默认的字符编码,如果执⾏”cat **.log“⽽⽂件中有中⽂,应当指定编码,⽐如:new InputStreamReader(stdout,"GBK"),否则有可能出现乱码。
搭建SSH 2 框架参考文档

微软中国如何搭建SSH框架搭建SSH框架的步骤张双健2012/8/12本文档主要讲解了使用MyEclipse快速搭建Spring、Struts 2、Hibernate框架的集成。
1.首先我们创建一个web项目。
2.填写项目名称,任意名称-根据自己需要。
3.接下来我们首先添加Spring的功能。
选中我们创建的项目->点击右键->MyEclipse->添加Spring功能。
4.选择你所想要使用的Spring版本,这里我选择的是Spring 2.5版本的。
勾选Spring框架所需包。
总共需要5个包:Spring 2.5 AOP Libraries,Spring 2.5 Core Libraries,Spring 2.5 Persistence Core Libraries,Spring2.5 Persistence JDBC Libraries,Spring 2.5 Web Libraries. 然后点击下一步。
5.这里的启用AOP构建器为可选可不选选项。
建议小心项目勾选,大型项目不要勾选。
之后点击完成。
这样就完成了Spring框架功能的添加。
6.接下来添加Hibernate功能。
首先我们要先切换到数据库资源管理器布局下。
见下图.7.打开如下图界面后,在左边的DB Browser里面右击选择New(新建)。
8.假设这里你使用的是Oracle数据库。
根据下图所写的步骤进行操作。
完成后点击下一步。
9.选择”显示选中模式”,就是第三个单选按钮。
(如果你要使所有数据库用户都可以使用就按默认选项。
)然后点击Add添加数据库用户,在弹出的框里选择你所要使用的数据库用户。
点击Ok.然后再点击完成。
10.回到Web开发视图。
添加Hibernate功能。
和添加Spring功能一样,首先选中项目->点击右键->添加Hibernate功能.11.选择你要使用的Hibernate版本,这里我选择的是Hibernate 3.2版本。
ssh2步骤

MyEclipse7.5快速半手工开发SSH2(Struts2+Spring+Hibernate)应用之“超光速”教程下面是一篇ssh2快速入门教程。
需要有java+数据库的基础。
附件中是该文的word文档,可以下载阅读。
MyEclipse7.5快速半手工开发SSH2(Struts2+Spring+Hibernate)应用之“超光速”教程1. 新建一个Web Project,命名为:struts2_template2. 导入样例程序struts2-blank-2.1.8.war中lib下的包(暂时只需要这几个,网上提醒不能随便加包!):commons-fileupload-1.2.1.jarcommons-io-1.3.2.jarfreemarker-2.3.15.jarognl-2.7.3.jarstruts2-core-2.1.8.jar提醒:如果你做了许多工程,后来删除了。
其实都还在.metadata/.me-tcat/webapps下面!!!如果他们有错,就会影响到你后来的工程!3. 在web.xml中加入支持struts2的filter,并将mapping设为/*F ilter的名字叫“struts准备与执行”,就是strutsPrepareAndExecute,敲入前面几个字母系统就会找到了。
-------------------- 到此为止,我们的工程已经可以支持struts2了。
下面是实验--------------4. 在src目录中拷贝一个struts.xml作为书写配置的起点(注意!和以前版本不同,是src目录!)一个最简单的配置文件包括下面内容:<action name="HelloWorld" class="example.HelloWorld">表示,当从URL请求名为HelloWorld的action时候,实际执行的是example.HelloWorld 类。
libssh2--ssh2实例

libssh2--ssh2实例#include "libssh2_config.h"#include<libssh2.h>#include<libssh2_sftp.h>上述为所包含必备头⽂件。
以下为定义的静态⼦串常量const char *keyfile1 = "~/.ssh/id_rsa.pub";const char *keyfile2 = "~/.ssh/id_rsa";const char *username = "username";const char *password = "password";unsigned long hostaddr;int rc, sock, i, auth_pw = 0;struct sockaddr_in_sin;const char *fingerprint;char * userauthlist;LIBSSH2_SESSION *session;LIBSSH2_CHANNEL *channel;连接到SSH2步骤:(1)建⽴socket并连接到远程主机SSH2服务(22端⼝);(2)创建⼀个LIBSSH2_SESSION 实例并启动它。
启动动作包括设置欢迎横幅、交换密钥并且设置加密、压缩和MAC层。
session = libssh2_session_init(); //创建⼀个会话实例if(libssh2_session_handshake(session, sock)){fprintf(stderr, "Failure establishing SSH session");return -1;}(3)认证:检查主机密钥指纹并检查可⽤的认证⽅式。
fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);userauthlist = libssh2_userauth_list(session, username, strlen(username));if(strstr(userauthlist, "password") != NULL){auth_pw |= 1;}if(strstr(userauthlist, "keyboad-interactive") != NULL){auth_pw |= 2;}if(strstr(userauthlist, "publickey") != NULL){auth_pw |= 4;}(4)如果在参数列表中设置了认证⽅式,则将认证⽅式设为命令中的⽅式(前提是该⽅式是通过上个步骤检测可⽤的)。
项目任务单-2.2配置网络和使用SSH 2

专业领域:计算机网络技术学领域:Linux网络操作系统(统信UOS V20)
学习情境二系统管理与配置
项目六
配置网络和使用SSH
课时
2
企业
环境
及需求
用户在多个配置文件中快速切换。在公司上面中使用笔记本计算机时,需要手动指定网络的IP地址,而回到家中则使用DHCP自动分配IP地址。
任务
描述
使用网络会话功能
项目
实践
条件
软硬件条件:
需要2台安装Linux系统的虚拟机:Server01和Client1
提交成果
1.课堂实践项目设计方案
2.课堂实践随堂配置文件
课后作业
在统信UOS V20系统中有多种方法可以配置网络参数,请列举几种
备注
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(一)在JavaEE企业级开发中,以SSH2框架为核心的应用非常广,大象根据项目实践经验,通过一个实例,详细的为大家讲解如何实现全注解式的开发。
开发环境JDK1.6.0_18Eclipse3.2.1MyEclipse5.1.0Tomcat6.0.10MySQL5.0.27Navicat Lite for MySQL 8.1.20每个人的开发环境可能会有差异,但有一点我需要说明的是,JDK的版本不得低于1.5,因为用到了很多1.5版才支持的新特性。
Tomcat和MySQL请不要低于我所用的版本,因为我没在其它的版本上进行测试。
Navicat则是MySQL数据库的图形化操作工具。
我在这里假定各位目前已经设置好了开发环境,下面就开始详细的说明。
由于要阐述的内容比较多,大象决定将它们划分成个几章节来讲,这一章就主要来说说jar包的选择。
第一部分:选择必须的jar包新建一个web项目,然后将必要的jar包COPY到lib里面。
根据本文实例demo,大象给出下图中的最少jar包配置。
我对这些jar包进行一下说明,方便大家理解。
解压Struts2.1.6的lib文件夹,从中选出上面7个jar包添加到我们的工程库中。
commons-logging、freemarker、ognl、struts2-core、xwork这5个还是struts2的核心包。
但在Struts2.1.6这个版本中,还需要加上commons-fileupload包。
如果没有,则启动就会报错,不过不需要像网上传言的那样还得加上commons-io的jar包,这些大象都亲自做过测试。
在本实例中,我将对struts2也采取注解的方式,所以用到了struts2-convention-plugin-2.1.6.jar这个插件。
因为要与spring整合,所以struts2-spring-plugin-2.1.6.jar也必不可少。
大象在这里偷个懒,直接将spring的完整jar包加了进来,如果各位想精简类库的话,就选取它的分类jar包吧。
比如本例使用struts2作为MVC框架,所以spring的webmvc就不可能用到了。
有想改的朋友请自己动手改下。
另外有点我想说下,如果采取完整spring的jar包,还需要Spring2.5.6\lib\concurrent文件夹中的backport-util-concurrent.jar,如果不加这个,spring会报错。
但是采取spring分类jar包的形式,这个可以不用加,至于具体使用什么需要依赖这个包,大象还没去测试过,这个有待验证。
还有lib\slf4j下的日志包,目前很多都开始采用基于slf4j 接口的日志器,它的好处就是日志器是根据slf4j的接口来进行实现,可以在不改变代码的情况下更换日志器。
最后Spring的源代码中使用的是commons-logging记录日志,因此这个包不能少,不过因为struts2也用到了,所以这里就省了。
Hibernate从3.3版开始,对jar包结构做了一次大的调整,我们只需要加入lib\required文件夹下面的6个jar包。
请注意这6个jar包都是使用Hibernate所必须的。
另外再加上hibernate 核心包。
这里我将slf4j-api-1.5.2.jar换成了1.5.0,这是因为slf4j是一个通用日志接口,不提供任何实现,我在demo里面使用的是log4j,而hibernate包里面没有log4j的slf4j实现。
而且如果版本不一致,会有异常,因此我就采用Spring2.5.6\lib\slf4j里面提供的配套版本。
另外我将commons-collections-3.1.jar换成了Struts2.1.6里面的3.2版。
例子中使用Hibernate JPA来完成实体对象映射,所以上面这些包都必不可少。
使用注解的方式,可以不用写繁琐的配置文件,降低了出错机率。
而且现在很多人都喜欢这种方式。
大家可以去sourceforge 下载。
下载地址:/projects/hibernate/files/本例使用DBCP连接池来管理数据源。
MySQL数据库的连接驱动。
这个包的作用是创建动态代理对象。
比如在使用AOP方式管理spring事务时,如果我们的目标对象没有实现接口,而又要使用AOP来处理事务,这时就需要用到这个jar包。
可以在Spring2.5.6\lib\cglib里面找到。
JSTL标签库,很经典的东东,如果需要可以将它们加入lib中。
大象在这里建议大家做开发的时候,不要过多的依赖MyEclipse提供的那些功能,多用手动的方式来做。
那样方便是方便了,但不利于学习。
比如加入上面这些开发所用的类库,这样可以更清楚的了解每个jar包的作用,增加知识的积累,方便以后调试。
Ok,关于这部分的内容到这里就说完了,那么,我们下次继续。
本文为菠萝大象原创,如要转载请注明出处。
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(二)在上一章中详细分析了JAR包的选择,那么这次我将对例子中的一些必须的配置文件进行下说明。
虽然这些配置在网上也很容易找到,但是很多都没有讲个因为所以出来,这样根本就得不到提高。
在此,大象为各位详细分析一下这些内容。
实例中涉及的配置文件有这么几个applicationContext.xmljdbc.propertieslog4j.propertiesstruts.xmlweb.xml我准备在本章中只讲applicationContext.xml、jdbc.properties和web.xml。
log4j的配置大同小异而且也不在本文范围。
至于struts.xml我准备留到后面与Action代码一起来讲,因为用的是struts2-convention-plugin插件来实现struts2的注解,所以这两个结合起来讲要好一些。
第二部分:分析配置文件1、jdbc.properties本例采用MySQL数据库,所以我设置了一个属性文件,用来存放一些连接信息和Hibernate相关的设置。
因为我们使用的是Hibernate来与数据库进行交互,把这些东西写在单独的文件里,是方便修改,如果你想换成SQL Server或是Oracle,只需要更改driver、url以及dialect,而且还可以自由控制sql语句的显示的开关,非常方便。
至于写在这里怎么用呢?请接着看下面的applicationContext.xml说明。
2、applicationContext.xml这个文件就是spring的主配置文件了,当然,本例也只有这么一个spring的配置文件,内容不多,但做的工作还是很多的,下面我给大家详细分析一下。
我把这两部分放在一起是因为这两者是相互联系的,而且也比较好说明。
可以这样来理解,PropertyPlaceholderConfigurer这个类就是读取jdbc. properties文件,并将它们设置到这个类的属性中。
然后再将下面数据源配置中定义的这些${jdbc.driver}、${jdbc.url}字符串换成属性文件中相同名称的值。
${}这种写法,是类里面方法解析用的,网上都说这是叫占位符,我看了源代码的,其实是把它们当成字符串截取前后的特殊字符,再根据里面定义的名称找属性文件中对应的值。
所以这个类只能读取properties格式的文件,你如果还有其它需要加入的属性文件,可以在list之间加入,写在value标签里面。
根据base-package指定的路径,扫描其下所有包含注解的Bean,并自动注入。
比如@Repository,@Service这些都是注解,前者表示持久层,后者表示业务层。
这可是非常非常好的一个功能,是从Spring2.5开始加入的一个非常棒的特性。
有了它,我们将不用再去写那繁琐的<bean id="" class="" />。
本文的主旨就是全注解,就是为了告诉大家不用写配置文件(当然不是绝对不写)来怎样进行开发工作。
关于这部分的具体情况,在后面代码章节中会详细讲解。
这就是在Spring中定义Hibernate相关的配置,Spring已经集成了这部分功能。
通过class 里面定义的类名称我们很容易就能理解,这是使用注解的方式映射实体以及创建HiberanteSessionFactory。
${hibernate.dialect}、${hibernate.show_sql}和上面的数据源配置获取方式一样,当applicationContext.xml定义好之后,就不用再对它进行修改,而是将修改对象变成了jdbc.properties文件。
另外在Spring2.5.6版中,加入了一个很有用的小功能,就是packagesToScan属性,它是根据value中定义的路径来扫描其下所有的注解实体类。
大象对这个路径做了多种测试,另外又看了源代码,发现它只能匹配某一类型的路径,而不是所有路径。
比如上面的value值表示,扫描entity包下面的所有包中的注解类,如果你将类直接放在entity包下,那么服务器启动和程序运行时都不会报错,但是当你的代码需要用到这个类的时候,就会出现异常,提示你找不到实体。
这是事务定义,而且是使用注解方式定义事务(@Transactional),proxy-target-class="true"表示采用动态代理类来管理事务,如果是false表示采用接口代理来管理事务(默认值为false)。
什么意思呢?就是说对于需要加入事务处理的类,如果是实现接口,那么将采用Spring的默认事务管理(Spring默认方式为接口),如果不采用接口,而直接使用类,那么就需要cglib类库的支持,它通过动态的创建目标类(就是你需要加入事务的类)的子类,然后对这子类中的方法(当然是从目标类中继承来的)进行事务管理。
这其实就是AOP切面,而且从中可以看出来,需要加入事务的方法不能为private、static、final 的方法。
这样说也不是很严格,说它不能加入事务,是说它不能主动的启动一个事务,如果某个private方法是被某个public方法调用的,而public方法是可以被动态代理加入事务的,所以这个private方法也一样被加入了事务,只是它处在public方法的事务之中。
但是static和final这两类方法因为不能被子类覆盖,所以无法加入事务。
如果这两类型的方法不被其它的事务方法所调用,那么它们就会以无事务的方式运行,因此很容易造成隐患,这一点请大家特别注意。