一、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
- 打开浏览器输入 http://struts.apache.org/
- 点击超链接 “Struts 2.3.x”, 打开下载页面
- 点击 “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>
- 使用浏览器访问index.jsp,点击超链接,
- 进入input.jsp,输入一些内容:
- 展示页面details.jsp :
我们发现,
- 我们不需要显式的定义Filter,而使用的是struts2的配置文件。
- details.jsp里显示对象的属性简单了,原来的
${requestScope.product.productName}
变成了${productName}
我们可以总结一下步骤,
- 由
product- input .action
转到/WEB-INF/pages/input.jsp
在struts2中配置一个action就可以了。<action name="product-input"> <result>/WEB-INF/pages/input.jsp</result> </action>
- 由
input.jsp
页面的action:product-save.action
到Product#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>
- 在
Product
中定义一个save()
方法,且返回值为"details"
四、helloworld详解
-
关于package元素。
-
关于action元素。
-
关于result元素
END.
来源:CSDN
作者:veejaLiu
链接:https://blog.csdn.net/u014565127/article/details/104736425