Struts2 基础

Posted 专注改变人生。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2 基础相关的知识,希望对你有一定的参考价值。

一、Struts简介

  1.1  历史

  •  虽然Struts 2号称是一个全新的框架,但这仅仅是相对Struts 1而言。Struts 2与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。从某种程度上来讲,Strut2没有继承Struts 1的血统,而是继承了WebWork的血统。或者说,WebWork衍生出了Struts 2,而不是Struts 1衍生了Struts 2。因为Struts 2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证;而且吸收了Struts 1和WebWork两者的优势,因此,是一个非常值得期待的框架。

 

  1.2  struts与servlet的区别

      1.2.1  区别一:

  • servlet是单例,线程安全,每次请求都是由第一个请求到来后建立的那个servlet招呼,所以servlet一般没有成员变量;struts2是通过一个servlet负责招待每个到来的线程,并为这个线程向action工厂要一个全新的action,并把它们俩放进一个叫Threadlocal的容器中,直到线程断掉,这些东西才被gc这个收垃圾的收走。所以struts2是多线程的。

 

      1.2.2  区别二

 

 

  • servlet中的JSTL和EL对字符串和集合的操作支持很弱,而struts中的OGNL对集合的操作非常强大, 但是OGNL表达式的运行性能没有JSTL和EL高。

 

      1.2.2  区别三

 

 

 

  1.3  体系结构

  体系结构:1、Web浏览器请求一个资源。

  2、过滤器Dispatcher查找方法,确定适当的Action。

  3、拦截器自动对请求应用通用功能,如验证和文件上传操作。

  4、Action的execute方法通常用来存储和重新获得信息。

  5、结果被返回到浏览器。

 

 

 

 

 

  1.4  基于servlet的MVC设计模式与基于Struts框架的设计模式

二、初步使用Struts框架

 

  2.1  下载

进入apache的官方网:http://struts.apache.org/download.cgi#struts209 下载struts2的GA完整版,本文下载Struts 2.3.32为例。
下载完后,解压到本地磁盘,该文件夹包含如下文件结构:
l apps:该文件夹下包含了struts 2 的示例应用。
l docs:struts2的相关文档,包含struts2的快速入门、struts2的帮助文档及API文档等内容。
l j4:该文件夹下包含了让struts2支持JDK1.4的JAR文件。
l lib:该文件夹下包含了struts2框架的核心类库,以及struts2的第三方插件类库。
l src:该文件下包含了struts2框架的全部源代码。

 

  2.2  Struts框架的使用初步:

   A:Apache下载struts.2.1.8.rar包。
    B:进入apps目录,解压空工程。
    C:将struts2的基本jar包拷到工程的lib目录中。


    D:配置web.xml,加载struts2的过滤器

  we.xml:

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

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    E:加载struts的配置文件struts.xml到src目录。

  • 在空工程的apps\\WEB-INF\\classes包里找到struts.xml,并复制这个xml文件到工程的src目录下。

    F:编写Struts中的Action类。并且类中必须有返回值为String的execute方法。

ActionFirst.java:

package com;

public class ActionFirst {
    /**
     * 必须要有String的execute方法
     * @return
     */
    public String execute(){        
        System.out.println("将执行execute方法");
        return "index";    
    }
}
  •     exeucte是用于执行用户请求(Request)和响应用户(Response)的操作。

         用于接收GET与POST的请求。


    G:将Action类配置到struts.xml中。
  

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">
       <action name="xx" class="com.ActionFirst">
       <result name="index">/index.jsp</result>
       </action>
       </package>

</struts>
  • 解析:当url为/xx 时,会执行com.ActionFirst,并调用该Action中的execute方法,该方法返回一个String值为index,再与《result》中的name属性相匹配,匹配到就跳转到/index.jsp页面。


    H:页面访问Action,执行exceute方法,根据execute方法的返回值到Action到result中
    进行名称的匹配,从而请求转发或者重定向到页面。

结果:

 

 



 

以上是关于Struts2 基础的主要内容,如果未能解决你的问题,请参考以下文章

[vscode]--HTML代码片段(基础版,reactvuejquery)

struts2请求过程源代码分析

Struts2 s2-032远程代码执行分析

Struts2基础学习总结

漏洞通告Struts2远程代码执行漏洞通告(S2-057)

Struts2