您的位置  > 互联网

基于MVC模式的轻量级Web框架,JavaWeb开发者的福音

它是一个软件组织推出的基于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) 返回生成的信息,期间拦截器会再次执行(与执行前的顺序相反)。