它是一个软件组织推出的基于MVC模式的轻量级Web框架。 自问世以来,受到了广大Web开发者的欢迎。 目前,它在Java Web开发领域已经占据了非常重要的地位。
到目前为止,该框架有两个主要版本:.x 和 .x。 它是最早的基于MVC模式的轻量级Web框架。 能够合理划分代码结构,包含验证框架、国际化框架等多种实用工具框架。
随着技术的不断进步,其局限性也日益暴露。 为了满足更灵活、更高效的开发需求,框架应运而生,并正在逐步取代框架。
它是一个基于J2EE和J2EE技术合并的新框架(该组织开发的一个J2EE Web框架,致力于组件化和代码重用。它也是一个MVC框架)。
虽然它的名字与AV相似,但其设计理念却截然不同。 因为它是核心,是技术与技术的结合,所以可以理解为更新的产品。
凭借出色的设计和功能,其优点如下。
简单来说,作用就是通过过滤器拦截请求匹配中的相应方法,并返回相应的结果。
目录结构及基本JAR包介绍
官方下载地址是,您可以在其中下载最新版本。 我们使用的版本是2.3.37。
下载成功后,解压-2.3.37-all.zip压缩包。 解压后的目录如图所示。
目录介绍 名称 功能
应用
用于存放官方提供的示例程序,可以作为学习者的参考资料。 每个示例都是一个war文件,可以通过zip解压。
文档
用于存放官方提供的文档,包括快速入门、说明文档、API文档。
库
存储核心类库,以及第三方插件类库。
源代码
用于存放该版本框架对应的源码。
了解了文件夹结构之后,我们来学习如何在项目中使用该框架。 打开图1中的lib文件夹,可以看到所有开发中可能用到的JAR包(该版本有106个JAR包)。 一般Web开发中,只需将lib文件夹依赖的几个基本JAR包复制到Web项目的WEB-INF/lib路径下即可使用框架。
项目所依赖的基本JAR包文件名描述
asm-3.3.jar
用于操作 Java 字节码的类库
asm--3.3.jar
提供基于事件的表示
asm-tree-3.3.jar
提供基于对象的表示
-core-2.3.37.jar
框架核心类库
xwork-core-2.3.37.jar
Web Work 核心库,其基础
ognl-3.0.6.jar
对象图导航语言(Graph),框架通过该语言读取/写入对象的属性
-2.3.22.jar
标签模板使用的类库
-3.11.0.GA.jar
字节码解释器
--1.4.jar
文件上传组件依赖包
-io-2.2.jar
输入/输出,传递文件相关的 JAR
-lang-2.4.jar
包含一些数据类型工具,对 java.lang 包的增强
log4j-api-2.2.jar
日志管理组件依赖于包的API
log4j-core-2.2.jar
日志管理组件依赖包
从上表可以看出,该版本项目一共依赖了13个基础JAR包。 根据版本的不同,它所依赖的基本JAR包可能不完全一样,但是基本变化不大,我们可以根据情况来决定。
快速添加所需JAR包
在 apps 目录中,找到 -blank.war 文件。 该文件是官方提供的一个空的示例工程,里面包含了一些基本的JAR包和一些xml配置文件。 为了开发时方便快捷的使用,我们可以将这个文件的扩展名改为zip(即-blank.zip),然后解压并以压缩包的形式打开。
将 WEB-INF/lib 文件夹中的所有 JAR 文件复制并添加到您创建的 Web 应用程序的 WEB-INF/lib 中。 至此,添加完成。 这些 JAR 文件恰好是您所依赖的基本包。
第一个节目
使用框架实现程序。
创建项目
新建一个名为 的Web项目,将框架依赖的基础JAR包复制到该项目的WEB-INF/lib路径下,然后选择所有JAR并右键,执行Build Path→Add to Build Path操作(此时选中的JAR包就会被添加到项目中),添加后的项目结构如下。
配置核心过滤器web.xml
打开项目的web.xml文件,在文件中添加核心过滤器org....ng....,如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<filter>
<filter-name>struts2filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
filter-class>
filter>
<filter-mapping>
<filter-name>struts2filter-name>
<url-pattern>/*url-pattern>
filter-mapping>
web-app>
在web.xml文件中,标签中配置的信息是核心过滤器。 过滤器的名称为,过滤器类为org...ng...,过滤器的映射在标签中配置。
需要注意的是,在.1版本之前,使用的核心过滤器类是org..... .1版本之后,不再推荐使用这个过滤器类,改用org....ng。 .. 种类。
如果你觉得配置上面的核心控制器很麻烦,这里有一个快速配置核心过滤器的方法。
从上面的Web.xml文件可以看出,核心过滤器名称非常长,如果手写的话很容易出错。 为此,这里有一个添加核心过滤器的快速方法。
在快速导入基础JAR包时解压的-blank文件夹中,打开WEB-INF/web.xml文件,找到上述Web.xml中的核心过滤器配置代码,将配置代码复制到自己的Web应用中。 web.xml 文件,省去了您自己手动编写的麻烦。
创建班级
在项目的src目录下,新建一个名为com..的包,并在包中创建一个名为的类,并使其继承该类(框架提供的类)。 在类中定义一个()方法,返回值为。 编辑后的代码如下。
package com.mengma.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
public String execute() throws Exception {
return SUCCESS;
}
}
在上面的.java中,()方法的返回值是一个从父类继承的常量字段,用于指示执行成功并返回结果页面。
() 方法的返回值对应于 .xml 文件中标签中 name 属性的值。 框架会根据name属性值执行相应处理结果下的视图资源。
配置文件写入.xml
在 src 目录中创建一个名为 .xml 的新文件并编辑代码,如下所示。
<?xml version="1.0" encoding="UTF-8"?>
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="hello" namespace="/" extends="struts-default">
<action name="helloWorld" class="com.mengma.action.HelloWorldAction">
<result name="success">/success.jspresult>
action>
package>
struts>
在.xml文件中,标签中定义了请求路径以及与其对应类的映射关系,子标签定义了处理结果与视图资源之间的映射关系。
.xml文件的详细配置信息将在后续教程中进行讲解。 读者无需担心这里的细节。
配置文件里有很多东西要写。 尤其是文件上的dtd信息如果手动写入的话非常容易出错。 同样,在解压后的-blank文件夹中,将WEB-INF/目录下的.xml文件复制到您创建的Web项目的src目录下,然后在此基础上进行修改和配置。
创建视图主页文件index.jsp
在该目录下创建一个名为index.jsp的页面文件,并在其中写入一个超链接来访问该对象。 这个链接指向的地址是.,如下图。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>首页title>
head>
<body>
<a href="${pageContext.request.contextPath }/helloWorld.action">
第一个 Struts2 程序!
a>
body>
html>
创建返回页面
下面创建一个名为.jsp的文件,作为对象处理成功后的返回页面,如下所示。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>成功页面title>
head>
<body>
您的第一个小程序执行成功,欢迎来到Struts2的世界!
body>
html>
启动项目并查看结果
将项目发布到服务器后,启动服务器,在浏览器地址栏中输入地址:8080//index.jsp。 浏览器将显示结果,如下所示。
点击图2中的超链接后,浏览器会发送一个以.结尾的请求,浏览器会显示如下结果。
从上图的显示结果可以看出,程序成功返回到.jsp页面,说明入口案例执行成功。
上面解释的入门级程序实际上就是从请求到响应结束的一个过程。 为了更直观地理解本例的整个执行流程,下面通过一个简单的执行流程图进行说明,如下图所示。
从下图可以看出
处理用户请求的完整流程
从上面的流程图可以看出,框架中对一个请求的处理大致可以分为以下几个步骤。
1)首先客户端浏览器发送一个()。
2)然后程序会调用然后询问这个请求是否需要调用一些东西。
3) 如果决定需要进行某个呼叫,则将请求的处理移交。
4)通过配置管理器()从配置文件(.xml)中读取框架的配置信息,找到需要调用的类。
5) 将创建一个实例。
6) 使用命名方式调用,所有配置的拦截器(,...)在调用前都会被依次调用。
7) 执行完成后,返回结果字符串,负责查找对应的结果字符串,然后执行。 通常会调用一些模板(JSP等)来渲染页面。
8) 返回生成的信息,期间拦截器会再次执行(与执行前的顺序相反)。