ssh2分页

合集下载

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协议

ssh2协议SSH2协议。

SSH2(Secure Shell 2)是一种用于计算机网络的加密协议,用于在不安全的网络中安全地传输数据。

它是SSH协议的升级版本,提供了更强大的加密和认证机制,被广泛应用于远程登录、文件传输和管理网络设备等领域。

本文将介绍SSH2协议的基本原理、特点和应用。

SSH2协议的基本原理是通过加密通道来传输数据,防止数据在传输过程中被窃听、篡改或伪造。

它采用了公钥加密、对称加密和消息认证码等多种加密技术,保障了数据的机密性、完整性和可靠性。

同时,SSH2还提供了强大的身份认证机制,包括密码认证、公钥认证和基于密钥的认证等,确保了通信双方的身份合法性和安全性。

SSH2协议的特点之一是端到端的加密传输,即通信双方之间建立了加密通道,所有的数据传输都经过加密处理,即使在不安全的网络环境中也能够保证数据的安全性。

此外,SSH2还支持多种加密算法和密钥长度,可以根据实际需求选择合适的加密方式,提高了系统的灵活性和安全性。

在实际应用中,SSH2协议被广泛用于远程登录和管理服务器、网络设备,以及安全文件传输等场景。

通过SSH2协议,管理员可以远程登录服务器进行操作,而且所有的数据传输都经过加密处理,有效避免了密码和敏感信息被窃取的风险。

此外,SSH2还支持端口转发和X11转发等功能,可以实现安全的远程访问和数据传输。

总的来说,SSH2协议是一种安全可靠的加密协议,它通过端到端的加密传输和强大的身份认证机制,保障了数据在传输过程中的安全性和可靠性。

在当前的网络环境中,保护数据的安全已经成为了至关重要的问题,而SSH2协议正是解决这一问题的有效工具。

因此,我们应该充分利用SSH2协议的优势,加强网络安全防护,保护重要数据的安全。

ssh2实例(带截图)

ssh2实例(带截图)

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也必不可少。

SSH2详细(框架搭建)

SSH2详细(框架搭建)

struts2相关配置
struts.xml常用配置
为简化配置文件编写,struts2提供通配符支持,如下: <action name=“*” class=“com.demo.{1}Action”
method=“show”> </action>
同时,struts2还支持*/*的配置模式,在配置文件中 <struts>节点下配置如下:
第十三页,编辑于星期三:六点 八分。
整合spring后struts配置
struts.xml配置 在<struts>标签下配置: <constant name="struts.objectFacring"></constant> <constant
name="struts.objectFactory.spring.autoWire" value="name"></constant>
name: 可选 , 表示表的名称 . 默认地 , 表名和实体名称 一致 , 只有在不一致的情况下才需要指定表名
catalog: 可选 , 表示 Catalog 名称 , 默认为 Catalog(""). schema: 可选 , 表示 Schema 名称 , 默认为 Schema(“”). @id 必须 @id 定义了映射到数据库表的主键的属性 , 一个实体只能有
<param-value> classpath*:applicationContext*.xml
</param-value>
</context-param>
<listener>

ssh分页代码

ssh分页代码

通过ssh进行的分页,.xml文件没有写出。

目录Jsp页面代码: (1)Jsp中的js文件(一定要写在当前jsp页面中,不然就会取不到值) (2)Model代码 (3)Action层代码 (6)Dao层 (7)OGNL知识 (7)Jsp页面代码://#request.pagemodel相当于request.getAttribute(“pagemodel”);<s:iterator value="#request.pagemodel"><s:property value="userName"/><s:property value="email"/>//得到url的值<s:url id="testUrlId"value="delUserInfo.action"> <s:param name="id"value="%{id}"/></s:url>//%是表示里面是一个表达式或其它标签的id,用%取出里面的值<s:a href="%{testUrlId}"><input type="button"value="删除"/></s:a></s:iterator>//以上代码是遍历集合中的所有元素------------------------------------------------|共${pageModel.totalRecords}条记录|每面${pageModel.pageSize}条记录|当前第${pageModel.pageNo }页|<s:if test="pageModel.pageNo==1">您目前已到达首页</s:if><s:if test="%{pageModel.pageNo==pageModel.totalPages}">您目前已到达尾页</s:if>//以下是用按钮表达,通过onclick事件,调用js文件<input name="btnTopPage"type="button" id="btnTopPage"value="|<<首页"title="首页"onClick="topPage()"><input name="btnPreviousPage"type="button"id="btnPreviousPage" value="<上一页 "onClick="previousPage()"><input name="btnNextPage""type="button"id="btnNextPage"value=" 下一页 > "onClick="nextPage()"><input name="btnBottomPage" type="button"id="btnBottomPage" value="尾页 >>|"title="尾页"onClick="bottomPage()">Jsp中的js文件(一定要写在当前jsp页面中,不然就会取不到值)<script type="text/javascript">// findAllInfo.action?pageNo=${pageModel.topPageNo}为通过get方式提交到服务器的urlfunction topPage() {window.location = "<%=basePath%>findAllInfo.action?pageNo=${pageModel.topPageNo}";}function previousPage() {window.location = "<%=basePath%>findAllInfo.action?pageNo=${pageModel.previousPageNo}";}function nextPage() {window.location = "<%=basePath%>findAllInfo.action?pageNo=${pageModel.nextPageNo}";}function bottomPage() {window.location = "<%=basePath%>findAllInfo.action?pageNo=${pageModel.buttomPageNo}";}</script>Model代码public class PageModel<T> {//结果集private List<T> list;//记录数private int totalRecords;//每页多少条数据private int pageSize;//第几页private int pageNo;/*** 返回总页数* @return*/public int getTotalPages() {return (totalRecords + pageSize - 1) / pageSize;}/*** 首页* @return*/public int getTopPageNo() {return 1;}/*** 上一页* @return*/public int getPreviousPageNo() {if (this.pageNo <= 1) {return 1;}return this.pageNo - 1;}/*** 下一页* @return*/public int getNextPageNo() {if (this.pageNo >= getButtomPageNo()) { return getButtomPageNo();}return this.pageNo + 1;}/*** 尾页* @return*/public int getButtomPageNo() {return getTotalPages();}public List<T> getList() {return list;}public void setList(List<T> list) {this.list = list;}public int getTotalRecords() {return totalRecords;}public void setTotalRecords(int totalRecords) { this.totalRecords = totalRecords;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) { this.pageSize = pageSize;}public int getPageNo() {return pageNo;}public void setPageNo(int pageNo) { this.pageNo = pageNo;}}Action层代码//下面要生成get,set方法private PageModel<?> pageModel;//get,set方法略去public String findAllInfo(){//pageNo标记为当前从哪条记录开始int pageNo;String p = ServletActionContext.getRequest().getParameter("pageNo");if(p==null)pageNo=0;elsepageNo=Integer.parseInt(p);//下面方法传入当前记录,及每页将要显示的记录条数,此例为每页显示5条//返回一个PageModel<T>类型,包括一个集合及其它属性,具体在Model查看pageModel = userManagerService.padingService(pageNo,5); //setAttribute,在jsp页面用来取到集合的值ServletActionContext.getRequest().setAttribute("pagemodel",pag eModel.getList());return SUCCESS;}Service层//此处没有过多的运算处理,直接把参数传给dao层public PageModel<?> padingService(int pageNo, int pageSize){returnuserManagerDao.padingDao(pageNo,pageSize);}Dao层public PageModel<?> padingDao(int pageNo, int pageSize) {List<User> itemList = new ArrayList<User>();//count存所有记录的个数int count = 0;//通过pageNo和pageSize查询复合条件的记录itemList = this.getSession().createQuery("from User").setFirstResult(pageNo).setMaxResults(pageSize).list();//查询所有记录的个数count = ((Long)getSession().createQuery("select count(*) from User").uniqueResult()).intValue();//生成一个PageModel对象PageModel pageModel = new PageModel();//把数据存放到pageModel对象中pageModel.setList(itemList);pageModel.setPageNo(pageNo);pageModel.setPageSize(pageSize);pageModel.setTotalRecords(count);return pageModel;}OGNL知识1,#”主要有三种用途:访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:名称作用例子parameters 包含当前HTTP请求参数的Map #parametersid[0]作用相当于request.getParameter("id")request 包含当前HttpServletRequest的属性(attribute)的Map #erName相当于request.getAttribute("userName")session 包含当前HttpSession的属性(attribute)的Map #erName相当于session.getAttribute("userName")application 包含当前应用的ServletContext的属性(attribute)的Map#erName相当于application.getAttribute("userName")attr 用于按request > session > application顺序访问其属性(attribute)#erName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止2,“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。

