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系统中有多种方法可以配置网络参数,请列举几种
备注
ssh2框架 的一个用例实现
用例11.2乘务员执行发动机异常时调度员的安排功能描述 ................................................................................................................................... 1 实现步骤 .. (2)1.连接数据库 .................................................................................................................... 2 注意事项: ............................................................................................................................... 4 程序设计 .. (6)1.准备工作 ........................................................................................................................ 6 2.编写Dao 层代码 ........................................................................................................... 7 3. 编写Service 层代码 .................................................................................................. 8 4. 编写Action层代码 ........................................................................................ 9 5. 编写xml配置文件 .............................................................................................. 10 6. 编写jsp代码 ...................................................................................................... 11 附件:. (12)1.main.jsp 文件 ............................................................................................................... 12 1.2实现效果 . (13)为了帮助大家更好的完成用例的程序设计,我写了如下文档,该文档描述了一个简单的用例是如何用jsp 实现的。
SSH2工作流程图
监测到需要Session ,
根据配置文件实例化
Session 监测到需要DAO ,根据
配置文件实例化DAO 监测到需要chanPinAction ,根据
配置文件实例化chanPinAction 服
务
启动
后
一直
在监
听 加载完毕,网站启动
服务启动,加载相关配置文件,如web.xml ,并实例化Spring 相关类及配置文件
返回Session 实例 返回产品信息数据 返回数据,匹配相应
的result ,执行相应需要获取Session
需要调用DAO ,获取产
品信息表的数据 用户请求获取产品信
网站服务启动成功(等待用户请
匹配到struts2过滤器,需要调用chanPinZiLiaoAction 中的 getChanPinXinXi 方法,获取产品信
DAO 与数据库通信,获取相应数据 Session 实例 返回产品信息
Spring。
SSH2教程
SSH2 环境配置教程及实际登陆例子所需工具:使用Struts2. 1+Hibernate3.3+Spring3.0版本,JDK是1.6, MyEclipse8.6, 数据库MySQL5.5(MyEclipse及MySQL的版本可根据自己的情况适当改变,不会有大的影响)。
步骤:第一部分:数据库的准备工作1、创建数据库CREATE SCHEMA `contact` DEFAULT CHARACTER SET utf8登录嘛!当然有个用户的数据表咯!创建表userCREATE TABLE `contact`.`user` (`id` INT NOT NULL AUTO_INCREMENT ,`username` VARCHAR(45) NOT NULL ,`password` VARCHAR(45) NOT NULL ,PRIMARY KEY (`id`) ,UNIQUE INDEX `id_UNIQUE` (`id` ASC) ,UNIQUE INDEX `username_UNIQUE` (`username` ASC) );创建的表格user有3个字段,id,username,password.2、数据库创建完毕,在MyEclipse右上角找到MyEclipse Hibernate perspective的试图界面吧!创建一个MySQL的连接,如图所示:Driver Jar 根据自己包存放的位置选择点击Finish 。
数据库的准备工作结束。
第二部分:SSH2搭建1、创建Web Project项目2、Struts2的搭建添加Struts的配置,点击你的项目,在上面的MyEclipse菜单中找到Capabilities的addStruts Capabilities。
然后点击Next吧!由于引包容易出现冲突等问题,在引包界面取消选择MyEclipse Libraries ,如图:(所有需要的包(包括hibernate 及 spring 所需的包)均打包在lib.rar,请解压后复制到lib文件下)Finish之后, src目录下就多了一个struts.xml的配置文件,这时你的web.xml里面也多了一段:<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>这时Struts已搭建好。
MyEclipse开发SSH2(Struts2+Spring+Hibernate)教程
MyEclipse 开发SSH2(Struts2+Spring+Hibernate)教程1. 开发环境本文开发环境为MyEclipse7.5 和Struts 2.2.1,Spring 和Hibernate 使用MyEclipse 内置的版本。
注意下载Struts 时,要下载完全版Full Distribution,该版中包括样例“空工程”struts2-blank-2.2.1.war(在apps 目录下),这个文件中有我们快速开发可以套用的各种文件。
附注:war 文件是部署Web 应用系统时用的压缩文件格式,但是也可以使用RAR 等程序解压。
2. 建立Web 工程并导入Struts 支持包在“空工程”的WEB-INF\lib 目录下,是支持Struts 所需要的最简化的jar 包,它们是:commons-fileupload-1.2.1.jarcommons-io-1.3.2.jarfreemarker-2.3.16.jarjavassist-3.7.ga.jarognl-3.0.jarstruts2-core-2.2.1.jarxwork-core-2.2.1.jar将这些包解压到一个目录中(例如C:\struts),然后在MyEclipse 中新建一个“Web Project”,命名为“WarpSpeed”并勾选Java EE 5.0(您需要在系统中已经安装JDK5.0 以上的版本);在工程名上面点鼠标右键,选择“Build Path - Configure Build Path”调出配置对话框(如图1),在该对话框中选择“Libraries”选项卡,使用“Add External JARs”按钮,将上面的7 个jar 文件添加到工程目录中。
这样WarpSpeed 工程就已经支持Struts2 了。
图1 工程Build Path 配置窗口3. 设置全局配置xml 文件以支持Struts 过滤器在系统中加入Struts 支持,实际上就是要在系统中增加一个Struts“过滤器(filter)”;所有的文件,在以页面形式展示到用户的浏览器之前,先要通过该过滤器“过滤”(即处理)一遍,这样给了Struts 控制模块一个处理页面中特有的Struts 标签的机会;也就是说,后台程序可以将这些Struts 标签“翻译”成为相关的数据并处理后,才将生成的页面提交给终端用户。
SSH2配置完整案例
SSH2配置完整案例一新建WEB项目SSH2二在dbbrowser中新建数据连接sql五添加hibernate容器这里应当是webroot/web-inf/applicationContext.xml完成后结构图如下:六配置各文件1 配置struts.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.1//EN""/dtds/struts-2 .1.dtd"><struts><!-- 开发模式 --><constant name="struts.devMode"value="true"/><!-- 告诉struts2,action的创建交给spring --> <constant name="struts.ObjectFactory"value="s pring"></constant><package name="struts2"extends="struts-defaul t"><action name="list"class="com.my.action.ListA dmin"><result name="success">listAdmin.jsp</result> </action></package></struts>2 配置web.xml<listener><listener-class>org.springframework.web.cont ext.ContextLoaderListener</listener-class> </listener><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.Stru tsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>7 代码1 逆向工程admin表生成后的结构2 ListAdmin.java action类package com.my.action;import java.util.List;import com.my.orm.Admin;import com.my.orm.AdminDAO;import com.opensymphony.xwork2.ActionSupport;ActionSupport{ AdminDAO adminDAO;List<Admin>list;@Overridepublic String execute() throws Exception { list=adminDAO.findAll();return"success";}public AdminDAO getAdminDAO() {return adminDAO;}publicvoid setAdminDAO(AdminDAO adminDAO) { this.adminDAO = adminDAO;}public List<Admin> getList() {return list;}publicvoid setList(List<Admin> list) { this.list = list;}}3 listAdmin.jsp<%@page language="java"import="java.util.*"pageE ncoding="utf-8"%><%@taglib prefix="s"uri="/struts-tags"%><%@taglib prefix="c"uri="/jsp /jstl/core"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html><body><table border="1"><tr><td>APass</td><td>AHeader</td><td>APhone</td><td>AEmail</td><c:forEach items="${list}"var="x"><tr><td>${x.AName }</td><td>${x.AHeader }</td><td>${x.APhone }</td><td>${x.AEmail }</td></td></c:forEach></table></body></html>4 strut.xml配置<package name="struts2"extends="struts-default"><action name="list"class="com.my.action.ListA dmin"><result name="success">listAdmin.jsp</result> </action></package>5 applicationContext.xml中自动生成的id=”AdminDAO”修改成 id=”adminDao”(也就是AdminDao第一个字母小写,使之与ListAdmin.java中属性adminDAO相匹配)<bean id="adminDAO"class="com.my.orm.AdminDAO"> <property name="sessionFactory"><ref bean="sessionFactory"/></property></bean>最后部署并运行。
ssh2
The authenticity of host ‘’ can't be established. Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
计算机科学与技术学院 计算机科学与技术学院
计算机科学与技术学院 计算机科学与技术学院
信息安全技术
ssh-add
向认证代理添加 RSA 或 DSA 身份数据 代理最初不掌握任何私钥. 密钥通过 ssh-add 加入.向认证代理 (authentication agent) , ssh-agent , 添加 RSA 或 DSA 身份识别数据. 无参数运行该程序时, 它将 $HOME/.ssh/id_rsa $HOME/.ssh/id_dsa 和 $HOME/.ssh/identity 文件的内容送往认证代理. 可以在命令行上指定不同的文件名. 如果文件需 要用密语(passphrase)访问, 会提示用户输入, 然后从用户的 tty 终端读取密语. 如果给出多 个身份文件, 将重试最后一条密语.
Openssl的主要程序
计算机科学与技术学院 计算机科学与技术学院
信息安全技术
ssh
(SSH 客户端) 用于登录远程主机, 并且在远程 主机上执行命令. 它的目的是替换 rlogin 和 rsh, 同时在不安全 的网络之上, 两个互不信任的主机之间, 提供加密的, 安全的通信连接.
计算机科学与技术学院 计算机科学与技术学院
ssh实验截图
二.多态和反射部分1.多态A.静态多态packageduotai;class customer{private String account;private String password;// 三种静态多态爆楼参数个数不同; 参数个数相同类型不同; 个数和类型相同出现的顺序不同public customer(){System.out.println("构造函数1");}public customer(String account,String password){System.out.println("构造函数2");this.account=account;this.password=password;}}public class JTcustomer{public static void main(String[] args) {customer cus1=new customer();//调用构造函数1customer cus2=new customer("11111","nihao");//调用构造函数2}}B. 动态多态一般在继承时使用packageduotai;abstract class person{public abstract void printinfo();//定义一个抽象类函数}class student extends person{public void printinfo(){System.out.println("学生打印");}}class teacher extends person{public void printinfo(){System.out.println("老师打印");}}public class DTstudent {public static void print(person p){p.printinfo();}public static void main(String[] args) {print(new student());print(new teacher());}}2.反射这是一个customerpackagefanshe;public class customer{private String account;private String password;public customer(){System.out.println(getString("构造函数1"));}public customer(String account,String password){ System.out.println(getString("构造函数2")); this.account=account;this.password=password;}public void printinfo(){System.out.println(getString("账号")+account+Messages.getString("密码")+password); //$NON-NLS-1$ //$NON-NLS-2$}}进行测试Text1String classname=("fanshe.customer");// 得到类的消息Class c = Class.forName(classname);// 得到构造函数Constructor[] con =c.getConstructors();for(inti=0;i<=con.length;i++){System.out.println(("名字:")+con[i].getName());// 得到参数类型Class[]para=con[i].getParameterTypes();for(int j=0;j<=para.length;j++){System.out.println(para[j].getName());}}// 得到成员函数Method[] math=c.getMethods();for(inti=0;i<=math.length;i++){System.out.println("名字"+math[i].getName());Class[]para=math[i].getParameterTypes();for(int j=0;j<=para.length;j++){System.out.println("得到参数"+para[j].getName());}}}Text2packagefanshe;ng.reflect.Constructor;ng.reflect.Method;public class test2 {public static void main(String[] args) throws Exception {String classname=("fanshe.customer");Class c=Class.forName(classname);Constructor cons=c.getConstructor(new Class[]{Class.forName("java.long.String"),Class.forName("java.long.String")});//得到带参数的构造函数//生成对象Object obj=cons.newInstance(new Object[]{"2222","1111"});//表示传入"2222","1111"参数//调用Object的方法Method meth=c.getMethod("printinfo", new Class[]{});//得到方法meth.invoke(obj, new Object[]{});customercus=new customer("2222","1111");cus.printinfo();}}Text2相当与customercus=new customer(“2222”,”1111”);cus.printinfo();实体类News.javapackage org.crazyit.app.domain;publicclass News {private Integer id;private String title;private String content;public Integer getId() {return id;}publicvoid setId(Integer id) {this.id = id;}public String getTitle() {return title;}publicvoid setTitle(String title) {this.title = title;}public String getContent() {return content;}publicvoid setContent(String content) {this.content = content;}}配置文件News.hbm.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/dtd/hibernate-mapping-3.0.dtd"><!-- Generated 2010-11-9 18:15:04 by Hibernate Tools 3.3.0.GA --> <hibernate-mapping><class name="org.crazyit.app.domain.News"table="news_table"> <id name="id"type="ng.Integer"><column name="id"/><generator class="identity"/></id><property name="title"type="ng.String"><column name="title"/></property><property name="content"type="ng.String"><column name="content"/></property></class></hibernate-mapping>测试类package lee;importorg.crazyit.app.domain.News;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.Configuration;public class NewsManager {public static void main(String[] args)throws Exception {//实例化Configuration,Configuration conf = new Configuration()//下面方法默认加载hibernate.cfg.xml文件.configure();//以Configuration创建SessionFactorySessionFactorysf = conf.buildSessionFactory();//创建SessionSession sess = sf.openSession();//开始事务Transaction tx = sess.beginTransaction();//创建消息实例News n = new News();//设置消息标题和消息内容// n.setId(Integer.valueOf(1));n.setTitle("白美琪个人主页");n.setContent("白美琪个人主页,"+ "网站地址”//保存消息sess.save(n);//提交事务mit();//关闭Sessionsess.close();sf.close();}}SpringTest.javapackagecom.aya;importorg.crazyit.app.service.PersonService;importorg.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTest{public static void main(String[] args){//创建Spring的ApplicationContextApplicationContextctx = new ClassPathXmlApplicationContext("bean.xml");//输出Spring容器System.out.println(ctx);PersonService p = (PersonService) ctx.getBean("personService" , PersonService.class);();}}PersonService.javapackage org.crazyit.app.service;publicclass PersonService{private String name;//name属性的setter方法publicvoid setName(String name){ = name;}//测试Person类的info方法publicvoid info(){System.out.println("此人名为:" + name);}}bean.xml<?xml version="1.0"encoding="UTF-8"?><beans xmlns:xsi="/2001/XMLSchema-instance"xmlns="/schema/beans"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd"><!--将PersonService类部署成Spring容器中的Bean --><bean id="personService"class="org.crazyit.app.service.PersonService"> <property name="name"value="wawa"/></bean></beans>。
- 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这两类方法因为不能被子类覆盖,所以无法加入事务。
如果这两类型的方法不被其它的事务方法所调用,那么它们就会以无事务的方式运行,因此很容易造成隐患,这一点请大家特别注意。