zoukankan      html  css  js  c++  java
  • Struts2页面配置和访问servlet API

    一、Struts2页面配置

    在struts2中页面可以分为两种,全局页面和局部页面。

    1、全局页面:

              在一个<package></package>标签内的多个action都要跳转到该页面,则该页面是全局页面。

              全局页面的配置:可以在<package></package>标签内使用<global-result></global-result>标签来配置。

              注意:该配置只有在该<package>标签内才有效。

    <struts>
            <package name="demo1" extends="struts-default" namespace="/">
                <!-- 
                    1、使用<global-results>标签来配置全局页面
                    2、该全局页面的配置只在该<package>标签内有效
                 -->
                <global-results>
                    <result name="success">/jsp/success.jsp</result>
                </global-results>
                <action name="test" class="com.jack.action.PageAction"></action>
                 <action name="test1" class="com.jack.action.PageAction"></action>
            </package>
        </struts>

    2、局部页面:   

      在一个<package></package>标签内只有一个action要跳转到该页面,则该页面为局部页面。

      局部页面直接在<action>标签内使用<result>标签配置

    <struts>
            <package name="demo1" extends="struts-default" namespace="/">
                <action name="test" class="com.jack.action.PageAction">
                       <result name="success">/jsp/success.jsp</result>
                </action>
                 <action name="test1" class="com.jack.action.PageAction">
                     <result name="success">/jsp/error.jsp</result>
                 </action>
            </package>
        </struts>

    3、注意

    当一个Action同时配置了全局页面和局部页面 ,Action只会显示局部页面。

    <struts>
            <package name="demo1" extends="struts-default" namespace="/">
                <!-- 
                    1、使用<global-results>标签来配置全局页面
                    2、该全局页面的配置只在该<package>标签内有效
                 -->
                <global-results>
                    <result name="success">/jsp/success.jsp</result>
                </global-results>
                <action name="test" class="com.jack.action.PageAction"></action>
                 <action name="test1" class="com.jack.action.PageAction">
                     <!-- 
                             该action同时配置了两个页面
                             只会相应局部页面
                      -->
                     <result name="success">/jsp/error.jsp</result>
                 </action>
            </package>
        </struts>

    4、result标签中的type属性

         在result标签内,有一个属性为type,该属性表示action到配置路径中的方式。该属性有以下的值。

         在值中要重点记住chain、dispatcher、redirect、redirectAction四个属性。

         chain和redirectAction用于Action的跳转,chain一般不用,因为存在缓存问题。

         dispatcher和redirect用于jsp页面的跳转,dispatcher为默认方式。

    属性 说明
    chain 用来处理action链的,属于转发方式,跳转的页面仍能获得上个页面的值,如request信息
    dispatcher 用来转向页面,属于转发方式,通常处理jsp,是type属性的默认值
    freemarker 用来整合FreeMarker模板结果类型
    httpheader 用来处理特殊的http行为结果类型
    redirect 重定向于一个URL,被跳转的页面中丢失传递的信息
    redirectAction 重定向到一个Action,被跳转的页面中丢失传递的信息
    stream 向浏览器发送InputStream对象,通常用于处理文件的下载,同时还可用于Ajax
    velocity 用来整合Velocity模板结果类型
    xslt 用来整合XML/XSLT结果类型
    plainText 显示原始文件内容,例如文件源代码
    postback 是的当前请求数据以表单形式提交

    二、使用Servlet API操作域对象

    1、使用ActionContext对象来操作域对象

    public class ActionContextDemo extends ActionSupport {
    
        /**
         * 使用ActionContext对象来操作域对象
         */
    
        public String execute(){
            //1、调用ActionContext对象的getContext方法的到实例
            ActionContext actionContext = ActionContext.getContext();
            
            //1、操作request域
            actionContext.put("username", "张三");
            actionContext.put("address", "中国 湖北");
            actionContext.put("tel", "1234560");
            
            //2、操作application域
            actionContext.getApplication().put("username", "张三");
            actionContext.getApplication().put("address", "中国 湖北");
            actionContext.getApplication().put("tel", "1234560");
            
            //3、操作session域
            actionContext.getSession().put("username", "张三");
            actionContext.getSession().put("address", "中国 湖北");
            actionContext.getSession().put("tel", "1234560");
            
            return SUCCESS;
        }
    }

    2、使用ActionContext对象来接受表单提交的数据

    public class ActionContextDemo extends ActionSupport {
    
        /**
         * 使用ActionContext对象来获取request对象
         */
    
        public String execute(){
            //1、调用ActionContext对象的getContext方法的到实例
            ActionContext actionContext = ActionContext.getContext();
            /**
             * 2、使用该对象的getparamenters方法得到一个map集合
             * map集合中的key是表单输入项中name属性的值,value是输入的值
             */
            Map<String, Object> map = actionContext.getParameters();
            //3、得到所有的key
            Set<String> set = map.keySet();
            for (String key : set) {
                //4、根据key获得每个值,值的形式是数组,因为可能存在复选框
                Object[] object= (Object[]) map.get(key);
                System.out.println(key+":"+Arrays.toString(object));
            }
            return NONE;
        }
    }

    3、使用ServletActionContext来操作域对象

    public class ServletActionContextDemo extends ActionSupport{
        
        //使用ServletActionContext来操作域对象
        
        public String execute(){
            //1、得到ServletActionContext对象
            HttpServletRequest request =ServletActionContext.getRequest();
            //2、操作request域
            request.setAttribute("username", "李四");
            request.setAttribute("address", "湖北  十堰");
            request.setAttribute("tel", "452133");
            
            //3、操作session域
            request.getSession().setAttribute("username", "李四");
            request.getSession().setAttribute("address", "湖北  十堰");
            request.getSession().setAttribute("tel", "452133");
            
            //4、操作application域
            request.getServletContext().setAttribute("username", "李四");
            request.getServletContext().setAttribute("address", "湖北  十堰");
            request.getServletContext().setAttribute("tel", "452133");
            return SUCCESS;
        }
    
    }

    4、使用ServletActionContext来获取表单提交的数据

    public class ServletActionContextDemo extends ActionSupport{
        
        //使用ServletActionContext来操作Servlet的api
        
        public String execute(){
            //1、得到ServletActionContext对象
            HttpServletRequest request =ServletActionContext.getRequest();
            //2、得到每一个输入项的值
            String username =request.getParameter("username");
            String address =request.getParameter("address");
            String tel =request.getParameter("tel");
            
            System.out.println("username:"+username+",address:"+address+",tel:"+tel);
            return NONE;
        }
    
    }

    5、使用ServletRequestAware来操作域对象

    /**
     * 1、实现ServletRequestAware接口
     */
    public class ServletRequestAwareDemo extends ActionSupport implements
            ServletRequestAware {
    
        /**
         * 2、声明一个HttpServletRequest对象
         */
        private HttpServletRequest request;
    
        /**
         * 3、实现接口的方法 返回创建的request对象
         */
        @Override
        public void setServletRequest(HttpServletRequest request) {
            this.request = request;
        }
    
        /**
         * 4、使用request操作域对象
         */
        public String execute() {
    
            //2、操作request域
            request.setAttribute("username", "李四");
            request.setAttribute("address", "湖北  十堰");
            request.setAttribute("tel", "452133");
            
            //3、操作session域
            request.getSession().setAttribute("username", "李四");
            request.getSession().setAttribute("address", "湖北  十堰");
            request.getSession().setAttribute("tel", "452133");
            
            //4、操作application域
            request.getServletContext().setAttribute("username", "李四");
            request.getServletContext().setAttribute("address", "湖北  十堰");
            request.getServletContext().setAttribute("tel", "452133");
            return SUCCESS;
        }
    }

    6、使用ServletRequestAware来获取表单提交的数据

    /**
     * 1、实现ServletRequestAware接口
     */
    public class ServletRequestAwareDemo extends ActionSupport implements
            ServletRequestAware {
    
        /**
         * 2、声明一个HttpServletRequest对象
         */
        private HttpServletRequest request;
    
        /**
         * 3、实现接口的方法 返回创建的request对象
         */
        @Override
        public void setServletRequest(HttpServletRequest request) {
            this.request = request;
        }
    
        /**
         * 4、使用request的方法得到每一个输入项的值
         */
        public String execute() {
    
            String username = request.getParameter("username");
            String address = request.getParameter("address");
            String tel = request.getParameter("tel");
    
            System.out.println("username:" + username + ",address:" + address
                    + ",tel:" + tel);
            return NONE;
        }
    }

     项目源代码见下一篇博客

  • 相关阅读:
    输入成绩看等级
    java输入学生成绩
    java基础
    关于session
    关于XML
    Java EE Map
    互联网应用和企业级应用的区别
    Java EE学习目标
    软件工程-来换网-软件度量
    web前端--学习成果
  • 原文地址:https://www.cnblogs.com/jack1995/p/6964575.html
Copyright © 2011-2022 走看看