ssh2步骤

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 类。

ssh2,协议详解

ssh2,协议详解

竭诚为您提供优质文档/双击可除ssh2,协议详解篇一:ssh协议详解1、概念ssh的英文全称为secureshell,是ietF (internetengineeringtaskForce)的networkworkinggroup所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。

2、基本框架ssh协议框架中最主要的部分是三个协议:传输层协议、用户认证协议和连接协议。

同时ssh协议框架中还为许多高层的网络安全应用协议提供扩展的支持。

它们之间的层次关系可以用如下图1来表示:图1ssh协议的层次结构示意图在ssh的协议框架中,传输层协议(thetransportlayerprotocol)提供服务器认证,数据机密性,信息完整性等的支持;用户认证协议(theuserauthenticationprotocol)则为服务器提供客户端的身份鉴别;连接协议(theconnectionprotocol)将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;各种高层应用协议可以相对地独立于ssh基本体系之外,并依靠这个基本框架,通过连接协议使用ssh的安全机制。

3、主机密钥机制对于ssh这样以提供安全通讯为目标的协议,其中必不可少的就是一套完备的密钥机制。

由于ssh协议是面向互联网网络中主机之间的互访与信息交换,所以主机密钥成为基本的密钥机制。

也就是说,ssh协议要求每一个使用本协议的主机都必须至少有一个自己的主机密钥对,服务方通过对客户方主机密钥的认证之后,才能允许其连接请求。

一个主机可以使用多个密钥,针对不同的密钥算法而拥有不同的密钥,但是至少有一种是必备的,即通过dss算法产生的密钥。

关于dss算法,请参考[Fips-186]。

ssh协议关于主机密钥认证的管理方案有两种,如下图2所示:图2ssh主机密钥管理认证方案示意图每一个主机都必须有自己的主机密钥,密钥可以有多对,每一对主机密钥对包括公开密钥和私有密钥。

ssh 2使用技巧

ssh 2使用技巧

ssh 2使用技巧SSH(Secure Shell)是一种加密的远程登录协议,可以通过SSH协议连接远程主机并进行安全的远程操作。

在使用SSH 协议进行远程登录时,有一些技巧可以提高我们的效率和安全性。

首先,我们可以使用SSH配置文件来简化连接过程。

SSH配置文件通常位于用户的家目录下的".ssh"文件夹中,文件名为"config"。

在该文件中,我们可以预先配置好多个主机的连接信息,包括主机名、用户名、端口号等。

这样,每次连接时只需要输入"ssh 主机别名"即可,大大简化了连接过程。

其次,使用SSH公钥认证可以提高安全性并免去输入密码的麻烦。

