Struts2 概述

  Struts2 是一个用来开发 MVC 应用程序的框架. 它提供了 Web 应用程序开发过程中的一些常见问题的解决方案: 对来自用户的输入数据进行合法性验证; 统一的布局; 可扩展性; 国际化;本地化; 支持 Ajax; 表单的重复提交; 文件的上传下载; …..

下载 Struts2

  打开浏览器输入 http://struts.apache.org/         点击 “struts-2.3.x-all.zip” 下载.

Struts2 的 Hello World

搭建 Struts2 的环境:

  加入 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 目录下.

添加 DTD 约束

  struts-2.3.4-all\struts-2.3.4\src\core\src\main\resources

struts.xml 文件示例:

<struts><!--  package: 包. struts2 使用 package 来组织模块. name 属性: 必须. 用于其它的包应用当前包. extends: 当前包继承哪个包, 继承的, 即可以继承其中的所有的配置. 通常情况下继承 struts-defaultstruts-default 这个包在 struts-default.xml 文件中定义.namespace 可选, 如果它没有给出, 则以 / 为默认值. 若 namespace 有一个非默认值, 则要想调用这个包里的Action, 就必须把这个属性所定义的命名空间添加到有关的 URI 字符串里http://localhost:8080/contextPath/namespace/actionName.action--><package name="helloWorld" extends="struts-default">        <!-- 配置一个 action: 一个 struts2 的请求就是一个 action name: 对应一个 struts2 的请求的名字(或对一个 servletPath, 但去除 / 和扩展名), 不包含扩展名class 的默认值为: com.opensymphony.xwork2.ActionSupportmethod 的默认值为: executeresult: 结果. --><action name="product-input" class="com.opensymphony.xwork2.ActionSupport"method="execute"><!--  result: 结果. 表示 action 方法执行后可能返回的一个结果. 所以一个 action 节点可能会有多个 result 子节点.多个 result 子节点使用 name 来区分name: 标识一个 result. 和 action 方法的返回值对应. 默认值为 successtype: 表示结果的类型. 默认值为 dispatcher(转发到结果.)--><result name="success" type="dispatcher">/WEB-INF/pages/input.jsp</result></action><action name="product-save" class="com.atguigu.struts2.helloworld.Product"method="save"><result name="details">/WEB-INF/pages/details.jsp</result>    </action></package>
</struts>

View Code

action VS Action 类

1). action: 代表一个  Struts2 的请求.

2). Action 类: 能够处理 Struts2 请求的类.

  > 属性的名字必须遵守与 JavaBeans 属性名相同的命名规则. 属性的类型可以是任意类型. 从字符串到非字符串(基本数据库类型)之间的数据转换可以自动发生

  > 必须有一个不带参的构造器: 通过反射创建实例

  > 至少有一个供 struts 在执行这个 action 时调用的方法

  > 同一个 Action 类可以包含多个 action 方法.

  > Struts2 会为每一个 HTTP 请求创建一个新的 Action 实例, 即 Action 不是单例的, 是线程安全的.

访问 web 资源

在 Action 中, 可以通过以下方式访问 web 的 HttpSession, HttpServletRequest, HttpServletResponse  等资源

  I. 和 Servlet API 解耦的方式: 只能访问有限的 Servlet API 对象, 且只能访问其有限的方法(读取请求参数, 读写域对象的属性, 使 session 失效...).

    > 使用 ActionContext

 1         //0. 获取 ActionContext 对象
 2         //ActionContext 是 Action 的上下文对象. 可以从中获取到当往 Action 需要的一切信息
 3         ActionContext actionContext = ActionContext.getContext();
 4
 5         //1. 获取 application 对应的 Map, 并向其中添加一个属性
 6         //通过调用 ActionContext 对象的 getApplication() 方法来获取 application 对象的 Map 对象
 7         Map<String, Object> applicationMap = actionContext.getApplication();
 8         //设置属性
 9         applicationMap.put("applicationKey", "applicationValue");
10
11         //获取属性
12         Object date = applicationMap.get("date");
13         System.out.println("date: " + date);
14
15         //2. session
16         Map<String, Object> sessionMap = actionContext.getSession();
17
18         //3. request*
19         //ActionContext 中并没有提供 getRequest 方法来获取 request 对应的 Map
20         //需要手工调用 get() 方法, 传入 request 字符串来获取.
21         Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request");
22         requestMap.put("requestKey", "requestValue");
23
24         //4. 获取请求参数对应的 Map, 并获取指定的参数值.
25         //键: 请求参数的名字, 值: 请求参数的值对应的字符串数组
26         //注意: 1. getParameters 的返回值为在 Map<String, Object>, 而不是 Map<String, String[]>
27         //     2. parameters 这个 Map 只能读, 不能写入数据, 如果写入, 但不出错, 但也不起作用!
28         Map<String, Object> parameters = actionContext.getParameters();
29         System.out.println(((String[])parameters.get("name"))[0]);

View Code

    > 实现 XxxAware 接口。Struts2 框架在运行时向 Action 实例注入 parameters, request, session 和 application 对应的 Map 对象:

 1 public class TestAwareAction implements ApplicationAware, SessionAware, RequestAware,
 2     ParameterAware{
 3
 4     public String execute(){
 5         //1. 向 application 中加入一个属性: applicationKey2 - applicationValue2
 6         application.put("applicationKey2", "applicationValue2");
 7         //2. 从 application 中读取一个属性 date, 并打印.
 8         System.out.println(application.get("date"));
 9         return "success";
10     }
11
12     private Map<String, Object> application;
13
14     @Override
15     public void setApplication(Map<String, Object> application) {
16         this.application = application;
17     }
18
19     @Override
20     public void setParameters(Map<String, String[]> parameters) {
21     }
22
23     @Override
24     public void setRequest(Map<String, Object> request) {
25     }
26
27     @Override
28     public void setSession(Map<String, Object> session) {
29     }
30 }

