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";
    }

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

原文地址:https://www.cnblogs.com/huangting/p/11099782.html

时间: 2024-11-07 06:19:59

Struts2简介、初步使用的相关文章

Struts2整理-----Struts2简介

Struts2简介: struts2是在webwork2基础上发展而来的.和struts1一样,struts2也属于MVC框架.不过有一点需要注意的是:struts2和struts2虽然名字很相似,但是在两者在代码编写风格上几乎是不一样的.那么既然有了struts1,为什么还要推出struts2.主要的原因是struts2有以下优点: 1.在软件设计上struts2不依赖于servlet API和struts API.而struts1跟servlet API和struts API有着紧密的耦合:

Java Web框架:Struts2简介

历史 Struts历史.JSP经历了JSPModel1和JSPModel2阶段.JSPModel1就像现在的PHP一样,每个文件中都混合了业务逻辑和HTML代码,每个JSP都直接与数据库交互.这种模型非常具有局限性,代码重用性较差.后面出现了改进版本的JSPModel1,它增加了JavaBean.JSP文件需要通过JavaBean间接访问数据库.JSPModel2中使用了三种技术:Servlet.JavaBean.JSP.Servlet相当于控制器,负责流程的控制,将请求进行分派,调用JavaB

Struts2 简介

回顾Struts2的使用过程,网上搜的教程多多少少都会有点问题,重新记录下创建过程,方便查阅. 1.下载Struts2的jar包 下载地址:http://archive.apache.org/dist/struts/binaries/ 我用的是struts-2.3.14-all.zip这个版本 2.创建一个web project项目 下面给出所有文件均创建完成后的工程师图. 3.导入Struts2所需jar包 因为只是示例程序,只需要导入Struts 2支持最小的包就可以了,网上很多教程中添加的

Struts2简介

1.Struts2的概念 Struts2 是轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层. 轻量级 低侵入性,与业务代码的耦合度很低.即业务代码中基本不需要import它的包. MVC框架 Struts2实现了MVC,并提供一系列API,采用模式化方式简化业务开发过程. 2.什么是MVC M-Model模型 模型(Model)的职责是负责业务逻辑.包含两层业务数据层和业务处理逻辑.比如实体类.DAO.Service都属于模型层. V-View视图 视图(View)的职责是负

struts2 之 【struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程】

入门框架学习避免不了的问题: 1. 什么是框架? 简单的说,框架就是模板,模子,模型.就是一个可重用的半成品. 2. 如何学习框架? 学习框架其实就是学习规则,使用框架就是遵循框架的规则,框架是可变的 和 不可变的部分组成,学习框架就需要把 什么可变什么不可变搞清楚. 3. 为什么使用 struts2 框架:聊这个问题先来聊一聊 Web的开发模式, model1 和 model2 模式. 4. model1模式:jsp+javaBean开发. 优点:执行效率高,代码比较少,开发效率比较高.适合小

Struts2下载及简介

Struts2下载及简介 一.Struts2下载: 进入网址:http://struts.apache.org/download.cgi#struts23163 可以下载最新的Struts2. 1.Full Distribution:下载Struts2的完整版.该版包括Struts2的示例应用.空示例应用.核心库.源代码和文档等. 2.Example Application:仅下载Struts2的示例应用,这些示例对学习Struts2有很大用处. 3.Essential Dependencies

Struts1和Struts2的区别和对比(完整版)

Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个act

Struts2与Struts1的区别

Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个act

struts2 框架 的环境搭建 与配置

一,Struts2简介: 1,来由:Struts(金属支架),在程序中表示起支撑作用的通用程序代码,Struts2是在Struts1框架的基础上融合了WebWork优秀框架升级得到的. 2,解释:Struts2框架是一个轻量级的MVC流程框架,轻量级是指程序的代码不是很多,运行时占用的资源不是很多,MVC流程框架就是说它是支持分层开发,控制数据的流程,从哪里来,到那里去,怎么来,怎么去的这样一个框架: 二.环境搭建 1, 导入jar包 2导入web.xml文件,改配置 <?xml version