Day47 Java框架 Struts框架(二)

本文深入探讨Struts2框架的多种参数接收与数据处理方式,包括利用ActionContext对象及Servlet API进行参数接收,向不同域对象存储数据的方法,以及如何配置全局与局部结果页面。此外,还介绍了Struts2中的数据封装机制,如属性驱动和模型驱动,并讨论了复杂类型数据的封装技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.Struts2的Servlet的API的访问

  1. 完全解耦合的方式
    1. 编写jsp, 一个提交参数form表单
    2. 编写Action

              //一.接收参数:
              //利用Struts2中的对象ActionContext对象
              ActionContext context = ActionContext.getContext();
              //调用ActionContext中的方法
              //类似于request.getParameterMap();
              Map<String,Object> map = context.getParameters();
              for (String key : map.keySet()) {
                  String[] values = (String[]) map.get(key);
                  System.out.println(key+"  "+Arrays.toString(values));
              }
              //二.向域对象中存入数据
              context.put("reqName", "reqValue");//相当于调用了request.setAttribute();
              context.getSession().put("sessName", "sessValue");//相当于session.setAttribute();
              context.getApplication().put("appName", "appValue");//相当于application.setAttribute();

      这种方式只能获得代表request,session,application,的数据的Map集合,不能操作这些对象的本身的方法

  2. 使用Servlet的API的原生方式
    1. 编写JSP
    2. 编写Action
      		//一.接收数据
      		//直接获得request对象,通过ServletActionContext\
      		HttpServletRequest request = ServletActionContext.getRequest();
      		Map<String, String[]> map = request.getParameterMap();
      		for (String key: map.keySet()) {
      			String[] values = map.get(key);
      			System.out.println(key+"  "+Arrays.toString(values));
      		}
      		
      		//二.向域对象中保存数据
      		//向request中保存数据
      		request.setAttribute("reqName", "reqValue");
      		//向session中保存数据
      		request.getSession().setAttribute("sessName", "sessValue");
      		//向application中保存数据
      		ServletActionContext.getServletContext().setAttribute("appName", "appValue");

      这种方式可以操作域对象的数据,同时也可以获得对象的方法

  3. 接口注入的方式
    1. 编写jsp
    2. 编写Action
    3. Servlet是单例的,多个程序访问同一个Servlet只会创建一个Servlet的实例
      Action是多例的,一次请求创建一次Action的实例,不会出现线程安全问题

二.Struts2的结果页面的配置

  1. 全局结果页面
    1. 指的是,在包中配置一次,其他的在这个包中的所有的action只要返回了这个值,都可以跳转这个页面
      --  针对这个包下的所有的action的配置都有效
              <!-- 全局结果页面 -->
              <global-results>
                  <result name="success">/demo1/demo2.jsp</result>
              </global-results>
  2. 局部结果页面
    1. 指的是只能在当前的action中的配置有效
  3. result标签的配置
    1. 用于配置页面的跳转,在result标签上有两个属性
      --  name属性   : 逻辑视图的名称  默认值 :  success
      --  type属性     : 页面跳转的类型
                  dispatcher          :   默认值 , 请求转发(Action转发JSP)
                  redirect               :   重定向. (Action重定向JSP)

                  chain                  :   转发(Action转发Action)
                  redirectAction     :   重定向(Action重定向Action)
                  stream                :   Struts2中提供文件下载的功能

三.Struts2的数据的封装

  1. 属性驱动 : 提供属性set方法的方式 (不常用)  
  2. 属性驱动 : 页面中提供表达式方式  例如:action中创建了User及其get,set方法, 那么jsp页面中 name="user.username"
  3. 模型驱动 : 采用模型驱动方式  : 实现ModelDriven<User>接口,new一个User实例, 重写getModel()方法return User;
  4. 模型驱动方式是最常用的方式: 缺点是只能同时向一个对象中封装数据
    而属性驱动第二种可以向多个对象中同时封装数据

四.INPUT的逻辑视图的配置

  1. Action接口中提供了五个逻辑视图的名称
    SUCCESS  ERROR  LOGIN   INPUT   NONE

五.Struts2的复杂类型的数据封装

  1. 封装数据到List集合中:action中创建了List<User> users及其get,set方法, 那么jsp页面中 name="users[ index ].username"
  2. 封装数据到Map集合中:action中创建了Map<User> users及其get,set方法, 那么jsp页面中 name="users[ ' key ' ].username"
内容概要:本文详细探讨了基于阻尼连续可调减振器(CDC)的半主动悬架系统的控制策略。首先建立了CDC减振器的动力学模型,验证了其阻尼特性,并通过实验确认了模型的准确性。接着,搭建了1/4车辆悬架模型,分析了不同阻尼系数对悬架性能的影响。随后,引入了PID、自适应模糊PID和模糊-PID并联三种控制策略,通过仿真比较它们的性能提升效果。研究表明,模糊-PID并联控制能最优地提升悬架综合性能,在平顺性和稳定性间取得最佳平衡。此外,还深入分析了CDC减振器的特性,优化了控制策略,并进行了系统级验证。 适用人群:从事汽车工程、机械工程及相关领域的研究人员和技术人员,尤其是对车辆悬架系统和控制策略感兴趣的读者。 使用场景及目标:①适用于研究和开发基于CDC减振器的半主动悬架系统的工程师;②帮助理解不同控制策略(如PID、模糊PID、模糊-PID并联)在悬架系统中的应用及其性能差异;③为优化车辆行驶舒适性和稳定性提供理论依据和技术支持。 其他说明:本文不仅提供了详细的数学模型和仿真代码,还通过实验数据验证了模型的准确性。对于希望深入了解CDC减振器工作原理及其控制策略的读者来说,本文是一份极具价值的参考资料。同时,文中还介绍了多种控制策略的具体实现方法及其优缺点,为后续的研究和实际应用提供了有益的借鉴。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值