Struts2(一)

本文详细介绍了Struts2框架的基础概念,包括三层架构和Struts2在其中的位置,以及Struts2的入门步骤、执行过程和配置文件解析。通过实例展示了如何搭建Struts2环境、创建动作类和访问方式,同时结合Struts2与Hibernate整合实现客户列表查询,为初学者提供了全面的入门指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Struts2基本概念

1.1 三层架构和三大框架各自的位置

1.1.1 三层架构

我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器/服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多。

三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面:

  • 表现层:

    也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web层,web需要接收http请求,完成http响应。

    表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。

    表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。

    表现层的设计一般都使用MVC模型。(MVC是表现层的设计模型,和其他层没有关系)

  • 业务层:

    也就是我们常说的service层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web层依赖业务层,但是业务层不依赖web层。

    业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制)

  • 持久层:

    也就是我们是常说的dao层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。

    通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。

1.1.2 三大框架和三层架构的关系

image-20200604183345906

1.2 Struts2概述

Struts2是一种基于MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中。目前掌握Struts2框架几乎成为Web开发者的必备技能之一。

在介绍Struts2之前,先来认识一下Struts1。Struts1是最早的基于MVC模式的轻量级Web框架,它能够合理的划分代码结构,并包含验证框架、国际化框架等多种实用工具框架。但是随着技术的进步,Struts1的局限性也越来越多的暴露出来。为了符合更加灵活、高效的开发需求,Struts2框架应运而生。

Struts2是Struts1的下一代产品,是在 Struts1和WebWork技术的基础上进行合并后的全新框架(WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架,它也是一个MVC框架)。虽然Struts2的名字与Struts1相似,但其设计思想却有很大不同。实质上,Struts2是以WebWork为核心的,它采用拦截器的机制来处理用户的请求。这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts2可以理解为WebWork的更新产品。

Struts2拥有优良的设计和功能,其优势具体如下:

  • 项目开源,使用及拓展方便,天生优势。
  • 提供Exception处理机制。
  • Result方式的页面导航,通过Result标签很方便的实现重定向和页面跳转。
  • 通过简单、集中的配置来调度业务类,使得配置和修改都非常容易。
  • 提供简单、统一的表达式语言来访问所有可供访问的数据。
  • 提供标准、强大的验证框架和国际化框架。
  • 提供强大的、可以有效减少页面代码的标签。
  • 提供良好的Ajax支持。
  • 拥有简单的插件,只需放入相应的JAR包,任何人都可以扩展Struts2框架,比如自定义拦截器、自定义结果类型、自定义标签等,为Struts2定制需要的功能,不需要什么特殊配置,并且可以发布给其他人使用。
  • 拥有智能的默认设置,不需要另外进行繁琐的设置。使用默认设置就可以完成大多数项目程序开发所需要的功能。

2. Struts2的入门

2.1 Struts2环境搭建

2.1.1 下载struts2开发包

Struts2的官网: https://struts.apache.org/

img

2.1.2 Struts2开发包目录介绍

解压后的目录结构如下:

image-20200604192426425

2.1.3 搭建步骤

2.1.3.1 第一步:拷贝struts2必备jar包到web工程的lib目录

要进行struts2的基本的开发,可以参考struts-2.3.24中的apps下的一些示例代码,其中struts2-blank.war是一个struts2的空的工程。我们只需要将struts2-blank.war解压后进入到WEB-INF下的lib中查看。

image-20200604192712061

2.1.3.2 第二步:在类的根路径下创建一个名称为struts.xml的文件,并导入约束

在开发中需要将struts.xml文件引入到工程的src下,因为src下内容发布到web服务器中就是WEB-INF下的classes中。

img

<?xml version="1.0" encoding="UTF-8"?>
<!-- 导入约束:
    约束的位置:在struts2的核心jar包中
            struts2-core-2.3.24.jar中包含一个名称为:
                struts-2.3.dtd的约束文件
-->
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts></struts>
2.1.3.3 第三步:在web.xml配置struts2的核心控制器

Struts2框架要想执行,所有的请求都需要经过这个前端控制器(核心过滤器)

<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
         version="4.0">
    <!-- 配置struts2的核心过滤器 -->
    <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>
</web-app>
2.1.3.4 验证搭建成功与否

把应用部署到tomcat中,启动tomcat,不报异常则表示搭建成功。

2.2 Struts2入门案例

2.2.1 案例需求

通过点击超链接发送请求,由Struts2中类来负责接收,并且在控制台输出接收到了的语句。

2.2.2 案例实现

2.2.2.1 第一步:编写index.jsp

img

