Day47 Java框架 Struts框架(二)

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

一.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"
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 在信息技术领域,特别是软件编程行业,微软公司推出的集成开发环境(IDE)Visual Studio,凭借其卓越的功能和广泛的适用范围,成为了众多程序员的常用工具。不过,在实际操作期间,用户可能会遭遇各种挑战,其中一种较为普遍的挑战是“Visual Studio遭遇了异常情况,这或许与某个附加组件有关”。本文将详细研究这一现象的成因、潜在后果以及最终的应对措施。 ### 原因剖析 Visual Studio通过支持多种插件和附加组件来扩展其功能,这些组件通常由第三方开发者设计,旨在为用户提供更多个性化和专业化的工具。然而,这些插件的质量良莠不齐,部分可能未经过充分的测试或与特定版本的Visual Studio存在兼容性难题,从而在执行时引发异常。异常的出现可能源于以下几个因素: 1. **代码缺陷**:若附加组件中的代码存在逻辑问题或资源管理不当,就可能导致运行时异常。 2. **资源竞争**:多个插件同时占用相同的资源(例如内存、文件句柄等),可能会产生资源冲突,进而触发异常。 3. **依赖不匹配**:插件可能需要特定版本的库或框架,如果系统中安装的版本不一致,也可能导致异常。 4. **安全隐患**:部分插件可能存在安全漏洞,一旦被恶意利用,可能会导致更严重的问题,包括但不限于异常崩溃。 ### 后果分析 当Visual Studio遇到由附加组件引发的异常时,不仅会中断当前的工作进程,降低开发效能,还可能带来以下潜在风险: 1. **数据遗失**:若异常发生在保存操作之前,可能会导致未保存的工作内容遗失。 2. **稳定性减弱**:频繁的异常会导致Visual Stud...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值