`
djlijian
  • 浏览: 29406 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SSH2中简单封装

    博客分类:
  • SSH
阅读更多
1:在Strut2的Action经常要保存数据放到jsp页面中,不如在struts1所用的request.setAttribute(key,value);方法好用,所以可以通过简单的封装来使这种方法来传值:
BaseAction.java
package cn.com.netDragon.base;


import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public abstract class BaseAction extends ActionSupport implements Action{
// 成功常量
public static final String SUCCESS = "success";
public static final int PAGE=20;
//如果session里没有,返回重新登陆
public static final String LOGIN = "login";
public static final String INPUT = "input";
// 失败常量
public static final String ERROR = "error";
public Object getBean(String id){
ServletContext servletContext = ServletActionContext.getServletContext();
WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
return context.getBean(id);
}
   public HttpServletRequest request() {
   return ServletActionContext.getRequest();
}

public HttpSession session() {
   return ServletActionContext.getRequest().getSession();
}

public ServletContext application() {
   return ServletActionContext.getServletContext();
}

public HttpServletResponse response() {
   return ServletActionContext.getResponse();
}

}
然后在你的action中使用:
HttpServletRequest request = request();
request.setAttribute(key,value);方法了。

**************************************
2:在hibernate中经常对数据要进行添加,修改,删除,及其分页等操作,故简单的封装,直接继承就可以了:
BaseDAO.java
package cn.com.netDragon.base;

import java.sql.SQLException;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import cn.com.netDragon.util.GetID;
import cn.com.netDragon.util.Page;

public class BaseDAO extends HibernateDaoSupport{
public static final int PAGE=20;
public void add(Object o){
getHibernateTemplate().save(o);
/*//
try {
getHibernateTemplate().save(o);
} catch (Exception e) {
//e.printStackTrace();
throw new DataBaseException("数据库插入失败!");
       }*/
}
public void update(Object o){
getHibernateTemplate().update(o);
}
public void delete(Object o){
getHibernateTemplate().delete(o);
}
public Object findById(Class clazz,Integer id){
return getHibernateTemplate().get(clazz, id);
}
public List findAll(String hql){
List list = this.getHibernateTemplate().find(hql);
return list;
}
public List findByDeatched(DetachedCriteria dc){
List list =  getHibernateTemplate().findByCriteria(dc);
System.out.println(list.size());
return list;
}
//分页,适合无条件查询,参数为类名,页数
public List FenYe(String tableName,int page){
int start = 0;
int end = 0;
start = (page - 1) * PAGE + 1;
end = page * PAGE;
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session session = sf.openSession();
String sql = "SELECT * FROM (SELECT A.*,rownum RN FROM " +
"(SELECT * FROM "+tableName+") A WHERE ROWNUM <= "
+ end + ") WHERE RN >=" + start;
SQLQuery sqlq = session.createSQLQuery(sql);
sqlq.addEntity(GetID.getClass(tableName));
List list=sqlq.list();
session.close();
sf.close();
return list;
}
//查询总页数,适合无条件查询
public int totalPage(String tableName){
SessionFactory sf = getHibernateTemplate().getSessionFactory();
Session session = sf.openSession();
String sql = "select * from "+tableName;
SQLQuery sqlq = session.createSQLQuery(sql);
List list=sqlq.list();
session.close();
sf.close();
return list.size();
}

// ------------------------  两种分页方式 ---------------------------

public Page pageByCriteria(final DetachedCriteria dc, int curPage) {
Page p = new Page();

Integer sum = (Integer) getHibernateTemplate().execute(
new HibernateCallback() {

public Object doInHibernate(Session s)
throws HibernateException, SQLException {
Criteria c = dc.getExecutableCriteria(s);
c.setProjection(Projections.rowCount());
return c.uniqueResult();
}
});

int totalPage = (int) Math.ceil(sum
/ Double.parseDouble(PAGE + ""));
p.setTotalPage(totalPage);

final int begin = (curPage - 1) * PAGE;
List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {


public Object doInHibernate(Session s)
throws HibernateException, SQLException {
Criteria c2 = dc.getExecutableCriteria(s);
c2.setFirstResult(begin);
c2.setMaxResults(PAGE);
return c2.list();
}
});

p.setResult(list);
p.setCurrentPage(curPage);
return p;

}

public Page pageByHql(String className, String whereClause, int curPage) {
Page p = new Page();
final String hql = "from " + className + " "
+ whereClause;

// Integer sum = (Integer) getHibernateTemplate().execute(
// new HibernateCallback() {
// public Object doInHibernate(Session s)
// throws HibernateException, SQLException {
// Object obj = s.createQuery(hql).uniqueResult();
// return obj;
// }
// });
int sum = getHibernateTemplate().find(hql).size();

int totalPage = (int) Math.ceil(sum
/ Double.parseDouble(PAGE + ""));
p.setTotalPage(totalPage);

final int begin = (curPage - 1) * PAGE;
final String findHql = "from " + className + " " + whereClause;

List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {


public Object doInHibernate(Session s)
throws HibernateException, SQLException {
Query q2 = s.createQuery(findHql);
q2.setFirstResult(begin);
q2.setMaxResults(PAGE);
return q2.list();
}
});

p.setResult(list);
p.setCurrentPage(curPage);
return p;
}

public Page pageByHql(String hql, int curPage) {
Page p = new Page();
int sum = getHibernateTemplate().find(hql).size();
p.setTotalRecordNum(sum);

int totalPage = (int) Math.ceil(sum
/ Double.parseDouble(PAGE + ""));
p.setTotalPage(totalPage);

final int begin = (curPage - 1) * PAGE;
final String findHql = hql;

List list = (List) getHibernateTemplate().execute(
new HibernateCallback() {


public Object doInHibernate(Session s)
throws HibernateException, SQLException {
Query q2 = s.createQuery(findHql);
q2.setFirstResult(begin);
q2.setMaxResults(PAGE);
return q2.list();
}
});

p.setResult(list);
p.setCurrentPage(curPage);
p.setBeginNum((curPage-1)*PAGE);
return p;
}

/**
* 按HQL查询唯一对象.
* by wjf
*/
public Object findUnique(String hql) {
return this.getSession().createQuery(hql).uniqueResult();
}
}

*********************************
在相应的Dao层和service层调用:
*******************************************
dao层:
*******************************************
/**
  * 查找所有新闻发布信息,并分页显示
  * @param curPage
  * @return page
  * @author Li_jian
  */
     @SuppressWarnings("unchecked")
public Page findAllNews(int curPage) {
      String hql = "from SysNews sn";
  Page page = pageByHql(hql, curPage);
  return page;
}
******************************************
service层:
******************************************
/**
* 初始化新闻管理,并分页显示
* @param curPage
* @return
* @author Li_jian
*/
@SuppressWarnings("unchecked")
public Page initNews(int curPage){
Page page = adminDaoImpl.findAllNews(curPage);
List<SysNewsVO> result = new ArrayList<SysNewsVO>();
List<SysNews> list = page.getResult();
for(int i=0;i<list.size();i++){
SysNews sn = list.get(i);
SysNewsVO vo = new SysNewsVO();
vo.setSysNews(sn);
result.add(vo);
}
page.setResult(result);
return page;
}
*************************************************
Page.class 中的内容:
************************************************
package cn.com.netDragon.util;

import java.io.Serializable;
import java.util.List;

public class Page implements Serializable {
private int currentPage;
private int totalRecordNum;
private int totalPage;
private List result;
private int beginNum;

public int getBeginNum() {
return beginNum;
}

public void setBeginNum(int beginNum) {
this.beginNum = beginNum;
}

public int getCurrentPage() {
return currentPage;
}

public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

public List getResult() {
return result;
}

public void setResult(List result) {
this.result = result;
}

public int getTotalRecordNum() {
return totalRecordNum;
}

public void setTotalRecordNum(int totalRecordNum) {
this.totalRecordNum = totalRecordNum;
}
}
**************************************
Action中的调用:
**************************************
@Override
public String execute() throws Exception {
HttpServletRequest request = request();
try {
//分页显示sysnews
String curpage = request.getParameter("page");
int curPage = 1;
if (curpage != null && curpage.length() > 0) {
curPage = Integer.parseInt(curpage);
}
Page page = adminManage.initNews(curPage);
request.setAttribute("page", page);
request.setAttribute("url", "right.action?2=2");

return SUCCESS;
} catch (Exception e) {
if (Constants.DEBUG) {
e.printStackTrace();
}
return ERROR;
}
}
**************************************************
jsp页面中的显示:
*************************************************
<!--右边内容底部的页数区-->
<div id=Right3>
<table width="96%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="50%"></td>
    <td width="50%">
    <img src="imgs/first.gif" align="absmiddle" /><a href="${requestScope.url }&page=1">首页</a>&nbsp;&nbsp;
    <img src="imgs/prevPage.gif" width="12" height="12" align="absmiddle" />
    <a href="javascript:goBack('${requestScope.url }','${requestScope.page.currentPage}');">上页</a>
    &nbsp;&nbsp;<a href="javascript:goTo('${requestScope.url }','${requestScope.page.currentPage }','${requestScope.page.totalPage }');">下页</a>
    <img src="imgs/nextPage.gif" width="12" height="12" align="absmiddle" />&nbsp;&nbsp;<a href="javascript:last('${requestScope.url }','${requestScope.page.totalPage}');">末页</a>
    <img src="imgs/lastPage.gif" width="12" height="12" align="absmiddle" /> <label>
      <select name="targetPage" onchange="goToPage('${requestScope.url }',this)" >
       <c:forEach var="pageno" begin="1" end="${requestScope.page.totalPage}" step="1">         
         <option value="${pageno}"
         <c:if test="${pageno== requestScope.page.currentPage}">selected</c:if>
         >${pageno}</option>
            </c:forEach>
    </select>
      &nbsp;共${requestScope.page.totalRecordNum}条
    </label></td>
  </tr>
</table>
</div>

仅供个人学习使用,Thanks。
分享到:
评论

相关推荐

    ssh2简单查询实例

    在Struts2中,Action类是处理用户请求的核心,它将请求转发到相应的服务并返回结果给视图。 **Spring** 是一个全面的企业级应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能。在SSH2组合中,Spring主要...

    SSH2+oracle数据库

    其次,SSH2可以提供隧道功能,将不安全的通信协议(如TCP)封装在安全的SSH通道中,例如,可以用来安全地进行Oracle的PL/SQL Developer或其他非加密数据库连接工具的远程访问。 描述中的"oracle与ssh2技术的整合,...

    一个最简单的SSH框架

    一个最简单的SSH框架Struts 、 spring 、 Hibernate 在各层的作用 1 ) struts 负责 web 层 . ActionFormBean 接收网页中表单提交的数据,然后通过 Action 进行处理,再 Forward 到对应的网页。 在 struts-config...

    ssh1实现简单的增删查改i+ssh2实现crud

    在Struts2中,可以创建一个表单,提交后调用Action的execute()方法,然后由Spring控制事务,确保数据安全插入。 2. **读取(Read)**:使用Hibernate的Session对象的get()或load()方法获取特定ID的对象,或者通过...

    ssh框架简单整合

    在"ssh框架简单整合"项目中,我们可以看到一个基于这三个框架的初级应用实例。以下是对这些关键组件的详细解释: 1. **Spring框架**:Spring的核心是IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented ...

    ssh2的简单配置练习希望对大家有所抱住

    在Struts2中,你可以创建一个Action类,使用上述SSH连接类来执行远程命令或进行文件传输。例如: ```java import org.apache.struts2.interceptor.SessionAware; public class SSHAction implements SessionAware ...

    最简单的SSH实例

    SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架组合,用于构建高效、可扩展的Web应用程序。在这个最简单的SSH实例中,我们将重点讨论如何利用这三个组件实现一个基本的用户注册功能。 首先,...

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)

    在Struts2中,可以自定义标签库来复用和封装通用功能。这里的文件上传功能被封装成了一个自定义标签,使得开发者在其他地方只需要简单地插入这个标签,就能实现文件上传并展示进度。 7. **jar2**: 压缩包中的`...

    最简单的ssh2架构实例源代码,完整的myeclipse项目文件

    在Struts2中,我们可以使用拦截器(Interceptor)来添加额外的功能,如日志记录、事务管理等。此外,Struts2支持多种视图技术,如JSP、FreeMarker、Velocity等,使得视图层的实现更加灵活。 **Spring** 是一个全面...

    JAVASSH2整合

    2. **二层架构**:通常指表现层(UI Layer)和业务逻辑层(Business Logic Layer),这种架构简单直观,但在大型项目中可能难以管理。 3. **三层架构**:增加了持久层(Persistence Layer),即实体层(Entity ...

    Go-ssh2go 是对libssh的go语言绑定(包括客户端与服务器端)

    ssh2go 是对libssh的go语言绑定。libssh作为ssh的实现库,支持SSHv2和SSHv1的客户、服务端实现,通过libssh你可以... ssh2go不像其他go语言对ssh简单封装(实则调用ssh/sshd命令行而已),而是对libssh所有API的Go绑定

    ssh做的简单菜单权限管理

    SSH,全称Struts2 + Spring + Hibernate,是Java Web开发中广泛使用的三大开源框架的组合。Struts2负责控制层,Spring处理业务逻辑和依赖注入,Hibernate则作为持久化层,负责数据库操作。这个框架组合简化了开发...

    简单ssh登陆实例

    在本实例中,我们将探讨如何在MyEclipse 7这个集成开发环境中整合SSH框架,实现一个简单的登录功能。 首先,我们需要理解SSH框架。SSH(Spring、Struts2和Hibernate)是Java开发中的一个流行组合,用于构建企业级...

    ssh的简单的Demo

    SSH(Struts、Hibernate、Spring)是Java Web开发中经典的三大框架组合,它们分别负责表现层、持久层和业务层的管理。在这个名为"ssh"的压缩包中,很可能是包含了一个简易的SSH整合示例项目,供学习者参考和实践。 ...

    Python库 | ssh2_python-0.11.0-cp27-cp27m-win_amd64.whl

    `ssh2_python`库是基于libssh2库的一个Python封装,它提供了一个完整的SSH2客户端和服务器接口。这个库不仅支持标准的SSH2连接,还支持SFTP(SSH文件传输协议),使得开发者能够安全地进行文件传输和远程系统管理。`...

    一个简单的ssh整合的实例

    在这个简单的SSH整合实例中,我们将使用数据库SQL Server作为数据存储,而开发工具选择的是NetBeans。 首先,Spring框架是核心的依赖注入(DI)和面向切面编程(AOP)容器,它提供了管理应用对象和处理事务的能力。...

    我的第一个SSH封装的后台api

    这是小弟近来第一次封装的SSH框架的一些常用后台方法代码API,可能会有bug,希望大家如果发现的话,可以多多提点!! 主要功能包括 1.一般的增删改查 2.页面静态化 3.导出EXCEL表格,导入EXCEL表内容到数据库 4.HTML...

    python sftp&ftp&ssh2

    3. **pysftp**:它是基于Paramiko的一个简洁封装,专为SFTP操作设计,提供了更简单的API,使得SFTP操作更为直观。 对于“源码”标签,这可能意味着文章或压缩包包含了示例代码,展示了如何使用Python进行SFTP、FTP...

    java SSH整合简单操作

    Java SSH整合是Java开发中常见的一个技术话题,SSH指的是Spring、Struts和Hibernate这三个开源框架的首字母缩写。它们分别是IoC/DI容器、MVC框架和持久层ORM工具,一起构成了Java企业级应用的强大基础。下面我们将...

Global site tag (gtag.js) - Google Analytics