View Code

  > 选用的建议: 若一个 Action 类中有多个 action 方法, 且多个方法都需要使用域对象的 Map 或 parameters, 则建议使用Aware 接口的方式

  > session 对应的 Map 实际上是 SessionMap 类型的! 强转后若调用其 invalidate() 方法, 可以使其 session 失效!

  II. 和 Servlet API 耦合的方式: 可以访问更多的 Servlet API 对象, 且可以调用其原生的方法.

    > 使用 ServletActionContext

    > 实现 ServletXxxAware 接口.

      通过实现 ServletRequestAware, ServletContextAware 等接口的方式

ActionSupport

  1). ActionSupport 是默认的 Action 类: 若某个 action 节点没有配置 class 属性, 则 ActionSupport 即为待执行的 Action 类. 而 execute 方法即为要默认执行的 action 方法

  2). 在手工完成字段验证, 显示错误消息, 国际化等情况下, 推荐继承 ActionSupport.

关于 Struts2 请求的扩展名问题

  1). org.apache.struts2 包下的 default.properties 中配置了 Struts2 应用个的一些常量

  2). struts.action.extension 定义了当前 Struts2 应用可以接受的请求的扩展名.

  3). 可以在 struts.xml 文件中以常量配置的方式修改 default.properties 所配置的常量.

    <constant name="struts.action.extension" value="action,do,"></constant>

转载于:https://www.cnblogs.com/linyueshan/p/5677331.html

Hello Struts2相关推荐

  1. struts2 与 sping 整合 控制器中 service注入的问题

    以个人见解认为struts1 与spring整合的时候按照习惯,我们会把 action 控制器直接配置到sping中去: eg : 这里以使用元注解方式实现Service注入进行讲解: 控制器关键代码 ...

  2. Spring整合Struts2

    ①导入Struts2 jar包 ②在web.xml文件中创建过滤器 <?xml version="1.0" encoding="UTF-8"?> & ...

  3. Struts2标签库

    这是个音乐播放列表 1.queryMusic.jsp <%@ page language="java" import="java.util.*" page ...

  4. Struts2中Action接收参数

    Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属 ...

  5. struts2笔记01-环境搭建

    1.官网下载struts2 struts-2.3.28-all.zip,这个包可谓应有尽有,以后全靠它了! 2.jar包怎么选?       (1)struts-2.3.28-all\struts-2 ...

  6. 使用Struts2标签遍历集合

    遍历Map<String,Object> 遍历Map<Stirng,List<Student>> 遍历List<Map<String,Student&g ...

  7. 关于SpringMVC和Struts2的区别

    1.    与struts2不同 1.  springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过虑器. 2. springmvc是基于方法开发,传递参数是通 ...

  8. java struts2值栈ognl_Struts2 (三) — OGNL与值栈

    一.OGNL表达式 1.概述 1.1什么是OGNL ​ OGNL是Object-Graph Navigation Language的缩写,俗称对象图导航语言. 它是一种功能强大的表达式语言,通过它简单 ...

  9. 基于Struts2框架的名片管理系统

    目录 1.系统设计 2.数据库设计 3.系统管理 4.用户管理 5.名片管理 本篇博文将分享一款基于Struts2框架的名片管理系统,JSP引擎为Tomcat9.0,数据库采用的是MySQL5.5,集 ...

  10. Struts2 2.5版本新配置filter-class

    在web.xml 默认代码: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns=&q ...

最新文章

  1. python中用break结束死循环
  2. 你一定不能错过,Java视频全套
  3. 【LeetCode从零单排】No88.Merge Sorted Array
  4. 如何查看、备份电脑隐藏的恢复分区
  5. Python Pytest装饰器@pytest.mark.parametrize用例数据驱动(三)
  6. Mybatis-generator的使用
  7. Atitit ati teck trend技术趋势资料包 C:\onedriver\OneDrive\Documents\0 it impttech topic\ati teck trend技术趋
  8. tomcat配置url跳转_Tomcat安装、配置、优化及负载均衡详解
  9. 一文详解光场在三维人脸建模中的应用
  10. 适配器模式(Adapter模式)
  11. Win10x64安装Dolby
  12. 编程珠玑第一章习题解答
  13. 菜鸟的Vue基础快速入门
  14. 洞见(1): zig 编程语言
  15. Mybatis-Plus eq、ne、gt、lt、ge、le
  16. www.050604.pw ub.php,BOL_050604_M_010
  17. 速腾聚创16线激光雷达rslidar-16的ros驱动安装与rviz点云显示
  18. 想报考pmp(pmp报考费),一定要先经过培训机构吗?
  19. 一文搞懂Spring,堪称Spring源码终结者
  20. 图:国行HTC 8X修改市场区域

热门文章

  1. 文本分类(下) | 卷积神经网络(CNN)在文本分类上的应用
  2. 拼图游戏和它的AI算法
  3. 疯狂为《英伟达深度学习学院半日免费初级课程》打Call
  4. 自动驾驶横向运动学分析和非线性问题处理方法
  5. 中nextint函数_Kotlin中的作用域方法(Scope Function)
  6. 一般项目的并发量有多少_汽车保养一般包含哪些项目、保养周期是多少
  7. Centos7下Confluence5.6.6安装
  8. 埃夫特机器人示教器keba_埃夫特下一代智能工业机器人研发及产业化项目奠基...
  9. python安装要什么配置_Python的安装和详细配置
  10. bug的一生:如何体现测试专业度?