您的位置:首页 > 编程语言 > Java开发

【Hibernate】把Hibernate在后台查询到的数据通过Struts标签在前台进行输出

2014-09-29 15:06 489 查看
一、目标

创建两个jsp

一个jsp仅有一个Struts超级链接,仅用来触发后台Hibernate查询动作。



另一个jsp通过使用Struts标签<s:iterator>的标签,把Hibernate查出来的用户基本信息表输出。



二、基本思想

如图:



三、基本***过程

1.前台的Go.jsp如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>Go</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

	</head>

	<body>
		<s:url id="url1" action="findAllusr"></s:url>
		<s:a href="%{url1}">显示所有用户</s:a>
	</body>
</html>


Struts.xml如下:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
	<package name="struts2" extends="struts-default">
		<action name="findAllusr" class="com.hibernate.dao.findAllusr">
			<result name="go">/WEB-INF/showusr.jsp</result>
		</action>
	</package>
</struts>
具体的编写方法见《【Struts2】创造一个最简单、最基本的Struts2工程》(点击打开链接

Usr.java、Usr.hbm.xml、hibernate.cfg.xml与数据库的表跟《【Hibernate】最简单的Hibernate工程——账号注册系统》中的一模一样(点击打开链接

本文着重讨论数据访问对象DAO类下的findAllusr.java与前台的showusr.jsp,其实showusr.jsp与《【Struts2】使用JDBC、Struts2标签、编辑WEB.XML完成较成熟的工程(3)》(点击打开链接)中的查看所有用户列表的showusr.jsp几乎是相同的,不过联系起findAllusr.java还是进行再一次的讨论。

2.findAllusr.java

package com.hibernate.dao;

import org.hibernate.*;
import org.hibernate.cfg.*;

import com.hibernate.po.*;
//以上是DAO类的几个必须引入的包

import java.util.*;
//要使用List数据结构来保存查询结果

import com.opensymphony.xwork2.ActionContext;
//要用到ActionContext.getContext()这个容器去保存查询结果

public class findAllusr {
	private int id;
	private String username;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	//要用到多少个变量,就要有多少个私有成员变量,就要有多少个相应的GETTER,SETTER
	//缺一个,网页工程就无法执行。
	
	public String execute() throws Exception{
		Usr u=null;
		//以下三条为特定的、连接数据库的语句
		SessionFactory sf = new Configuration().configure().buildSessionFactory();
		Session sess = sf.openSession();
		Transaction tx = sess.beginTransaction();
		//对整个表进行查询,不需要任何条件,记得查完之后,用list()方法对其进行List的转化
		List<Usr> list=sess.createQuery("from Usr").list();
		tx.commit();
		//以下两条为特定的、关闭数据库的语句
		sess.close();
		sf.close();
		//现在相当于存在着[{id1,username1,...},{id2,username2,..},...]这样的一个List
		//之后把这个List压到ActionContext容器里面,并把这个数据集合命名为allUsr
		ActionContext.getContext().put("allUsr", list);
		return "go";
		//返回struts.xml一个go字符串,让其跳转
	}
}


3.showusr.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">
		<title>用户列表</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

	</head>

	<body>
		<center>
			<h1>
				用户列表
			</h1>
			<!-- 以下是表头静态部分 -->
			<table border="1" width="80%">
				<tr>
					<td>
						ID
					</td>
					<td>
						用户名
					</td>
					<td>
						密码
					</td>
				</tr>
				<!--意思是创建一个指向数据集合allUsr的游标,-->
				<!--然后对里面的东西一个一个地读完,不用定义循环,自动读完所有的东西-->
				<!--s:iterator必须在tr之外,表示创建行,在每一次循环之内。	-->
				<s:iterator value="#request.allUsr">
					<tr>
						<td>
							<s:property value="id" />
						</td>
						<td>
							<s:property value="username" />
						</td>
						<td>
							<s:property value="password" />
						</td>
					</tr>
				</s:iterator>
			</table>
		</center>
	</body>
</html>


至此,此工程开发完毕
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