一、目标
创建两个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>
至此,此工程开发完毕