JavaWeb编程实战宝典(5)___ 第5章 编写Struts2第一个程序

第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>

部署运行后,输入如下地址

http://localhost:8080/Struts2_demo/querybooks.jsp

查询页面
显示页面
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容