zoukankan      html  css  js  c++  java
  • Struts2知识点小结(二)

    一、结果视图的配置
        <result name="success">/success.jsp</result>
        
        1、局部结果视图
            在action标签内部配置  局部结果视图只能当前Action使用
            
            <action name="quick_*" class="com.itheima.action.QuickAction" method="{1}">
                <!-- 结果视图的属性:
                        name: 逻辑试图名  与Action的方法分返回值进行匹配
                        type: 视图的跳转类型
                            dispatcher(默认值):Action转发视图(jsp)
                            redirect:Action重定向视图(jsp)
                            redirectAction:Action重定向Action
                 -->
                <result name="success" type="dispatcher">/success.jsp</result>
                <result name="error">/error.jsp</result>
            </action>
        
        2、全局结果视图
        
            <!-- 全局结果视图:
                    当前包下的所有的action都可以共享的视图资源 称之为全局结果视图
             -->
            <global-results>
                <result name="success" type="dispatcher">/success.jsp</result>
                <result name="login">/login.jsp</result>
                <result name="error">/error.jsp</result>
                <result name="index">/index.jsp</result>
            </global-results>
        

    二、在struts2中获得Servlet相关API的方式
        获得在javaweb阶段常用的对象 request、response、session、servletContext...
        
        1、通过ServletActionContext获取
            ServletActionContext:与Servlet相关的Action的上下文对象,该对象相当于一个工具类,维护Servlet相关对象的引用
            
            //获得Servlet相关API对象
            HttpServletRequest request = ServletActionContext.getRequest();
            HttpServletResponse response = ServletActionContext.getResponse();
            HttpSession session = request.getSession();
            ServletContext servletContext = ServletActionContext.getServletContext();
            
        2、使用接口注入方式
            public class ServletAPIAction2 extends ActionSupport
                    implements ServletRequestAware,ServletResponseAware,ServletContextAware{
                
                public String show(){
                    //获得request
                    System.out.println(request);
                    return NONE;
                }
                    
                private HttpServletRequest request;
                @Override
                public void setServletRequest(HttpServletRequest request) {
                    this.request = request;
                }
            }
        
        
    三、参数封装
        1、属性驱动
            通过Action属性进行参数封装的方式 称其为属性驱动

     1 public class Param1Action extends ActionSupport {
     2     //封装单个属性只需要一共set方法即可
     3     private String username;
     4     public void setUsername(String username) {
     5         this.username = username;
     6     }
     7     
     8     //封装实体  需要同时提供get/set方法
     9     private Person person;
    10     public Person getPerson() {
    11         return person;
    12     }
    13     public void setPerson(Person person) {
    14         this.person = person;
    15     }
    16 
    17     private User user;
    18     public User getUser() {
    19         return user;
    20     }
    21     public void setUser(User user) {
    22         this.user = user;
    23     }
    24     
    25     
    26     private List<String> strList;
    27     private List<User> userList;
    28     private Map<String,User> userMap;
    29     
    30     public Map<String, User> getUserMap() {
    31         return userMap;
    32     }
    33     public void setUserMap(Map<String, User> userMap) {
    34         this.userMap = userMap;
    35     }
    36     public List<User> getUserList() {
    37         return userList;
    38     }
    39     public void setUserList(List<User> userList) {
    40         this.userList = userList;
    41     }
    42     public List<String> getStrList() {
    43         return strList;
    44     }
    45     public void setStrList(List<String> strList) {
    46         this.strList = strList;
    47     }
    48     public String show(){
    49         //方式一
    50         //String username = (String)ServletActionContext.getRequest().getParameter("username");
    51         //方式二    单个属性的封装,不用手动创建对象
    52         //System.out.println(username);
    53         //实体封装 
    54         /*System.out.println(user);
    55         System.out.println(person);*/
    56         
    57         System.out.println(strList);
    58         System.out.println(userList);
    59         
    60         System.out.println(userMap);
    61         return NONE;
    62     } 
    63 }



        2、模型驱动
            在Action中显示的指定模型对象是谁,那么在封装数据时直接写模型对象的属性名就可以
            步骤:
                1、Action实现ModelDriven<指定实体类型>
                2、实现接口的getModel方法(model对象需要手动实例化)

    public class Param2Action extends ActionSupport implements ModelDriven<User> {
        //模型驱动
        //封装实体
        public String show() {
            System.out.println(user);
            return NONE;
        }
        User user = new User();
        public User getModel() {
            // TODO Auto-generated method stub
            return user;
        }
    }


        比较模型驱动与属性驱动区别?
            属性驱动:提供set/get方法,实体对象不需要手动创建,同时封装多个实体
            模型驱动:实现ModelDriven接口,模型对象必须要手动创建,不能同时封装多个实体

  • 相关阅读:
    HBase 文件读写过程描述
    Kafka 部署指南-好久没有更新博客了
    《Python高性能编程》——列表、元组、集合、字典特性及创建过程
    Ansible常用功能
    vim内替换文件内容
    线程队列-queue
    Python多进程
    python多线程知识-实用实例
    夜间模式的实现
    本地通知的实现
  • 原文地址:https://www.cnblogs.com/itworkerlittlewrite/p/9442184.html
Copyright © 2011-2022 走看看