Struts入门实例

简介:

    在MyEcplise开发第一个Struts程序相当简单,它已经集成了Struts了,所以不需要自己手动加载Struts的库,只需要给创建的Web Project执行【MyEclipse】-【Project capabilities】-【add Struts capabilities】就自动会在src目录下添加Struts.xml,并且web.xml也会自动做出相应的修改改。

今天的实例是一个图书查询系统实例,查询界面是querybooks.jsp,结果显示页面是result.jsp,错误页面时error.jsp。action是QueryAction.java

1.QueryAction.java

只要是action类就必定有execute() 方法,在execute() 方法中我们设定了action的跳转页面,比如在下面的代码中我们知道如果根据传进来的参数能够找到匹配的图书的话,就会从action跳转到return "result";界面,而如果没有图书与查询条件相匹配,就会跳转到return "error"; 这里的result和error并不是真正的界面,只是一个字段而已,不过我们将在后面的Struts.xml中配置这些字段所对应的跳转界面。

package chapter7.action;
import java.util.Map;
import chapter7.dao.BookDAO;
public class QueryAction {
    private String name;
    private Map<String,Integer> result;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Map<String, Integer> getResult() {
        return result;
    }
    public void setResult(Map<String, Integer> result) {
        this.result = result;
    }
    //action类必定有一个execute()方法。
    public String execute() throws Exception
    {
        try
        {
            BookDAO book=new BookDAO();
            Map<String, Integer> books=book.getBooks(name);
            setResult(books);
            return "result";
        }
        catch(Exception e)
        {
            return "error";
        }
    }
}

2.BookDAO.java

这里类是用于查询图书的。首先有一个静态方法给Map<String,Integer> books 赋了初值,然后通过getBooks(String name)方法在books 对象中查找是否有与name匹配的图书,如果有则将其存放都专门的查询结果对象中,最后返回这个对象,如果没有返回空。

package chapter7.dao;
import java.util.LinkedHashMap;
import java.util.Map;
public class BookDAO {
    //定义一个保存图书信息的静态Map对象。
    private static Map<String,Integer> books=new LinkedHashMap<String,Integer>();
    static
    {
        books.put("J2EE整合详解与典型案例",79);
        books.put("数据库系统概念",69);
        books.put("C++程序设计",59);
        books.put("ASP.NET开发",49);
    }
    public static Map<String, Integer> getBooks(String name) {
    //定义一个保存查询结果的books对象    
        Map<String,Integer> books=new LinkedHashMap<String,Integer>();
        //对BookDAO.books的对象进行逐个扫描,如果对象中有匹配查询条件的,则保存到books对象中。
        for(Map.Entry<String, Integer>entry:BookDAO.books.entrySet())
        {
            if(entry.getKey().toLowerCase().contains(name.toLowerCase()))
                books.put(entry.getKey(), entry.getValue());
        }
        return books;
    }    
}

3.Struts.xml的配置

这个配置未见定义了result和error所对应的跳转页面分别是webroot根目录下的result.jsp和error.jsp这两个页面。namespace="/" 这个很重要,如果没有配置正确会出现错误,具体错误与解决方法参考另外一票博客:http://blog.csdn.net/xw13106209/archive/2010/09/14/5884278.aspx .

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="Struts2" namespace="/" extends="struts-default">
        <action name="query"  class="chapter7.action.QueryAction">
            <result name="result">/result.jsp</result>
            <result name="error">/error.jsp</result>
        </action></package>
</struts> 

4.result.jsp页面

简单的jsp页面。用于显示查询结果。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>查询结果界面</title>
   </head>
  <body>
  <table border="1">
   <tr>
   <td>书名</td>
   <td>价格</td>
   </tr>
   <%
   Map<String,Integer> result=(Map<String,Integer>)request.getAttribute("result");
    for(Map.Entry<String,Integer>entry: result.entrySet())   
     {
    %>
   <tr>
   <td><%=entry.getKey() %></td>
   <td><%=entry.getValue() %></td>
   </tr>
  <%} %>
  </table>
  </body>
</html>

在result.jsp中我们可以发现使用request.getAttrbute()方法可以获得在QueryAction中setResult(books)方法中所保存的books对象的内容。

