zoukankan      html  css  js  c++  java
  • Struts2简介、初步使用

    今日分享的是楼楼新学的一个框架,Struts2:

    一:Struts2简介:

      Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互;Struts2是Struts的下一代产品,所以它是Struts1+WebWork合并的全新框架Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计使得业务逻辑控制器能够与ServletAPI完全脱离开。

    二:Struts2的使用:

      2.1:Struts2的环境搭配

      2.1.1:创建一个Maven项目,在pom.xml中配置Struts2框架依赖    

    <!-- 引用struts2框架核心依赖 -->
     <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.5.13</version> </dependency>

      2.1.2:导入Struts2所需要的配置文件

           

      Struts-base.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    <struts>
        <!-- 设置编码集 -->
        <constant name="struts.i18n.encoding" value="UTF-8" />
        <!-- 开启动态方法调用 -->
        <constant name="struts.devMode" value="true" />
        <!-- 不重启的情况下能修改代码理解生效 -->
        <constant name="struts.configuration.xml.reload" value="true" />
        <!-- 和上面一样 -->
        <constant name="struts.i18n.reload" value="true" />
        <!-- 开启动态方法调用 -->
        <constant name="struts.enable.DynamicMethodInvocation" value="true" />
         <!-- 实用动态方法调用必须配置的 -->
        <package name="base" extends="struts-default" abstract="true">
            <!-- 
                在statu2.5版本之后,加了 regex:.* 默认将动态方法调用关闭,abstract 也要为true才能动态方法调用
                这是处于系统安全考虑的。
             -->
            <global-allowed-methods>regex:.*</global-allowed-methods>
        </package>
        
    </struts>

      Struts-sy.xml:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
     4     "http://struts.apache.org/dtds/struts-2.5.dtd">
     5 <struts>
     6     <!-- 这是包的概念 能更细分action的分类-->
     7     <package name="sy" extends="base" namespace="/sy">
     8         <!-- *代表你要调用的方法 -->
     9         <action name="/dome_*"  class="com.ht.web.HelloAction" method="{1}">
    10             <!-- 实用两个*,但是推荐使用
    11                 <result name="{2}">/{2}.jsp</result>
    12              -->
    13             <result name="rs">/rs.jsp</result>
    14         </action>
    15     </package>
    16 </struts>

      Struts.xml:

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE struts PUBLIC
    3     "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    4     "http://struts.apache.org/dtds/struts-2.5.dtd">
    5 <struts>
    6     <include file="struts-default.xml"></include>
    7     <include file="struts-base.xml"></include>
    8     <include file="struts-sy.xml"></include>
    9 </struts>

       2.1.3:web.xml中配置核心拦截器

      StrutsPrePareAndExectueFilter就是Struts2核心拦截器,当用户请求匹配的URL时,核心栏截器执行;

      而我的配置中只要是.action结尾,就会自动执行核心拦截器。

      web.xml配置

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1">
        <display-name>Archetype Created Web Application</display-name>
        <filter>
            <filter-name>struts</filter-name>
            <!-- 相对于中央控制器,过滤请求 -->
            <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts</filter-name>
            <url-pattern>*.action</url-pattern>
        </filter-mapping>
    </web-app>

      三:Struts2动态方法调用

      3.1:新建一个HellowAction类来处理action代码

    public class HelloAction /*extends ActionSupport*/ {
        /**
         * add方法
         * @return
         */
        public String add() {
             System.out.println("调用add方法。。。");
            return "rs";
        }
        /**
         * del方法
         * @return
         */
        public String del() {
            System.out.println("调用del方法。。。");
            return "rs";
        }
    }

          3.2:新建一个demo.jsp,用jsp来调用测试action代码

    <body>
        <h1>动态方法调用</h1>
        <a href="${pageContext.request.contextPath}/sy/dome_add.action">新增</a>
        <a href="${pageContext.request.contextPath}/sy/dome_del.action">删除</a>
    </body>

      若是控制台输出了调用的方法就成功了

         

      四:struts2前台传递数据到后台

       有三种方式可以实现:

      4.1 :实现 modelDrivern方法;

      创建一个Cal实体类

    package com.ht.entity;
    /**
     * Cal实体类
     * @author Administrator
     */
    public class Cal {
        
        private String num1;
        private String num2;
        public String getNum1() {
            return num1;
        }
        public void setNum1(String num1) {
            this.num1 = num1;
        }
        public String getNum2() {
            return num2;
        }
        public void setNum2(String num2) {
            this.num2 = num2;
        }
        @Override
        public String toString() {
            return "Cal [num1=" + num1 + ", num2=" + num2 + "]";
        }
    }

    在HellowAction中实现ModelDriven类

    public class HelloAction implements ModelDriven<Cal>{
        private Cal cal1 = new Cal();
    
        @Override
        public Cal getModel() {
            return cal1;
        }
        /**
         *实现 modelDrivern 接收参数值
         * @return
         */
        public String accept1() {
            System.out.println("cal1:" + cal1);
    
            return "rs";
        }
    }

     在jsp中调用action中的方法

    <h2>前台传数据给后台</h2>
        <a href="${pageContext.request.contextPath }/sy/demo_accept1.action?num1=20&&num2=5">accept1</a>

      4.2:类实例.属性名

      最好新建一个类写action代码:

    public class ActionDome {
           private Cal cal2;
    
            public Cal getCal2() {
                return cal2;
            }
    
            public void setCal2(Cal cal2) {
                this.cal2 = cal2;
            }
            /**
             * 类实例.属性名    接收参数值
             * @return
             */
            public String accept2() {
                System.out.println("cal2:"+cal2);
                return "rs";
            }
    }

      jsp调用代码

    <a href="${pageContext.request.contextPath }/sy/demo_accept2.action?cal2.num1=20&&cal2.num2=5">accept2</a>

      4.3:通过set/get方法

      在创建一个类来测试,action代码

    public class ActionTest {
        private String sex;
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        /**
         * set/get    接收参数值
         * @return
         */
        public String accept3() {
            System.out.println(sex);
            return "rs";
        }
    }

      jsp调用代码

    <a href="${pageContext.request.contextPath }/sy/demo_accept3.action?sex=nv">accept3</a>

      四:数据交互(后台传数据至前台)

      其实因为蛮简单的,就是实现ServletRequestAware接口和ServletResponseAware接口

      4.1:注入(偶合),实现ServletRequestAware接口

    public class HelloAction implements ModelDriven<Cal>,ServletRequestAware{
        private Cal cal1 = new Cal();
        private ServletRequestAware req;
        /**
         * 实现 modelDrivern 接收参数值
         * @return
         */
        public String accept1() {
            System.out.println("cal1:" + cal1);
             //注入耦合
            req.setAttribute("cal1", cal1);
            return "rs";
        }
        @Override
        public void setServletRequest(HttpServletRequest request) {
            // TODO Auto-generated method stub
            this.req=req;
        }
    }

      4.2:非注入(偶合)

        public String accept1() {
            System.out.println("cal1:"+cal1);
            //非注入耦合
            HttpServletRequest request = ServletActionContext.getRequest();
            request.setAttribute("cal1", cal1);
            return "rs";    
        }

    今日分享到此结束!谢谢观看!

  • 相关阅读:
    强烈推荐:240多个jQuery插件【转】
    逆变与协变详解
    Mac入门 (二) 使用VMware Fusion虚拟机
    JQUERY UI DOWNLOAD
    几个常用Json组件的性能测试
    jQuery.extend 函数详解
    获取Portal中POWL程序的APPLID
    设计师和开发人员更快完成工作需求的20个惊人的jqury插件教程(上)
    Linux kernel中网络设备的管理
    mongodb修改器
  • 原文地址:https://www.cnblogs.com/huangting/p/11099782.html
Copyright © 2011-2022 走看看