• Struts2学习第二课 Struts2概述


    Struts2是一个用来开发MVC应用程序的框架,它提供了Web应用程序开发过程中的一些常见问题飞解决方案:

    -对来自用户的输入数据进行合法性验证

    -统一的布局

    -可扩展性

    -国际化和本地化

    -支持Ajax

    -表单的重复提交

    -文件的上传下载

    Struts2和Struts1相比有哪些优势?

    在体系结构方面更优秀

    -类更少,更高效:在Struts2中无需使用"ActionForm"来封装请求参数

    -扩展更容易:Struts2通过拦截器完成了框架的大部分工作,在Struts2中插入一个拦截器对象相当简便易行。

    更容易测试:

    即使不用浏览器也可以对基于Struts2的应用进行测试。

    看代码:

    package logan.struts.study;
    
    public class Product {
        
        private Integer productId;
        private String productName;
        private String productDesc;
        
        private double productPrice;
    
        public Integer getProductId() {
            return productId;
        }
    
        public void setProductId(Integer productId) {
            this.productId = productId;
        }
    
        public String getProductName() {
            return productName;
        }
    
        public void setProductName(String productName) {
            this.productName = productName;
        }
    
        public String getProductDesc() {
            return productDesc;
        }
    
        public void setProductDesc(String productDesc) {
            this.productDesc = productDesc;
        }
    
        public double getProductPrice() {
            return productPrice;
        }
    
        public void setProductPrice(double productPrice) {
            this.productPrice = productPrice;
        }
    
        @Override
        public String toString() {
            return "Product [productId=" + productId + ", productName=" + productName + ", productDesc=" + productDesc
                    + ", productPrice=" + productPrice + "]";
        }
    }

    struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <!-- package:包,struts2使用package来组织模块
            name属性:必须,用于其他包引用当前包
            extends: 当前包继承哪个包,继承的,即可以继承其中的所有的配置,通常情况下继承struts-default-->
        <package name="helloWorld" extends="struts-default">
            <!-- 配置action:一个struts2的请求就是一个action -->
            <action name="product-input">
                <result>/WEB-INF/pages/input.jsp</result>
            </action>
            
        </package>
        
    </struts>

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>Struts2-2</display-name>
      
      <filter>
          <filter-name>struts2</filter-name>
          <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      
      <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      <welcome-file-list>
          <welcome-file>index.html</welcome-file>
      </welcome-file-list>
    </web-app>

    input.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!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=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <form action="product-save.action" method="post">
        ProductName:<input type="text" name="productName">
        <br><br>
        ProductDesc:<input type="text" name="productDesc">
        <br><br>
        ProductPrice:<input type="text" name="productPrice">
        <br><br>
        <input type="submit" value="Submit">
        <br><br>
        </form>
    
    </body>
    </html>

    details.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!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=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
            productId:${productId }
            <br><br>
            productName:${productName }
            <br><br>
            productDesc:${productDesc }
            <br><br>
            productPrice:${productPrice }
            <br><br>
    </body>
    </html>

    index.jsp

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!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=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
        <a href="product-input.action">Product Input</a>
    </body>
    </html>

    在浏览器里面输入http://localhost:8080/Struts2-2/product-input.action

    可以看到:

    稍微改改代码:

    package logan.struts.study;
    
    public class Product {
        
        private Integer productId;
        private String productName;
        private String productDesc;
        
        private double productPrice;
    
        public Integer getProductId() {
            return productId;
        }
    
        public void setProductId(Integer productId) {
            this.productId = productId;
        }
    
        public String getProductName() {
            return productName;
        }
    
        public void setProductName(String productName) {
            this.productName = productName;
        }
    
        public String getProductDesc() {
            return productDesc;
        }
    
        public void setProductDesc(String productDesc) {
            this.productDesc = productDesc;
        }
    
        public double getProductPrice() {
            return productPrice;
        }
    
        public void setProductPrice(double productPrice) {
            this.productPrice = productPrice;
        }
    
        @Override
        public String toString() {
            return "Product [productId=" + productId + ", productName=" + productName + ", productDesc=" + productDesc
                    + ", productPrice=" + productPrice + "]";
        }
        
        public String save(){
            System.out.println("save: " + this);
            return "details";
        }
    }

    struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <!-- package:包,struts2使用package来组织模块
            name属性:必须,用于其他包引用当前包
            extends: 当前包继承哪个包,继承的,即可以继承其中的所有的配置,通常情况下继承struts-default-->
        <package name="helloWorld" extends="struts-default">
            <!-- 配置action:一个struts2的请求就是一个action
                name:对应一个Struts2的请求的名字,不包含扩展名 -->
            <action name="product-input">
                <result>/WEB-INF/pages/input.jsp</result>
            </action>
            
            <action name="product-save" class="logan.struts.study.Product" method="save">
                <result name="details">/WEB-INF/pages/details.jsp</result>
            </action>
            
        </package>
        
    </struts>

    提交表单时:

    可以看到实现了上次课的功能

    这里需要搭建Struts2的开发环境

    不需要显示的定义Filter,而是使用struts2的配置文件

    details.jsp比前面变得更简单

    ${requestScope.product.productName} -> ${productName}

    步骤:

    I.由product-input.action 转到/WEB_INF/pages/input.jsp

    在struts2中配置一个action

    <action name="product-input">
        <result>/WEB-INF/pages/input.jsp</result>
    </action>

    II.由input.jsp页面的action:product-save.action到Product's save,再转到/WEB_INF/pages/details.jsp

    <action name="product-save" class="logan.struts.study.Product" method="save">
        <result name="details">/WEB-INF/pages/details.jsp</result>
    </action>

    在Product中定义一个方法,而且返回值为details

  • 相关阅读:
    [Leetcode] Set Matrix Zeroes
    [Leetcode] Longest Valid Parentheses
    [Leetcode] Interleaving String
    [Leetcode] Surrounded Regions
    [Leetcode] Candy
    用Delphi获取当前系统时间
    Delphi窗体中禁用最大化按钮
    DELPHI关于文件的操作
    Delphi 2010初体验,是时候抛弃Delphi 7了
    双通道内存有什么优点和缺点?
  • 原文地址:https://www.cnblogs.com/LoganChen/p/6940006.html
Copyright © 2020-2023  润新知