Day47 Java框架 Struts框架(二)

一.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"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值