<%@ 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>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>struts2的入门案例</title>
</head>
<body>
<%--struts2的核心控制默认会处理以.action为后缀的url,或者是没有任何后缀的url --%>
<a href="${pageContext.request.contextPath}/hello">访问第一个struts2应用</a>
<a href="${pageContext.request.contextPath}/hello.action">访问第一个struts2应用.action</a>
</body>
</html>
2.2.2.2 第二步:编写Class
/**
 * 我们的第一个动作类。 
 * 动作类: 
 *    它就是一个概念。它就是struts2框架中用于处理请求的类。
 *    我们以后处理请求都写动作类。
 * 
 * @author wgy
 */
public class HelloAction {
   

	/**
	 * 我们的第一个动作方法
	 * 动作方法:
	 * 	 动作类中用于处理请求的方法
	 * 动作方法有编写规范:
	 * 	1、访问修饰符都是public
	 * 	2、方法的返回值一般都是String(但是可以是void)
	 *  3、方法都没有参数
	 * @return
	 */
	public String sayHello(){
   
		System.out.println("HelloAction的sayHello方法执行了。。。。"+this);
		return "success";
	}
}
2.2.2.3 第三步:在配置文件中配置我们的动作类
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <!-- 配置文件 -->
    <package name="p1" extends="struts-default">
        <action name="hello" class="com.wgy.web.action.HelloAction" method="sayHello">
            <result name="success" type="dispatcher">/success.jsp</result>
        </action>
    </package>
</struts>
2.2.2.4 第四步:编写success.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>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>执行结果页面</title>
</head>
<body>执行成功!
</body>
</html>
2.2.2.5 第五步:启动tomcat测试访问结果

2.3 Struts2的执行过程

2.3.1 执行时序

首先是,启动tomcat服务器,这时候会加载web.xml,当读到filter标签时,会创建过滤器对象。

Struts2的核心过滤器(StrutsPrepareAndExecuteFilter)会负责加载类路径下的struts.xml配置文件。

接下来,从客户端发送请求过来 先经过前端控制器(核心过滤器StrutsPrepareAndExecuteFilter),前端控制器会根据请求的名称在struts.xml中找到对应的配置,创建我们的动作类对象(每次访问时都会创建新的Action对象),然后执行指定的方法,根据方法的返回值找到Result的配置进行页面的跳转.最后响应浏览器。

image-20200604200648417

2.3.2 内部执行流程

Struts2框架在默认情况下核心控制器(StrutsPrepareAndExecuteFilter)默认会拦截以.action为后缀的请求,或者是没有任何后缀的请求。当拦截下来后,送入Struts2的核心内部。如下图所示:

image-20200604200635414

我们通过上面的图解,应该明确在实际开发中我们用struts2要做哪些:

  1. 写动作类
  2. 写jsp
  3. 写配置文件

其中,又以配置文件为重。

3. Struts2的配置文件详解

3.1 Struts2中的配置文件

3.1.1 配置文件说明

在struts2中给我们提供了6个配置文件。他们的加载时机是tomcat启动服务一加载我们的应用时,就加载struts2的配置文件。

他们的加载顺序入如下:

顺序 配置文件名 所在位置 说明
1 default.properties struts2-core-2.3.15.3.jar\org\apache\struts2 不能修改
2 struts-default.xml struts2-core-2.3.15.3.jar 不能修改
3 strtuts-plugin.xml 在struts2提供的插件jar包中 不能修改
4 struts.xml 我们的应用中 我们修改的:推荐
5 struts.properties 我们的应用中 我们修改的
6 web.xml 我们的应用中 我们修改的,可以给过滤器配置参数

3.1.2 配置文件的注意事项

  1. Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。另一种是xml文件配置。我们推荐使用xml文件(它能描述层级关系)。
  2. 当多个配置文件中,有相同的参数,后加载的会把前面的值给覆盖了。

3.1.3 Struts2中的常用常量

常量定义在了default.properties配置文件中,体现形式都是key=value。所有的struts2应用都会用到这些常量。

常用的:

常量名 常量值 说明
struts.i18n.encoding UTF-8 应用中使用的编码
struts.objectFactory.spring.autoWire name 和spring框架整合有关
struts.multipart.parser jakarta 指定文件上传用的组件
struts.multipart.maxSize 2097152 文件上传总文件大小限制:2M
struts.action.extension action, 能进入Struts2框架内部的url地址后缀名。多个值用逗号分隔
struts.enable.DynamicMethodInvocation false 是否允许动态方法调用
struts.devMode false 是否是开发模式。开发模式:改了配置文件,不需要重启。输出更多的错误信息。开发阶段建议为true
struts.ui.theme xhtml 页面展示用的主题

3.2 Struts.xml中的标签详解

3.2.1 constant标签

<!-- constant标签:
    作用:
        用于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值