Struts2入门

本文章为大家介绍以下用IDEA开发工具创建Maven项目使用Struts2框架,对方法的调用和参数赋值,即前后端的数据交互有所介绍。

目录

Struts2框架

2、使用Sturts2

3、子控制器类方法的调用

4、参数赋值

5、与J2EE容器交互

非注入

  注入(实现接口为注入方式)            

总结:

6、经典错误


Struts2框架

Struts2 是基于MVC设计模式的web应用程序框架,最初是以WebWork框架和Struts框架为基础,通过提供增强和改进的Struts框架,进而实现简化web技术人员开发工作的目标。

模型(Model)-视图(View)-控制器(Controller),通常简称MVC,是一种开发web应用程序的软件设计模式。该软件设计模式由以下三部分组成:  

模型——属于软件设计模式的底层基础,模型主要负责管理应用程序的数据,它通过响应视图的请求和控制器的指令来更新自身的数据。  
视图——这部分是负责向用户呈现全部或部分数据,通过控制器的指令触发所展现的一种特殊的数据格式。它们是基于像JSP、ASP、PHP之类模板系统的脚本,较易与AJAX技术进行整合。 
控制器——通过软件代码控制模型和视图之间的交互,控制器负责响应用户输入并执行数据模型对象的交互。控制器在接收、确认输入后执行修改数据模型状态的业务操作

2、使用Sturts2

1、创建MavenWeb(3.0)项目(教程)并配置导入Maven的基本依赖

2、引入Sturts2的所有jar包

        配置pom.xml文件 

<!--struts2-->
    <struts2.version>2.5.13</struts2.version>
<!--struts2-->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>${struts2.version}</version>
    </dependency>

3、配置核心过滤器 作用接收和分发请求        

  <filter>
    <filter-name>struts</filter-name>
    <!-- 此路径为struts2的核心配置文件路径-->
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts</filter-name>
    <!--拦截*.action的请求 -->
    <url-pattern>*.action</url-pattern>
  </filter-mapping>

4、建立Struts2的核心配置文件 struts.xml 文件名为框架定义的,不能自定义

     建议struts-base.xml文件,用于配置struts的基本配置

struts-base.xml

<struts>
    <!--启用struts2的开发者模式
    struts.devMode该属性设置Struts 2应用是否使用开发模式。如果设置该属性为true,
    则可以在应用出错时显示更多、更友好的出错提示。该属性只接受true和flase两个值,
    该属性的默认值是false。通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,
    则该属性设置为false。
    -->
    <constant name="struts.devMode" value="true"></constant>
    <!--启用struts2配置文件自动加载模式
    struts.configuration.xml.reload该属性设置当struts.xml文件改变后,
    系统是否自动重新加载该文件。该属性的默认值是false。
    -->
    <constant name="struts.configuration.xml.reload" value="true"></constant>
    
    <!--继承struts的默认配置文件 
        默认配置文件路径如下图
        并设置抽象包-->
    <package name="struts-base" extends="struts-default" abstract="true">
        <!--启用动态方法调用模式-->
        <global-allowed-methods>regex:.*</global-allowed-methods>

    </package>
    
</struts>

默认配置文件路径

以上的xml文件都引入DTD约束,因为我使用的是2.5版本的,所以是2.5的约束

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

以上约束复制位置在此找到对应的DTD约束

 看到这个Use the following DOCTYPE 代表使用此约束,只需要复制下面就可以使用此约束,

但是在idea中有可能已经帮我读取到了,在创建xml文件时就给我们加入了DTD约束

 5、建立Action类,再建立对应的Action的xml文件

struts-hellow.xml        -->HellowAction.java