5.querybook.jsp界面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>查询图书信息</title>
      </head>
   <body>
  <s:form action="query">
  <s:textfield label="书名" name="name"/>
  <s:submit value="查询"/>
  </s:form>
    </body>
</html>

从上面<s:form action="query">可以看出querybook.jsp界面的下一个跳转action是query。而在Struts.xml中也正好定义了名为query的action,如Struts.xml设置所示,其中不仅定义了一个名为query的action,并且指出该action所对应的类是QueryAction,在result标签中定义了“result”和“error”两种情况所需要跳转的页面。

6.error.jsp界面

<%@ page language"java" import"java.util.*" pageEncoding"ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href"<%=%>">
     <title></title>
  </head> 
  <body>
   <br>
  </body>

</html>






本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2010/09/15/2297090.html,如需转载请自行联系原作者

目录
相关文章
|
机器学习/深度学习 运维 算法
大模型开发:解释监督学习和非监督学习之间的区别。
监督学习与非监督学习是机器学习的两大分支。监督学习使用带标签的训练数据来学习预测模型,如线性回归、SVM,常用于分类和回归问题。非监督学习则从无标签数据中挖掘模式和结构,如聚类、PCA,适用于市场细分和异常检测。关键在于根据任务和数据选择合适的方法。
629 1
|
前端开发 API C#
c#实现简单Token口令验证
  最近一个项目发现手机验证码总是被人盗刷,一秒钟刷了1百多个,很明显这种行为是通过软件自动提交的,自动发帖机原理类似,解决这个问题目前有两个方案。   出现这个问题原因:请求手机验证码Api时没有任何带任何验证,只要请求了手机号正确就执行发送操作,软件或代码很容易伪造请求过程。   解决方案有很多种,可以选择下面一种或几种组合起来使用。   方案1:用户获取手机验证码时候弹出图片验证码,输入后再发送。
1834 0
|
存储 人工智能 算法
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
726 0
|
7月前
|
安全 网络协议 网络安全
Hyper-V无连接,常见原因及修复
Hyper-V无连接问题可能由虚拟交换机配置、网络适配器驱动、IP设置、防火墙、BIOS、Hyper-V服务、虚拟机系统及物理网络等多方面引起。解决时需逐一排查:确认虚拟交换机绑定正确、驱动兼容、IP配置无误、防火墙规则适当、BIOS启用虚拟化技术、Hyper-V服务正常运行、虚拟机系统网络完好以及物理网络设备功能正常。若仍无法解决,建议寻求专业技术支持。
|
8月前
|
JSON API 数据安全/隐私保护
虾皮(shopee)商品详情接口(虾皮 API 系列)
Shopee 商品详情接口(item_get)用于获取商品的标题、价格、描述、库存和图片等详细信息。开发者需使用 Shopee 提供的 API 密钥进行认证,通过 GET 请求访问指定 URL。请求参数包括 partner_id、shopid、itemid、timestamp 和 sign。签名生成需按字母顺序排序参数,拼接后与 API 密钥进行 HMAC-SHA256 加密。响应为 JSON 格式,包含商品详细信息及错误提示。注意妥善保管 API 密钥,并遵守请求频率限制。
|
存储 网络协议 算法
基于 Wireshark 分析 ICMP 协议
基于 Wireshark 分析 ICMP 协议
|
JavaScript 数据安全/隐私保护
如何在Vue组件中调用封装好的外部js文件方法
这篇文章介绍了如何在Vue组件中调用封装好的外部js文件方法,包括在Vue项目中全局引入外部js文件,并在组件中通过this.$myMethod()的方式调用外部js文件中定义的方法。
如何在Vue组件中调用封装好的外部js文件方法
|
Ubuntu Apache
Ubuntu20.04下一键安装Moveit
本文提供了一个一键安装Moveit的脚本工具,旨在帮助中国地区的用户在Ubuntu 20.04系统上安装Moveit并配置相关环境。脚本包括安装必要包、创建catkin工作空间、克隆Moveit源代码和示例代码、使用rosdep安装依赖以及构建工作空间,并提供了详细的使用说明和源码。
671 0
Ubuntu20.04下一键安装Moveit
|
12月前
|
机器学习/深度学习 存储 人工智能
AllData数据中台核心菜单九:元数据管理
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
Web App开发 API C语言
C语言图形界面库的研究与应用
C语言图形界面库的研究与应用
372 1