(一)Struts2入门——HelloWorld

▼魔方 西西 提交于 2020-03-08 21:38:37

一、Struts2 概述

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

  • 对来自用户的输入数据进行合法性验证
  • 统一的布局
  • 可扩展性
  • 国际化和本地化
  • 支持 Ajax
  • 表单的重复提交
  • 文件的上传下载
  • ……

Struts2 VS Struts1

在体系结构方面更优秀:

  • 类更少, 更高效: 在 Struts2 中无需使用 “ActionForm” 来封装请求参数.
  • 扩展更容易: Struts2 通过拦截器完成了框架的大部分工作. 在 Struts2 中插入一个拦截器对象相当简便易行.

更容易测试:

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

从 Struts1 升级到 Struts2

Struts2 从本质上讲已不是从 Struts1 扩展而来的, 说它是一个换了品牌标签的 WebWork 更合适

从 Struts1 升级到 Struts2:

  • Struts1 里使用 ActionServlet 作为控制器; Struts2 使用了一个过滤器作为控制器
  • Struts1 中每个 HTML 表单都对应一个 ActionForm 实例. Struts2 中, HTML 表单将被直接映射到一个 POJO.
  • Struts1 的验证逻辑编写在 ActionForm 中; Struts2 中的验证逻辑编写在 Action 中.
  • Struts1 中, Action 类必须继承 org.apache.struts.action.Action 类; Struts2 中任何一个 POJO 都可以是一个 Action 类.
  • Struts2 在页面里使用 OGNL 来显示各种对象模型, 可以不再使用 EL 和 JSTL

下载 Struts2

  1. 打开浏览器输入 http://struts.apache.org/
  2. 点击超链接 “Struts 2.3.x”, 打开下载页面
  3. 点击 “struts-2.3.x-all.zip” 下载

二、搭建Struts环境

1. 复制复制,疯狂的复制!

  • 加入 jar 包: 复制 struts\apps\struts2-blank\WEB-INF\lib 下的所有 jar 包到当前 web 应用的 lib 目录下.
  • 在 web.xml 文件中配置 struts2: 复制 struts\apps\struts2-blank1\WEB-INF\web.xml 文件中的过滤器的配置到当前 web 应用的 web.xml 文件中
  • 在当前 web 应用的 classpath 下添加 struts2 的配置文件 struts.xml: 复制 struts1\apps\struts2-blank\WEB-INF\classes 下的 struts.xml 文件到当前 web 应用的 src 目录下.

2. 添加DTD约束

这样,我们struts2环境搭建完毕后,是没有代码提示的,我们要添加DTD约束。

  • 将struts.xml文件中的这一字符串复制下来:
    在这里插入图片描述
  • 打开设置
    在这里插入图片描述
  • 选择相应的文件
    在这里插入图片描述

不过,在MyEclipse中都是自动集成的,不需要这样一步设置。

三、struts2——helloworld

Product类:

package com.veeja.stucts2.helloworld;

public class Product {
	private Integer productId;
	private String productName;
	private String productDesc;
	private double productPrice;

	@Override
	public String toString() {
		return "Product [productId=" + productId + ", productName="
				+ productName + ", productDesc=" + productDesc
				+ ", productPrice=" + 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;
	}

	public String save(){
		System.out.println("save:"+this);
		return "details";
	}
}

index.jsp:

<body>
	<a href="<c:url value='/product-input.action'/>">product input</a>
</body>

input.jsp:

<body>
	<form action="<c:url value='/product-save.action'/>" method="post">
		productName:<input type="text" name="productName" />
		<br>
		productDesc:<input type="text" name="productDesc" />
		<br>
		productPrice:<input type="text" name="productPrice" />
		<br>
		<input type="submit" value="submit" />
	</form>
</body>

detais.jsp:

<body>
	<h1>Product</h1>
	<br> productId:${productId}
	<br> productName:${productName}
	<br> productDesc:${productDesc}
	<br> productPrice:${productPrice}
</body>

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请求的名字(或是一个servletPath,但是去除/和扩展名),不包括扩展名
			result:结果。
		 -->
		<action name="product-input">
			<result>/WEB-INF/pages/input.jsp</result>
		</action>
		
		<action name="product-save" class="com.veeja.stucts2.helloworld.Product"
			method="save">
			<result name="details">/WEB-INF/pages/details.jsp</result>
		</action>
	</package>
</struts>
  1. 使用浏览器访问index.jsp,点击超链接,
    在这里插入图片描述
  2. 进入input.jsp,输入一些内容:
    在这里插入图片描述
  3. 展示页面details.jsp :
    在这里插入图片描述

我们发现,

  • 我们不需要显式的定义Filter,而使用的是struts2的配置文件。
  • details.jsp里显示对象的属性简单了,原来的${requestScope.product.productName}变成了${productName}

我们可以总结一下步骤,

  1. product- input .action转到/WEB-INF/pages/input.jsp
    在struts2中配置一个action就可以了。
    <action name="product-input">
    	<result>/WEB-INF/pages/input.jsp</result>
    </action>
    
  2. input.jsp页面的action:product-save.actionProduct#save(),再到/WEB-INF/pages/details.jsp
    <action name="product-save" class="com.veeja.stucts2.helloworld.Product" method="save">
    	<result name="details">/WEB-INF/pages/details.jsp</result>
    </action>
    
  3. Product中定义一个save()方法,且返回值为"details"

四、helloworld详解

  • 关于package元素。
    在这里插入图片描述

  • 关于action元素。
    在这里插入图片描述

  • 关于result元素
    在这里插入图片描述


END.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!