<struts>
    <!--package
        name 包名 代表当前配置名字
        extends 继承
        namespace 配置空间 默认/  
        在访问hellowAction的控制器类时,需要在前面加入 
        http://localhost:8080/项目名/sys/hellowAction_方法名.action
    -->

    <package name="struts-hellow" namespace="/sys" extends="struts-base">
        <!-- action节点
            name代表请求路径名 不要/和后缀 _*动态可变的调用方法名
            class代表子控制器类全路径名
            method 代表子控制器类中调用的方法名 默认excute 不写也默认调用此方法
        -->
        <action name="hellowAction_*" class="struts.action.HelloAction" method="{1}">
            <!--resultv
                name 请求结果码
                注:标签体代表跳转的具体页面的路径
            -->
            <!-- type 跳转方式  转发 dispatcher  或者在重定向 redirect   (默认转发) -->
            <result  name="success" type="dispatcher">/index.jsp</result>
        </action>

    </package>
</struts>

再把struts-base.xml和struts-hellow.xml导入到核心配置文件struts.xml中

必须先引入struts-base.xml文件

<!--每一个子控制器类单独对应一个xml文件-->
<struts>
    <include file="struts-base.xml"></include>
    <include file="struts-hellow.xml"></include>
</struts>

到这里基本配置已经完成

3、子控制器类方法的调用

1、在struts-base.xml文件的默认配置文件中启用动态方法调用模式,不设置那么方法就固定了,一个子控制器类只可以调用一个方法

<!--启用动态方法调用模式-->
        <global-allowed-methods>regex:.*</global-allowed-methods>

2、在对应的子控制器类设置方法名        struts-hellow.xml

在对应的action的name属性中后面写_*,然后在method={1}

<action name="hellowAction_*" class="struts.action.HelloAction" method="{1}">
            <!--resultv
                name 请求结果码
                注:标签体代表跳转的具体页面的路径
            -->
            <!-- type 跳转方式  转发 dispatcher  或者在重定向 redirect   (默认转发) -->
            <result  name="success" type="dispatcher">/index.jsp</result>
        </action>

4、参数赋值

1、在子控制器类定义属性,必须提供get/set方法

2、对象属性赋值

        先实现ModelDrive<T>接口,并实现改接口所定义的getModel()方法

        必须先对实体对象进行实例化,不需要给的get/set方法,并在getModel()方法中返回此对象

注:ModelDriven返回实体和Action中属性重名,ModelDriven中优先级更高

5、与J2EE容器交互

在子控制器类中

非注入


                  耦合
              ServletActionContext          

用ServletActionContext拿到两个内置对象
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
request.setAttribute("unam",unam);

        解耦(建立使用解耦模式)
              ActionContext

ActionContext ac = ActionContext.getContext();
Map<String, Object> Map = ac.getContextMap();
//给前端传入数据    
Map.put("unam",unam);

  注入(实现接口为注入方式)
            

                 耦合
              ServletRequestAware/ServletResponseAware

            实现ServletRequestAware和ServletResponseAware接口
         

        再实现两个接口所定义的方法

  定义两个属性

        public HttpServletRequest req;

        public HttpServletResponse resp;


 @Override
    public void setServletRequest(HttpServletRequest httpServletRequest) {
        this.req=httpServletRequest;
    }

    @Override
    public void setServletResponse(HttpServletResponse httpServletResponse) {
        this.resp=httpServletResponse;
    }

    

    req.setAttribute("unam",unam);

     

      解耦

           实现RequestAware接口

           实现此接口定义的方法setReuqest方法

public Map<String, Object> params;

    @Override
    public void setRequest(Map<String, Object> map) {
        this.params=map;
    }

    params.put("unam",unam);

