美文网首页
JavaWeb编程实战宝典(5)___ 第5章 编写Struts

JavaWeb编程实战宝典(5)___ 第5章 编写Struts

作者: 岁月静好浅笑安然 | 来源:发表于2019-11-01 11:35 被阅读0次

    第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

    查询页面 显示页面

    相关文章

      网友评论

          本文标题:JavaWeb编程实战宝典(5)___ 第5章 编写Struts

          本文链接:https://www.haomeiwen.com/subject/lvxfbctx.html