zoukankan      html  css  js  c++  java
  • struts2开发流程及配置,域对象对数据存储的3种方式

    一、开发流程

    1)引入 jar 包,其中必须引入的有(我是用的struts是2.3.32)

    commons-fileupload-1.3.2.jar     |文件上传下载
    commons-io-2.2.jar                   |
    commons-lang3-3.2.jar      |long扩充包
    freemarker-2.3.22.jar           |标签扩充
    javassist-3.11.0.GA.jar             |
    ognl-3.0.19.jar
    struts2-core-2.3.32.jar       |struts核心包
    xwork-core-2.3.32.jar           |xwork核心包

    2)配置web.xml 文件,引入filter,这是固定格式

    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

    3)开发action

    4)配置 struts.xml 配置文件,该配置文件需要放到 src 目录下。

    配置文件样例如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
        "http://struts.apache.org/dtds/struts-2.1.dtd">
        
     <struts>
        <package name="Adminpkg" namespace="/Admin" extends="struts-default">
            <action name="login" class="com.huitong.action.AdminAction" method="login">
                <result name="success" type="dispatcher">/index.jsp</result>
            </action>
        </package>
    </struts>

    其中result name表示调用类 class 的方法 method 后返回的标记。

    说明:package 是用来管理各个action的。

    二、action类中对共享数据的处理方式有3中,

    1)使用servlet api获取相应的域对象 

    2)使用 ActionContext 对象获取域对象

    3)实现接口SessionAware,RequestAware, ApplicationAware

    域对象的说明,有request, session, application

    2.2.1)方式1的实现,主要的类是:ServletActionContext,实现代码如下

            HttpServletRequest request = ServletActionContext.getRequest();  
            HttpSession session = request.getSession();
            ServletContext servletContext = ServletActionContext.getServletContext();
            
            request.setAttribute("request", "requestValServletActionContext");
            session.setAttribute("session", "sessionValServletActionContext");
            servletContext.setAttribute("application", "servletContextValServletActionContext");
            
            return SUCCESS;    

    说明:在struts 框架中导入servlet 类,有点高耦合,以后尽量少用。除非到必须要用,例如获取项目地址 request.getContextPath()。

    2.2.2)方式2的实现,主要的类是ActionContext,实现代码如下

            ActionContext acContext = ActionContext.getContext();    //首先获取ActionContext 对象
            
            Map<String, Object> request = acContext.getContextMap();
            Map<String, Object> session = acContext.getSession();
            Map<String, Object> application = acContext.getApplication();
            
            request.put("request", "requestValActionContext");
            session.put("session", "sessionValActionContext");
            application.put("application", "applicationValActionContext");
            
            return SUCCESS;

    说明:这种方法首先获取actionContext对象。使用的是map来存储数据。这种方式一般用在方法种类比较少的情况,因为每个处理方法都需要获取对象,进而处理。

    要想获取其他域对象,首先获取 actionContext 上下文环境对象。

    ActionContext accontext = ActionContext.getContext();

    1)获取request 对象

    Map<String, Object> request = accontext.getContextMap();

    2)获取 session 对象

    Map<String, Object> session = accontext.getSession();

    3)获取 servletContext 对象

    Map<String, Object> application = accontext.getApplication();

    2.2.3)方式3 的实现,主要的接口有 SessionAware,RequestAware, ApplicationAware;实现方法如下

    public class datapro3 extends ActionSupport implements SessionAware,
            RequestAware, ApplicationAware {
        private Map<String, Object> application=null;
        private Map<String, Object> request=null;
        private Map<String, Object> session=null;
    
        @Override
        public void setApplication(Map<String, Object> application) {
            this.application = application;
        }
    
        @Override
        public void setRequest(Map<String, Object> request) {
            this.request = request;
        }
    
        @Override
        public void setSession(Map<String, Object> session) {
            this.session = session;
        }
        
        public String pro3(){
            request.put("request", "requestValRequestAware");
            session.put("session", "sessionValSessionAware");
            application.put("application", "applicationValApplicationAware");
            
            return SUCCESS;
        }
    
    }

    该方法跟实现方式2差不多,只不过这种方法将域对象首先存储到类的属性中,在以后的处理方法上直接使用即可。所以这种方法可以应用于处理的方法比较多的情况。

  • 相关阅读:
    SecureCRT 迁移到新环境,配置导出
    Git 常用操作
    Java 性能分析工具 Asyncprofiler
    冒号语法
    后台乱码转中文
    js讲解视频
    下载指定版本的loader.调整文件夹结构
    react大型数据渲染列表
    git拉取报错
    记录一个排序表格的插件
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/6698776.html
Copyright © 2011-2022 走看看