一、目标
创建两个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>