一、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 基础的更多相关文章

  1. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

  2. Struts2基础学习2

    Struts2基础学习2 项目结构,测试页面与实体类 <%@ page language="java" contentType="text/html; charse ...

  3. Struts2基础入门

    Struts2基础入门 创建一个web工程 0)导包并且创建一个核心配置文件 <?xml version="1.0" encoding="UTF-8"?& ...

  4. Struts2基础学习总结

    引用自:http://www.cnblogs.com/jbelial/archive/2012/05/10/2486886.html Struts 2是在WebWork2基础发展而来的. 注意:str ...

  5. 经典MVC框架技术-struts2基础知识

    Struts2框架简介 struts2框架是在struts1和webwork技术的基础上,进行合并的全新框架,struts2以Webwork为核心,采用拦截器来处理用户的请求,这样的设计使得业务逻辑控 ...

  6. Struts2框架学习第三章——Struts2基础

    本章要点 —  Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 —  WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合To ...

  7. struts2 基础

    框架(frameWork):某一种应用的半成品 struts2: 表现层 处理与页面进行交互的相关功能  hibernate: 持久层 负责业务逻辑数据的持久化  spring: 业务层 负责复杂的业 ...

  8. struts2 基础学习

      Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts ...

  9. 2. Struts2 基础

    1. Struts2简介 Struts2是一个WEB端MVC框架.作为比较早的MVC 框架之一,Struts2在使用中还是比较多的.虽然个人感受没有SpringMVC还那么的好用 Struts2 官网 ...

随机推荐

  1. 基于golang的websocket通信实现

    代码: https://gitee.com/knox_xzk/websocket

  2. C#Winform ListView中没有Item双击事件的两种实现方法!

    第一种: //if (this.listView1.FocusedItem != null) //{ // if (this.listView1.SelectedItems != null) // { ...

  3. [Oracle] Oracle中和MySql的limit对应的方法

    MySql很贴心,有个限制范围查询的limit函数,用起来也很方便,SQL不用嵌套.如下: select id,name,age,cdate as ctime from emp order by id ...

  4. opencv常见示例

    1.批量转换灰度图并保存 #include <iostream> #include <opencv2/opencv.hpp> #include <string> u ...

  5. Idea 运行测试NoSuchMethodError Junit5

    1.背景 环境: macOS 10.13.4 idea: 2016.3 springboot 版本: 2.2.2.RELEASE pom依赖 <dependencies> <depe ...

  6. 【分类算法】感知机(Perceptron)

    0 - 算法描述 感知机算法是一类二分类算法,其问题描述为,给定一个训练数据集 $$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$ 其中$x_i\in \m ...

  7. Qt编写自定义控件47-面板区域控件

    一.前言 在很多web网页上,经常可以看到一个设备对应一个面板,或者某种同等类型的信息全部放在一个面板上,该面板还可以拖来拖去的,这个控件首次用在智能访客管理平台中,比如身份证信息一个面板,访客信息一 ...

  8. PAT 甲级 1055 The World's Richest (25 分)(简单题,要用printf和scanf,否则超时,string 的输入输出要注意)

    1055 The World's Richest (25 分)   Forbes magazine publishes every year its list of billionaires base ...

  9. activity 工作流

    https://blog.csdn.net/cs_hnu_scw/article/details/79059965 https://blog.csdn.net/xnf1991/article/deta ...

  10. 【Leetcode_easy】717. 1-bit and 2-bit Characters

    problem 717. 1-bit and 2-bit Characters 题意:solution1: class Solution { public: bool isOneBitCharacte ...