总结:

        搭建struts2的运行环境步骤:

               1、配置pom.xml文件导入jar包

                2、配置struts2核心过滤器

                3、配置struts2核心配置文件struts.xml文件     放置于resources目录下

                               struts.xml(注意引入顺序)        struts-base.xml        struts-xxx.xml

                                dtd约束 struts-2.5.dtd   (动态方法配置)

                 4、子控制器类中的默认方法名excute

                        1、在sturts-base.xml中开启动态方法

                        2、在具体的struts-xxx.xml中的action节点中的name属性使用动态方法名

                                例:<action="hellowAction_*" class="" method="{1}">

                        3、调用:http://localhost:8080/xxx/hellowAction_方法名.action

               5、传参和页面跳转

                        传参:

                                1、直接在Action中定义属性,并且提供get、set方法

                                2、实现ModelDriven接口,实体类必须实例化,实现getModel方法

                       页面跳转:

                             <result name="结果码" type="跳转方式(默认转发)" >/login.jsp</result>

                                        

              6、J2EE容器交互

                        注入和非注入

                        耦合和解耦

          

6、经典错误

  此项目的请求路径错误(子控制器类不存在) 

调用方法异常 

代码链接 提取码:b5t8

至此,Struts2入门基本介绍完毕,由于作者水平有限难免有疏漏,欢迎留言纠错。

一、准备工作及实例 3 1.解压struts-2.1.6-all.zip 3 2.六个基本包 3 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 4 (5)其它配置文件 4 4.让MyEclipse提示xml信息 4 5.如何使用alt+/提示 4 6.实例 4 7.开启struts2自带的开发模式常量 6 8.vo传参模式 7 9.ModerDriven传参模式(不建议采用) 7 10.为什么要使用struts2代替struts1.x 7 二、struts.xml配置及例程 7 1.配置文件的优先级 7 2.配置形式 8 3.package配置相关 8 4.分工合作include:指定多个配置文件 10 5.tomcat认证访问 10 6.初识拦截器 11 7.Action中的method属性 12 8.使用ForwardAction实现页面屏蔽。 13 8.使用default-Action配置统一访问 14 小结Action 14 9.使用通配符 14 10.使用0配置:ZERO Annotation 15 11.Result配置详解 15 探讨type类型: 16 Type类型值 16 作用说明 16 对应类 16 chain 16 用来处理Action链 16 com.opensymphony.xwork2.ActionChainResult 16 dispatcher 16 用来转向页面,通常处理JSP 16 org.apache.struts2.dispatcher.ServletDispatcherResult 16 redirect 16 重定向到一个URL 16 org.apache.struts2.dispatcher.ServletRedirectResult 16 redirectAction 16 重定向到一个Action 16 org.apache.struts2.dispatcher.ServletActionRedirectResult 16 plainText 16 显示源文件内容,如文件源码 16 org.apache.struts2.dispatcher.PlainTextResult 16 freemarker 16 处理FreeMarker模板 16 org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据。 16 org.apache.struts2.dispatcher.StreamResult 16 velocity 16 处理Velocity模板 16 org.apache.struts2.dispatcher.VelocityResult 16 xslt 16 处理XML/XLST模板 16 org.apache.struts2.views.xslt.XSLTResult 16 全局result: 17 动态Result:了解 18 12.异常处理 18 三、在Action获取Scope对象 19 方式一、与Servlet解耦合的非IOC方式 20 方式二、与Servlet解耦合的IOC方式 21 方式三、与Servlet耦合的非IOC方式 21 方式四、与Servlet耦合的IOC方式 22 四、OGNL与ValueStack(VS) 22 1.值栈入门 22 2.OGNL入门 24 3.普通方法访问 24 4.静态方法访问 24 5.默认类Math的访问 24 6.调用普通类的构造方法 25 7.集合对象初步 25 8.集合对象进阶 25 9.N语法top语法 26 10.获取Stack Context中的信息 26 11.总结$ # %的区别 27 12.总结OGNL[重点] 27 五、拦截器 28 1.概述strust2中的拦截器 28 2.自定义拦截器 28 方式一,实现Interceptor接口。 28 方式二、继承AbstractInterceptor抽象类 29 方式三、继承MethodFilterInteceptor类 30 3.使用来MethodFilterInterceptor灵活拦截 32 4.使用默认的execAndWait拦截器 33 5.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值