欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Struts2知识点小结(二)

程序员文章站 2022-05-18 22:57:58
一、结果视图的配置 /success.jsp 1、局部结果视图 在action标签内部配置 局部结果视图只能当前Action使用

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