Struts2知识点小结(二)

2018-08-10 11:14:08来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一、结果视图的配置
    <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接口,模型对象必须要手动创建,不能同时封装多个实体

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:JDK1.8 Stream之toMap和groupingBy全参数的使用

下一篇:Java实现中序表达式