SSH公钥认证是通过生成一对密钥(公钥和私钥),将公钥放置在远程主机上,私钥保存在本地。

当进行SSH连接时,远程主机会通过匹配本地私钥和远程主机上的公钥来进行认证,从而实现无密码登录。

使用SSH公钥认证需要生成密钥对,并将公钥复制到远程主机的"~/.ssh/authorized_keys"文件中。

另外,通过SSH端口转发可以实现本地与远程主机之间的安全通信。

SSH端口转发可以将远程主机的端口映射到本地主机上,从而可以在本地主机上访问远程主机上的服务。

有两种类型的SSH端口转发:本地端口转发和远程端口转发。

本地端口转发将本地主机上的端口映射到远程主机上,而远程端口转发则相反。

可以使用以下命令进行SSH端口转发:- 本地端口转发:ssh -L local_port:remote_host:remote_portuser@server- 远程端口转发:ssh -R remote_port:local_host:local_portuser@server此外,还可以使用SSH会话保持功能来实现长时间的连接,并避免因长时间没有操作而导致连接中断。

通过修改SSH配置文件中的"ClientAliveInterval"和"ClientAliveCountMax"参数,我们可以设置心跳包的发送间隔和最大未响应次数,从而保持SSH连接的持久性。

Yii2分页的使用及其扩展方法详解

Yii2分页的使用及其扩展方法详解

Yii2分页的使⽤及其扩展⽅法详解前⾔:说明下我们本篇⽂章都要讲哪些内容分页的使⽤,⼀步⼀步的教你怎么做分页类LinkPager和Pagination都可以⾃定义哪些属性分页类LinkPager如何扩展成我们所需要的第⼀步,我们来看看yii2⾃带的分页类该如何去使⽤?1、controller actionuse yii\data\Pagination;$query = Article::find()->where(['status' => 1]);$countQuery = clone $query;$pages = new Pagination(['totalCount' => $countQuery->count()]);$models = $query->offset($pages->offset)->limit($pages->limit)->all();return $this->render('index', ['models' => $models,'pages' => $pages,]);2、Viewuse yii\widgets\LinkPager;//循环展⽰数据foreach ($models as $model) {// ......}//显⽰分页页码echo LinkPager::widget(['pagination' => $pages,])代码基本上可以完全拷贝,修改部分数据即可,相信⼤多数⼈都是看得懂的。

我们接下来看第⼆步,⾃带的分页类都可以定义哪些属性⾸先我们说说LinkPager组件.pagination参数必填,这个是我们Pagination类的实例默认分页类是下⾯这个样⼦的.上下页按钮以及10个按钮⾸先,我们把上下页的按钮修改成中⽂<?= LinkPager::widget(['pagination' => $pages,'nextPageLabel' => '下⼀页','prevPageLabel' => '上⼀页',]); ?>如果你不想要显⽰上下页,可以将prevPageLabel和nextPageLabel设置为false<?= LinkPager::widget(['pagination' => $pages,'nextPageLabel' => false,'prevPageLabel' => false,]); ?>默认不显⽰⾸页也尾页,如果你需要,可以这样设置<?= LinkPager::widget(['pagination' => $pages,'firstPageLabel' => '⾸页','lastPageLabel' => '尾页',]); ?>如果你的数据过少,不够2页,默认不显⽰分页,如果你需要,设置hideOnSinglePage=false即可<?= LinkPager::widget(['pagination' => $pages,'hideOnSinglePage' => false,]); ?>默认显⽰的页码为10页,可以设置maxButtonCount为你想要展⽰的页数<?= LinkPager::widget(['pagination' => $pages,'maxButtonCount' => 5,]); ?>有些⼈不喜欢默认的样式,想要分页带上⾃⼰的样式,可以设置options,不要忘了⾃⾏实现pre,next,disabled等样式<?= LinkPager::widget(['pagination' => $pages,'options' => ['class' => 'm-pagination'],]); ?>接下来我们谈谈Pagination组件默认的分页路由是下⾯这样⼦的,我们看看能做点什么/controller/action?page=2&per-page=20⾸先,我们是必须要指定总条数totalCount的,没这个参数,分页也是没办法实现的$pages = new Pagination(['totalCount' => $totalCount,]);默认分页的数量是20,你可以设置pageSize为你想要的$pages = new Pagination(['totalCount' => $totalCount,'pageSize' => 5,]);从上⾯的分页路由我们可以看到,默认带的有每页的数量per-page 如果你不想显⽰该参数,设置pageSizeParam=false就好$pages = new Pagination(['totalCount' => $totalCount,'pageSizeParam' => false,]);我们也可以看到,默认的页⾯取决于参数page,如果你想改变该参数为p,设置pageParam=p就好$pages = new Pagination(['totalCount' => $totalCount,'pageParam' => 'p',]);如果你的分页存在于⾸页,相信你肯定想要/?p=1⽽不是/site/index?p=1,我们看看怎么隐藏掉路由$pages = new Pagination(['totalCount' => $totalCount,'route' => false,]);可能你会发现分页类Pagination有⼀个bug,假如我们只有1页的数据,但是⼿动更改地址栏的page=20的时候,也会显⽰page=1的数据?当然,这在⼤部分接⼝API中就很让⼈厌烦。

基于SSH2开发的分页显示实现研究

基于SSH2开发的分页显示实现研究

