第5章 编写Struts2第一个程序
5.1 Struts2的MVC模式
Struts2中 的控制器主要有如下4个功能
- 简单验证
- 复制验证
- 商业逻辑
- 流控制
Struts2框架结构可分为以下4部分 - JSP/Struts2标签(视图层 V层 )
- ActionSupport的子类(控制层 C层 )
- 处理业务逻辑和数据逻辑的JavaBean(模型层 M层 )
- 用于保存Struts2配置的struts.xml文件
5.2 Struts2的结构体系
5.2.1 工作流程
工作流程 如下图
工作流程图
5.2.2 配置文件
一般将struts.xml放在src根目录
实例代码
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 声明包 -->
<package name="myPackage" extends="struts-default">
<!-- 定义action -->
<action name="first">
<!-- 定义处理成功后的映射页面 -->
<result>/first.jsp</result>
</action>
</package>
</struts>
5.2.3 控制器
Struts2只有包含一个execute方法就可以,实例代码
public class RegisterAction{
private Sting username;
private String password;
private String emai;
...省略setter和getter方法
public String execute() throws Exception{
//操作逻辑
}
}
5.3 Struts2实例,图书查询系统
-
1.导包
所需的包 - 2.配置web.xml
<!-- Struts2过滤器 -->
<filter>
<!-- 过滤器名称 -->
<filter-name>struts2</filter-name>
<!-- 过滤器类 -->
<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>
- 3.编写数据处理类BookDao.java,此处只是模拟数据
public class BookDao {
private static Map<String, Integer> books=new LinkedHashMap<>();
static{
books.put("书一", 79);
books.put("书二", 69);
books.put("书三", 59);
books.put("书四", 49);
books.put("书五", 89);
}
public Map<String,Integer> getBooks(String name){
Map<String, Integer> books=new LinkedHashMap<>();
for(Entry<String, Integer> entry:BookDao.books.entrySet()){
if(entry.getKey().toLowerCase().contains(name.toLowerCase())){
books.put(entry.getKey(), entry.getValue());
}
}
return books;
}
}
- 4.编写和配置Action类
//推荐继承ActionSupport类,这样execute方法可以使用myeclipse工具自动生成
public class QueryAction extends ActionSupport {
//用于保存请求参数的name属性
private String name;
//用于保存转入页面所需要的数据的result属性
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;
}
@Override
public String execute() throws Exception {
try {
BookDao bookDao=new BookDao();
Map<String, Integer> books = bookDao.getBooks(name);
setResult(books);
return "success1";
} catch (Exception e) {
return "error";
}
}
}
在src根目录下配置,struts1.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 声明包 -->
<package name="myPackge" extends="struts-default">
<!-- 配置Action -->
<action name="query" class="com.hwp.QueryAction">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
- 5.编写显示查询结果的JSP页面
方法一,java代码
<table border="1">
<tr>
<td>书名</td>
<td>价格</td>
</tr>
<%
Map<String ,Integer> books=
(Map<String ,Integer>)request.getAttribute("result");
for(Map.Entry<String ,Integer> entry:books.entrySet())
{
%>
<tr>
<td><%=entry.getKey() %></td>
<td><%=entry.getValue() %></td>
</tr>
<% }
%>
</table>
方法二,JSTL(不推荐使用,相关的代码无法自动提示)
<%-- 引用JSTL核心库 --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
... 省略相关代码
<table border="1">
<tr>
<td>书名</td>
<td>价格</td>
</tr>
<c:forEach var="entry" items="${result }">
<tr>
<td>${entry.key}</td>
<td>${entry.value}</td>
<td></td>
</tr>
</c:forEach>
</table>
方法三,Struts2标签(推荐使用)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 引用Struts2标签 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table border="1">
<tr>
<td>书名</td>
<td>价格</td>
</tr>
<!-- 使用iterator迭代标签获取查询 -->
<s:iterator value="result">
<tr>
<!-- 迭代到的key显示到第一列单元格 -->
<td><s:property value="key"/></td>
<!-- 迭代到的value显示到第二列单元格 -->
<td><s:property value="value"/></td>
</tr>
</s:iterator>
</table>
</body>
</html>
- 6.编写输入查询信息的JSP页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 引用 struts2标签 -->
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查询图书信息</title>
</head>
<body>
<!-- struts2的form标签,query为QueryAction类的访问路径 -->
<s:form action="query">
<!-- name属性值必须为name -->
<s:textarea label="书名" name="name"/>
<!-- struts2的提交按钮 -->
<s:submit value="提交"/>
</s:form>
</body>
</html>
部署运行后,输入如下地址
查询页面 显示页面
网友评论