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

原文地址:https://www.cnblogs.com/LoganChen/p/6940006.html