使 每一页只显 示固定 的记录数 , 俗 称分页显示 。本文介绍使 用 “ S t r u f s 2 + S pr i n g+ H i b er n a t e( S S H2 )” 框 架技 术
分页显示We b数 据 库 的 具 体 方法 与 步 骤 , 讨 论 T J E I E J S S H 2 实现数 据分 页显示编 程处 理思 路与技 巧 , 介绍S S H 2 的 工
( S t 川t s 2 + S p r i n g + Hi b e r n a t e ) 应用到 的分页显示 的 宴现 方法, 和大家分享与爻流。 图1 w e b 系统的人员管理页面 理噼 , 笔者做了一张关联图 , 女 ¨ 2 所示。 如 果 想 要 把 页 而 显 示 做 成 这 样 的交 殳 , 在 这
张 图中, p a g e S i z e = 4 , p a g e C o u n t = 3 , f U r P a g e 1 .
1 7 0\ VC Ot l l l t =1 2


分页 显 示 设 计 以及 原 理
l 鳘 1 l 在一 个We b 系统 的人员管理 页而截 : 把页而显示方式设 汁成这佯的方代 , 通常需要
R e s e a r c h l  ̄

基于S S H2 开发的分页显示实现研究米
■ 中国人 民银 行 景 德 镇 市 中 心支 行 江佳 原

