在简单了解了一下Struts2框架的运行原理之后,我们做了一个简单的例子——图书价格查询系统
在工程的根目录下创建如下web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<filter>
<!-- 配置Struts2过滤器 -->
<filter-name>Struts2</filter-name>
<!-- 在这里我们指定Struts2过滤器的类名,在一些老教材中使用的是dispatcher.FilterDispatcher类,现在已不建议使用 -->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 配置Struts2过滤器要过滤的路径 -->
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>然后我们创建一个新包com.test.DAO,并在该包下创建数据处理类BookDAO。代码如下:
package com.test.DAO;
import java.util.*;
public class BookDAO {
//新建一个哈希图链表用于储存书名和价格
private static Map<String,Integer> books=new LinkedHashMap<String,Integer>();
//为了方便调试,将数据静态初始化
static{
books.put("西游记",39);
books.put("红楼梦",102);
books.put("三国演义",53);
}
//getBooks方法根据书名进行模糊查询,返回用于保存查询结果的Map对象
public Map<String,Integer> getBooks(String name){
Map<String,Integer> books=new LinkedHashMap<String,Integer>();
//对BookDAO.books进行循环遍历搜索
for(Map.Entry<String,Integer> entry:BookDAO.books.entrySet()){
if(entry.getKey().toLowerCase().contains(name.toLowerCase()))
//如果条目符合,则将其放入保存查询结果的Map对象中返回
books.put(entry.getKey(),entry.getValue());
}
return books;
}
}接下来我们创建QueryAction类,托Struts2技术的福,我们可以通过在Action类中加入getter和setter方法来非常方便地读取和操作name(查询关键字)、result(查询返回结果)的值,具体代码如下:
package com.test.action;
import com.test.DAO.*;
import java.util.*;
public class QueryAction {
private String name;
private Map<String,Integer> result;
public Map<String,Integer> getResult(){
return result;
}
public void setResult(Map<String,Integer> result){
this.result=result;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public String execute() throws Exception{
try{
BookDAO book=new BookDAO();
//根据传入的关键字在我们早已定义好的静态数据中搜索并返回结果
Map<String,Integer> books=book.getBooks(name);
//将搜索结果放入result中
setResult(books);
//返回SUCCESS用于页面跳转
return "success";
}catch (Exception e){
return "error";
}
}
}然后我们在工程中的src目录下建立一个struts.xml文件,用于配置Action类:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default" namespace="/">
<!-- 将QueryAction的访问路径设为query -->
<action name="query" class="com.test.action.QueryAction">
<!-- 如果QueryAction类返回SUCCESS,则跳转到result.jsp -->
<result name="success">/result.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>终于可以开始动手写表现层代码了!让我们引入Struts2标签来帮助我们完成用于输入查询关键字的JSP页面querybooks.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!-- 声明使用Struts2标签 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>查询图书信息</title>
</head>
<body>
<!-- Struts2的form标签,query为我们事先配置好的QueryAction类的路径 -->
<s:form action="query">
<!-- 注意这里name属性值必须为"name" -->
<s:textfield label="书名" name="name"/>
<s:submit value="查询"/>
</s:form>
</body>
</html>还有输出查询结果的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>
<table border="1">
<tr>
<td>书名</td>
<td>价格</td>
</tr>
<!-- s:iterator是迭代器标签,用于迭代输出数据 -->
<s:iterator value="result">
<tr>
<td><s:property value="key"/></td>
<td><s:property value="value"/></td>
</tr>
</s:iterator>
</table>
</body>
</html>大功告成,让我们赶紧在浏览器中测试一下代码吧!
本文详细介绍了如何利用Struts2框架构建一个简单的图书查询系统,包括创建web.xml配置文件、设计数据处理类BookDAO、编写QueryAction类、配置struts.xml文件、编写表现层JSP代码等步骤。
1万+

被折叠的 条评论
为什么被折叠?



