当前位置: 首页 > news >正文

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="<%=basePath%>">
     <title>My JSP 'error.jsp' starting page</title>
  </head> 
  <body>
   ERROR page. <br>
  </body>
</html>

相关文章:

  • MVC入门学习笔记(三)
  • CentOS服务器配置系列--telnet服务器
  • visual scene interpretation
  • 如何用JSP/Java程序免费向手机发消息?
  • Bigpoint 发布全球首款Silverlight网页游戏(转载)
  • VS2008的动、静态编译(转)
  • python 批量修改密码
  • 计算机达人成长之路(20)
  • java线程同步概述
  • jQuery id选择器中特殊字符的处理
  • C#类学习-1
  • 定义Message大小限制
  • Dojo学习5 日期选择:dijit.form.DateTextbox
  • 转 fpga学习经验2
  • RRDtool 1.4.4 安装
  • JavaScript-如何实现克隆(clone)函数
  • PHP那些事儿
  • Python利用正则抓取网页内容保存到本地
  • STAR法则
  • sublime配置文件
  • TypeScript迭代器
  • V4L2视频输入框架概述
  • Yeoman_Bower_Grunt
  • yii2权限控制rbac之rule详细讲解
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 分布式熔断降级平台aegis
  • 经典排序算法及其 Java 实现
  • 力扣(LeetCode)21
  • 两列自适应布局方案整理
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 移动端 h5开发相关内容总结(三)
  • 智能合约Solidity教程-事件和日志(一)
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (python)数据结构---字典
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)JAVA中的堆栈
  • .form文件_一篇文章学会文件上传
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET大文件上传知识整理
  • .net生成的类,跨工程调用显示注释
  • .net下简单快捷的数值高低位切换
  • :“Failed to access IIS metabase”解决方法
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @PreAuthorize注解
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [20150904]exp slow.txt
  • [20160902]rm -rf的惨案.txt
  • [BZOJ] 2427: [HAOI2010]软件安装