要: 在We b 程 序 中, 数 据查 询及 显示是 一项 必不 可少 的工作 , 需要利 用分页技 术对 数 据进行 分页处理 ,
到这 几个基 本变量 : p a g e S i z e ( 每 个贞面所显示 的记 录教 ) 、 p a g e C o u n t ( 一共仃多少 个页面 ) 、 c u r P a g e ( 目

什么是SSH2框架

什么是SSH2框架

Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。
பைடு நூலகம்
一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。框架通常能很好的解决一个问题。然而,你的应用是分层的,可能每一个层都需要各自的框架。仅仅解决UI问题并不意味着你能够很好的将业务逻辑和持久性逻辑和UI 组件很好的耦合。
缺点:
Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。
Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。
Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果你的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。
除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
— 需求的变更:以笔者多年的开发经验来看,很少有软件产品的需求从一开始就完全是固定的。客户对软件需求,是随着软件开发过程的深入,不断明晰起来的。因此,常常遇到软件开发到一定程度时,由于客户对软件需求发生了变化,使得软件的实现不得不随之改变。当软件实现需要改变时,是否可以尽可能多地保留软件的部分,尽可能少地改变软件的实现,从而满足客户需求的变更?答案是——采用优秀的解耦架构。这种架构就是J2EE的分层架构,在优秀的分层架构里,控制层依赖于业务逻辑层,但绝不与任何具体的业务逻辑组件耦合,只与接口耦合;同样,业务逻辑层依赖于DAO层,也不会与任何具体的DAO组件耦合,而是面向接口编程。采用这种方式的软件实现,即使软件的部分发生改变,其他部分也尽可能不要改变。

ssh2协议

ssh2协议

ssh2协议SSH(Secure Shell)是一种用于计算机之间安全通信的网络协议。

它使用加密技术确保数据的安全传输,常用于远程登录和执行命令。

SSH 2.0(Secure Shell version 2.0),简称SSH2,是SSH协议的第二个版本。

SSH2协议于1996年发布,与其前身SSH1相比,在安全性、性能和功能方面有了显著的提升。

以下是SSH2协议的一些重要特点:1. 加密技术:SSH2使用公私钥加密技术来保护通信过程中的数据安全。

客户端和服务器之间通过交换加密密钥来建立安全连接,并使用这些密钥对数据进行加密和解密。

这种加密方式可以有效地防止中间人攻击和数据泄露。

2. 用户认证:SSH2协议支持多种用户身份验证方式,包括基于密码的身份验证、基于公钥的身份验证和基于证书的身份验证。

用户可以根据需要选择适合自己的身份验证方式,并且可以在服务器上配置访问权限,限制不同用户的操作范围。

3. 端口转发:SSH2协议支持端口转发功能,可以将本地端口与远程主机上的端口绑定起来。

这样,用户可以通过SSH隧道将本地主机上的网络服务转发到远程主机上,实现远程访问本地服务的功能。

端口转发在实际应用中非常有用,可以用于远程访问数据库、远程运行应用程序等。

4. X11转发:SSH2协议支持X11转发功能,可以在SSH连接中将X11图形界面传输到本地主机上进行显示。

这样,用户可以通过SSH远程连接到某台远程主机,在本地主机上显示远程主机上的X应用程序界面,提供了便捷的图形化远程操作环境。

5. SFTP:SSH2协议支持SFTP(SSH File Transfer Protocol)协议,可以实现安全的文件传输。

SFTP可以在SSH连接中传输文件,保证了文件的机密性和完整性。

SFTP功能类似于FTP,但安全性更高,可以代替传统的FTP协议进行文件传输。

总之,SSH2协议是一种安全、可靠的远程登录和执行命令的协议,具有强大的安全性、灵活的身份验证和多种有用的功能。

SSH2

SSH2
如果没有加密程序被使用,发送到和来自服务器的数据将不被加密。\n如果正在使用口令验证,您的口令将不被加密.
#--------------------
If MAC is set to None, your session will be susceptible to packet insertion attacks.
#--------------------
<SHA1 fingerprint>
<SHA1 指纹>
#=========================
#> 语系: "English (United States)" -> "Chinese (GB)"
#> 对话盒: 1561
#=========================
#> 对话盒: 146
#=========================
#> 字型: "MS Shell Dlg" 8 -> "MS Shell Dlg" 8
#--------------------
SFTP Tab\nSFTP Tab Options
SFTP 标签\nSFTP 标签选项
* 表示通过SSH2客户端监控这个会话所需要的信息. 客户端也必需这机器的主机名或IP地址.
#--------------------
&Allow remote input
允许远程输入(&A)
#--------------------
<MD5 fingerprint>

SSH分页通用参考

SSH分页通用参考

SSH分页通用参考(长洲第一恶人)内容:基于struts+hibernate+spring的一个分页显示的通用参考方案。

版本:Struts2.3,Hibernate4.1,Spring3.1说明:(1)上传日期为2012/8/24,相当目前而言,其版本是较新的。

正因为版本较新,所以一些代码并不如网上搜索到的那样。

举例:在Hibernate4.1中,没有了hibernateTemplate接口,尽管在spring3.1的包里仍可以用hibernate3的此接口,但从版本统一的角度考虑,程序中也不能使用。

(2)本程序前面一半并不是本人原创,也是参考了网上资料。

(3)本程序仅供参考,如有更好的,望能共同交流。

szxgy@(4)本程序相关文件清单:1、PagingDAO.java2、PagingDAOImpl.java3、PageBean.java4、PagingService.java5、PagingServiceImpl.java6、UserinfoControl.java7、struts.xml8、applicationContext.xml9、userinfoShowPaging.jsp10、pagingInclude.jsp其中第1、2、3、4、5、10是主要文档,第7、8是配置文档,第6、9是应用文档。

文件详单:1、PagingDAO.javapackage cn.office.DAO;import java.util.List;public interface PagingDAO {/** *//*** 分页查询* @param hql 查询的条件* @param beginset 开始记录* @param length 一次查询几条记录* @return*/public List queryForPage(final String hql,final int beginset,final int length);/** *//*** 查询所有记录数* @param hql 查询的条件* @return 总记录数*/public int getAllRowCount(String hql);}2、PagingDAOImpl.javapackage cn.office.DAO;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;public class PagingDAOImpl implements PagingDAO{private SessionFactory sessionFactory;public SessionFactory getSessionFactory(){return sessionFactory;}public void setSessionFactory(SessionFactory sessionFactory){this.sessionFactory=sessionFactory;}public Session getSession() {//事务必须是开启的,否则获取不到return sessionFactory.getCurrentSession();}//分页查询public List queryForPage(final String hql,final int beginset,final int length){ Session session=sessionFactory.getCurrentSession();session.beginTransaction();Query query = session.createQuery(hql);//query.setParameter("username",userpwd.getUsername());query.setFirstResult(beginset);query.setMaxResults(length);List list = query.list();session.getTransaction().commit();return list;}//查询所有记录数public int getAllRowCount(String hql){//return getHibernateTemplate().find(hql).size();Session session=sessionFactory.getCurrentSession();session.beginTransaction();Query query = session.createQuery(hql);//query.setParameter("username",userpwd.getUsername());List list = query.list();session.getTransaction().commit();return list.size();}}3、PageBean.javapackage cn.office.DAO;import java.util.List;public class PageBean {private List list; //要返回的某一页的记录列表private List<Integer> pageList;private int allRow; //总记录数private int totalPage; //总页数private int currentPage; //当前页private int pageSize; //每页记录数private boolean isFirstPage; //是否为第一页private boolean isLastPage; //是否为最后一页private boolean hasPreviousPage; //是否有前一页private boolean hasNextPage; //是否有下一页public List getList() {return list;}public void setList(List list) {this.list = list;}public List<Integer> getPageList() {return pageList;}public void setPageList(List<Integer> pageList) {this.pageList = pageList;public int getAllRow() {return allRow;}public void setAllRow(int allRow) {this.allRow = allRow;}public int getTotalPage() {return totalPage;}public void setTotalPage(int totalPage) {this.totalPage = totalPage;}public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}//初始化分页信息public void init(){this.isFirstPage = isFirstPage();this.isLastPage = isLastPage();this.hasPreviousPage = isHasPreviousPage();this.hasNextPage = isHasNextPage();}/** *//*** 以下判断页的信息,只需getter方法(is方法)即可* @return*/public boolean isFirstPage() {return currentPage == 1; // 如是当前页是第1页}public boolean isLastPage() {return currentPage == totalPage; //如果当前页是最后一页public boolean isHasPreviousPage() {return currentPage != 1; //只要当前页不是第1页}public boolean isHasNextPage() {return currentPage != totalPage; //只要当前页不是最后1页}/** *//*** 计算总页数,静态方法,供外部直接通过类名调用* @param pageSize 每页记录数* @param allRow 总记录数* @return 总页数*/public static int countTotalPage(final int pageSize,final int allRow){int totalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize+1;return totalPage;}/** *//*** 计算当前页开始记录* @param pageSize 每页记录数* @param currentPage 当前第几页* @return 当前页开始记录号*/public static int countBeginset(final int pageSize,final int currentPage){final int beginset = pageSize*(currentPage-1);return beginset;}/** *//*** 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替* @param page 传入的参数(可能为空,即0,则返回1)* @return 当前页*/public static int countCurrentPage(int page){final int curPage = (page==0?1:page);return curPage;}}4、PagingService.javapackage cn.office.DAO;public interface PagingService {/** *//*** 分页查询* @param currentPage 当前第几页* @param pageSize 每页大小* @return 封闭了分页信息(包括记录集list)的Bean*/public PageBean queryForPage(String phql,int pageSize,int currentPage);}5、PagingServiceImpl.javapackage cn.office.DAO;import java.util.ArrayList;import java.util.List;public class PagingServiceImpl implements PagingService{//通过applicationContext.xml配置文件注入PagingDao的值private PagingDAO pagingDAO;public void setPagingDAO(PagingDAO pagingDAO) {this.pagingDAO = pagingDAO;}public PagingDAO getPagingDAO(){return this.pagingDAO;}/** *//*** 分页查询* @param currentPage 当前第几页* @param pageSize 每页大小* @return 封闭了分页信息(包括记录集list)的Bean*/public PageBean queryForPage(String phql,int pageSize,int page){if (pageSize<=0)pageSize=5;final String hql = phql; //查询语句int allRow = pagingDAO.getAllRowCount(hql); //总记录数int totalPage = PageBean.countTotalPage(pageSize, allRow); //总页数final int beginset = PageBean.countBeginset(pageSize, page); //当前页开始记录final int length = pageSize; //每页记录数final int currentPage = PageBean.countCurrentPage(page);List list = pagingDAO.queryForPage(hql,beginset, length); //"一页"的记录List<Integer> pageList = new ArrayList<Integer>();for(int i=1;i<=totalPage;i++){pageList.add(i);}//把分页信息保存到Bean中PageBean pageBean = new PageBean();pageBean.setPageSize(pageSize);pageBean.setCurrentPage(currentPage);pageBean.setAllRow(allRow);pageBean.setTotalPage(totalPage);pageBean.setList(list);pageBean.setPageList(pageList);pageBean.init();return pageBean;}}6、UserinfoControl.java(只是部分)//分页显示用户信息public String ListUserinfoPaging(){ActionContext ctx=ActionContext.getContext();Map session=ctx.getSession(); //Servlet HibernateList<Department> departList=departmentDAO.getAllDepartment();for(int i=0;i<departList.size();i++){(departList.get(i)).setDepartname((departList.get(i)).getDepartname().replace(" ├─", ""));//为了把多余的前缀去除}session.put("depart", departList);//分页的pageBean,参数pageSize表示每页显示记录数,page为当前页String phql="from Userinfo";//this.pageBean = pagingService.queryForPage(phql,2, page);this.pageBean = pagingService.queryForPage(phql,pageSize, page);return "showPagingUserinfo";}7、struts.xml(只是部分)<!--<action name="UserinfoManage" class="erinfoControl">用户数据录入结果界面//--><action name="UserinfoManage" class="UserinfoControl"><!--整合spring后加入,替换上一行--><result name="success">/user/userinfoaddfinish.jsp</result><result name="showAllUserinfo">/user/userinfoShowAll.jsp</result><result name="showPagingUserinfo">/user/userinfoShowPaging.jsp</result><result name="input">/user/userinfoadd.jsp</result><result name="update">/user/userinfoupdate.jsp</result><result name="searchResult">/user/userinfoShowAll.jsp</result></action>8、applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.0.xsd"><bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="configLocation"value="classpath:hibernate.cfg.xml"></property></bean><bean id="sessionHibernate" class="cn.office.DAO.HibernateUtil" factory-method="getSession"></bean><bean id="userpwdDAO" class="erpwdDAOImply"><property name="sessionFactory" ref="sessionFactory"></property><!-- <property name="sessionHibernate" ref="sessionHibernate"></property>--> </bean><bean id="departmentDAO" class="cn.office.DAO.DepartmentDAOImply"><!-- <property name="sessionFactory" ref="sessionFactory"></property> --><property name="sessionHibernate" ref="sessionHibernate"></property> </bean><bean id="userinfoDAO" class="erinfoDAOImply"><!-- <property name="sessionFactory" ref="sessionFactory"></property> --><property name="sessionHibernate" ref="sessionHibernate"></property> </bean><bean id="changepwd" class="erpwdControl" scope="prototype"> <!-- spring单例模式:scope="singleton"/scope="prototype"--><property name="userpwdDAO" ref="userpwdDAO"/></bean><bean id="DepartmentControl" class="er.DepartmentControl" scope="prototype"><property name="departmentDAO" ref="departmentDAO"/></bean><bean id="UserinfoControl" class="erinfoControl" scope="prototype"><property name="userinfoDAO" ref="userinfoDAO"/><property name="departmentDAO" ref="departmentDAO"/><property name="pagingService" ref="pagingService"/></bean><bean id="pagingDAO" class="cn.office.DAO.PagingDAOImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="pagingService" class="cn.office.DAO.PagingServiceImpl"><property name="pagingDAO" ref="pagingDAO"></property></bean></beans>9、userinfoShowPaging.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link type="text/css" rel="stylesheet" href="../images/style.css"/><title>分页显示用户信息</title><script type="text/javascript"><!--function idel(j){var j;if(confirm("请确认是否真的删除此记录?("+j+")")){window.location.href="UserinfoManage!deleteUserinfo.action?id="+j;}}function iupdate(j){var j;if(confirm("确定要修改?("+j+")")){window.location.href="UserinfoManage!preUpdateUserinfo.action?id="+j;}}function alluser(){window.location.href="UserinfoManage!listAllUserinfo.action";}//--></script></head><body><%@ include file="TopInclude.jsp"%><div id="TOP">用户信息</div><s:form action="UserinfoManage!searchUserinfo.action" cssStyle="display:inline;" theme="simple"><table border="0" width="600px" cellspacing="0" cellpadding="0" align="center"><tr><td colspan="4" height="1" bgColor="#FFFFFF" ></td></tr><tr><td align="right"><b>查找用户</b></td><td><s:radio name="iselect" list="#{'0':'用户名','1':'用户姓名'}" value="0"></s:radio></td><td><s:textfield name="searchname" /></td><td align="left"><s:submit value="开始查找"/><input type="button" onclick="javascript:alluser();" value="全部用户"/></td></tr><tr><td colspan="4" height="1" bgColor="#FFFFFF" ></td></tr></table></s:form><form name="cmdForm" method="POST"><h3 align="center">用户信息分页显示</h3><table border="0" width="800px" cellspacing="0" cellpadding="0" align="center"><tr height="30" bgColor="#c0c0c0" align="center"><th width="50">序号</th><th width="100">用户名</th><th width="100">姓名</th><th width="120">隶属部门</th><th width="150">手机</th><th>身份证号</th><th width="130">数据操作</th></tr><s:iterator value="pageBean.list" status="user" id="aa"><tr height="25" align="center"><td><div align="center"><s:property value="#user.getIndex()+1+pageBean.pageSize*(pageBean.currentPage-1)" /></div></td> <td><s:property value="username" /></td><td ><s:property value="realname"/></td><td><s:iterator value="#session.depart" status="depart" id="bb"><s:if test="#aa.department==#bb.id"><s:property value="departname"/></s:if></s:iterator></td> <td><s:property value="mobile" /></td><td><s:property value="identitycard" /></td><td><a href="javascript:void(null);" onclick="javascript:iupdate(<s:property value="id"/>);">修改</a> |<a href="javascript:void(null);" onclick="javascript:idel(<s:property value="id"/>);">删除</a></td></tr></s:iterator><tr><td colspan="7" height="2" bgColor="#c0c0c0" ></td></tr></table><%@ include file="pagingInclude.jsp"%></body></html>10、pagingInclude.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort();String jspAddress = basePath+request.getRequestURI()+"?"+request.getQueryString();String jspAddressShort = basePath+request.getRequestURI();//这个获取的是完整的URL-jsp地址。

SSH2环境搭建教程

SSH2环境搭建教程

SSH2环境搭建(一)前几天被SSH2的环境搭建深深的伤害了,当时真有种想死的冲动,对我的打击实在太大,毕竟毕业设计需要用到这个框架环境,所以还得硬着头皮徒手搭建。

笔者不才,在网上搜索到了N篇关于三大框架融合的文章、论文等等,老师发的课件也看了无数,但是还是没能顺利搭建出来一个成功的框架,有点接受不了,只好好好的复习了一把,确确实实的将环境搭建搞好了,经过一番刻苦的钻研,终于在网上也搜到了一些可以借鉴的教程、经验,练习了好几天(貌似有两个多星期),下面就介绍一下我的环境搭建吧。

所需工具:使用的是Struts2.2.1.1+Hibernate3.3+Spring3.0版本,JDK是1.6,IDE是MyEclipse8.6,数据库是MySQL5.5,它的图形界面是MySQL Workbench。

步骤:第一部分:数据库的准备工作(此部分仅仅作为框架搭建后的检测,不需要的可以直接跳过)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) );2、OK,数据库创建完毕,为了效率的创建bean,所以在MyEclipse创建数据库的连接,乖乖地在MyEclipse右上角找到MyEclipse Hibernate perspective的试图界面吧!创建一个MySQL的连接,如图所示:点击Finish就好了。

项目任务单-2.2配置网络和使用SSH 2

项目任务单-2.2配置网络和使用SSH 2
项目任务单
专业领域:计算机网络技术学领域:Linux网络操作系统(统信UOS V20)
学习情境二系统管理与配置
项目六
配置网络和使用SSH
课时
2
企业
环境
及需求
用户在多个配置文件中快速切换。在公司上面中使用笔记本计算机时,需要手动指定网络的IP地址,而回到家中则使用DHCP自动分配IP地址。
任务
描述
使用网络会话功能
项目
实践
条件
软硬件条件:
需要2台安装Linux系统的虚拟机:Server01和Client1
提交成果
1.课堂实践项目设计方案
2.课堂实践随堂配置文件
课后作业
在统信UOS V20系统中有多种方法可以配置网络参数,请列举几种
备注

libssh2--ssh2实例

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)如果在参数列表中设置了认证⽅式,则将认证⽅式设为命令中的⽅式(前提是该⽅式是通过上个步骤检测可⽤的)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分页应该是在我们开发web应用时经常要做的工作,能够比较简洁的实现数据库和视图层的分页十分重要。

在数据库层利用Hibernate进行数据库的分页,将从数据库中查询出的数据封装为javabean;在视图层就可以方便的实现分页。

创建PageBean1.package mon.bean;2.3.import java.util.List;4.@SuppressWarnings("unchecked")5.public class PageBean {6.7.private List list; // 要返回的某一页的记录列表8.9.private int allRow; // 总记录数10.private int totalPage; // 总页数11.private int currentPage; // 当前页12.private int pageSize; // 每页记录数13.14.15.private boolean isFirstPage; // 是否为第一页16.private boolean isLastPage; // 是否为最后一页17.private boolean hasPreviousPage; // 是否有前一页18.private boolean hasNextPage; // 是否有下一页19.20.public List getList() {21.return list;22. }23.24.public void setList(List list) {25.this.list = list;26. }27.28.public int getAllRow() {29.return allRow;30. }31.32.public void setAllRow(int allRow) {33.this.allRow = allRow;34. }35.36.public int getTotalPage() {37.return totalPage;38. }39.40.public void setTotalPage(int totalPage) {41.this.totalPage = totalPage;42. }43.44.public int getCurrentPage() {45.return currentPage;46. }47.48.public void setCurrentPage(int currentPage) {49.this.currentPage = currentPage;50. }51.52.public int getPageSize() {53.return pageSize;54. }55.56.public void setPageSize(int pageSize) {57.this.pageSize = pageSize;58. }59.60./** */61./**62. * 初始化分页信息63. */64.public void init() {65.this.isFirstPage = isFirstPage();66.this.isLastPage = isLastPage();67.this.hasPreviousPage = isHasPreviousPage();68.this.hasNextPage = isHasNextPage();69. }70.71./** */72./**73. * 以下判断页的信息,只需getter方法(is方法)即可74. *75. * @return76. */77.78.public boolean isFirstPage() {79.return (currentPage == 1);// 如是当前页是第1页80. }81.public boolean isLastPage() {82.return currentPage == totalPage; //如果当前页是最后一页83.}84.public boolean isHasPreviousPage() {85.return currentPage != 1; //只要当前页不是第1页86.}87.public boolean isHasNextPage() {88.return currentPage != totalPage; //只要当前页不是最后1页89.}90./** */91./**92. * 计算总页数,静态方法,供外部直接通过类名调用93. *94. * @param pageSize95. * 每页记录数96. * @param allRow97. * 总记录数98. * @return 总页数99. */100.public static int countTotalPage(final int pageSize, final int a llRow) {101.int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow102. / pageSize + 1;103.return totalPage;104. }105.106./** */107./**108. * 计算当前页开始记录109. *110. * @param pageSize111. * 每页记录数112. * @param currentPage113. * 当前第几页114. * @return 当前页开始记录号115. */116.public static int countOffset(final int pageSize, final int curr entPage) {117.final int offset = pageSize * (currentPage - 1);118.return offset;119. }120.121./** */122./**123. * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替124. *125. * @param page126. * 传入的参数(可能为空,即0,则返回1)127. * @return 当前页128. */129.public static int countCurrentPage(int page) {130.final int curPage = (page == 0 ? 1 : page);131.return curPage;132. }133.}在Dao的抽象接口BaseDao中添加方法1.public List queryForPage(final String hql, final int offset,2.final int length);在Dao的实现类JianSheDWDaoImpl中实现方法1.public List queryForPage(final String hql, final int offset,2.final int length) {3. List list = getHibernateTemplate().executeFind(new HibernateCallback() {4.5.public Object doInHibernate(Session session)6.throws HibernateException, SQLException {7. Query query = session.createQuery(hql);8. query.setFirstResult(offset);9. query.setMaxResults(length);10. List list = query.list();11.return list;12.13. }14. });15.16.return list;17. }在service抽象层接口JianSheDWService中添加方法1.public PageBean queryForPage(int pageSize,int currentPage);在service实现类中实现方法1.public PageBean queryForPage(int pageSize, int page) {2.final String hql = "from JianSheDWBean"; // 查询语句3.int allRow = this.baseDao.getAllRowCount(hql); // 总记录数4.int totalPage = PageBean.countTotalPage(pageSize, allRow); // 总页数5.final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录6.final int length = pageSize; // 每页记录数7.final int currentPage = PageBean.countCurrentPage(page);8. List<JianSheDWBean> list = this.baseDao.queryForPage(hql, offset, length); // "一页"的记录9.10.// 把分页信息保存到Bean中11. PageBean pageBean = new PageBean();12. pageBean.setPageSize(pageSize);13. pageBean.setCurrentPage(currentPage);14. pageBean.setAllRow(allRow);15. pageBean.setTotalPage(totalPage);16. pageBean.setList(list);17. pageBean.init();18.return pageBean;19.20. }在视图层action中建立分页模型1.package com.fishing.action.lcq;2.3.4.5.import mon.bean.JianSheDWBean;6.import mon.bean.PageBean;7.import com.fishing.service.lcq.JianSheDWService;8.import com.opensymphony.xwork2.ActionSupport;9.10.@SuppressWarnings("serial")11.public class GetInfoJSDWListAction extends ActionSupport {12.13.private int page; // 第几页14.15.private PageBean pageBean; // 包含分布信息的bean16.17.private JianSheDWBean jianSheDWBean;18.// private PageBean page;19.private JianSheDWService jianSheDWService;20.21.public int getPage() {22.return page;23. }24.25.public void setPage(int page) {26.this.page = page;27. }28.29.public PageBean getPageBean() {30.return pageBean;31. }32.33.public void setPageBean(PageBean pageBean) {34.this.pageBean = pageBean;35. }36.37.public JianSheDWBean getJianSheDWBean() {38.return jianSheDWBean;39. }40.41.public void setJianSheDWBean(JianSheDWBean jianSheDWBean) {42.this.jianSheDWBean = jianSheDWBean;43. }44.45.public JianSheDWService getJianSheDWService() {46.return jianSheDWService;47. }48.49.public void setJianSheDWService(JianSheDWService jianSheDWService) {50.this.jianSheDWService = jianSheDWService;51. }52.53.@Override54.public String execute() throws Exception {55.56.//分页的pageBean,参数pageSize表示每页显示记录数,page为当前页57.this.pageBean = jianSheDWService.queryForPage(10, page);58.return SUCCESS;59. }60.}在jsp中编写分页1.<tr class="odd">2.<td>3. &nbsp;4.</td>5.<td>6.<s:if test="%{pageBean.currentPage == 1}">7.首页上一页8.</s:if>9.<s:else>10.<a href="jianguan/getJSDWInfos.action?page=1">首页</a>11.<a12.href="jianguan/getJSDWInfos.action?page=<s:property value="%{pageBean.cur rentPage-1}"/>" />上一页</a>13.14.</s:else>15.</td>16.<td>17.<s:if test="%{pageBean.currentPage != pageBean.totalPage}">18.19.<a20.href="jianguan/getJSDWInfos.action?page=<s:property value="%{pageBean.cur rentPage+1}"/>">下一页</a>21.<a22.href="jianguan/getJSDWInfos.action?page=<s:property value="pageBean.total Page"/>">尾页23.</a>24.</s:if>25.<s:else>26.下一页尾页27.</s:else>28.</td>29.30.<td>31.<div align="center">32.页次33.<s:property value="pageBean.currentPage"/>34. /35.<s:property value="pageBean.totalPage"/>36. &nbsp;&nbsp;&nbsp;共37.<s:property value="pageBean.allRow"/>38.记录39.</div>40.<div align="center"></div>41.</td>42.</tr>。

相关文档
最新文档