struts java_Java Struts2 (一)

本文详细介绍了Struts2框架,包括其起源、优势以及如何搭建开发环境。重点讲解了Struts2的核心配置,如struts.xml文件的结构、常量配置、动作和结果类型的设定。此外,还提到了在开发过程中如何避免常见问题,如Struts2配置文件的提示缺失,并给出了解决方案。最后,讨论了如何在动作类中访问Servlet API以及配置文件的分文件编写,以提升团队协作效率。

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

一、Struts2简介

1、Struts2概述

Struts2是Apache发行的MVC开源框架。注意:它只是表现层(MVC)框架。

2、Struts2的来历

Struts1:也是apache开发的一套mvc的开源框架。在2005年之前非常流行。

弊端:Struts1的核心控制器就是一个Servlet。随着使用者的增多,弊端开始出现。

Struts2:在long long ago,有一个设计超前的框架XWork,后来推出了XWork1和WebWork2。Struts2就是apache和OpenSymphony组织合并开发出来。

里面包含了WebWork2的核心及Struts的一些特性和功能。除此之外,和Struts1没有任何关系了。

二、搭建Struts2开发环境

1、下载Struts2开发包

http://struts.apache.org

2、开发包目录结构

45a04fde087b62d3c73977891a8993fb.png

3、搭建开发环境

3.1、拷贝必要jar包到classpath中

0225c4a294e35e069385342af808e9ed.png

拷贝哪些jar包?

找到Struts2自带的例子中,struts-blank的war包,在它的\WEB-INF\lib目录下的jar包全拷贝。

3.2、建立Struts2的配置文件

at the top of classpath(在最顶层的构建路径),建立一个默认名称为struts.xml的配置文件。

f1e2eafff106fdc6299b17fd0df4e6fd.png

注意:

1.文件名大小写。

2.创建位置。

3.该名称允许修改,但是我们一般不改。

3.3、配置控制器

a、配置位置:在web.xml中

b、配置什么:struts2已经写好了的一个过滤器。

结论:

struts2比struts1优秀的一个体现就是,它用了更为强大的过滤器作为控制器了。

799c890f91b036856b6a569647a47730.png

3.4、验证是否成功

部署应用,启动Tomcat,不报错表示搭建成功。

81c8f612688e16cc6488e70837b57aab.png

三、第一个Struts2案例

以下步骤是日后实际开发中经常重复的。

1、建立一个jsp文件

338f07e81a9d4ca0f91e3879c14aafc9.png

2、在struts.xml文件中配置

325a0f844334557145aa52611d5c8d6a.png

3、建立动作类和动作方法

bc5c474f14e3e38678d27885404fbe81.png

4、结果视图页面

2c2ca9a2a1080a80386a4f758e0cbcc8.png

5、测试:

1f25c13508919cb75c56dffa252ee53f.png

6、关于struts.xml没有提示的问题

分析原因:没有找到对应的dtd约束文件。

解决办法:

a.上网

b.不能上网:

3b93946e1ed84898604b5d40933cecd9.png

86007bb77f6d039d37d5cafe3f213162.png

四、第一个案例的执行过程

e9261621721e976fb781f860bf7aeff3.png

明确:

75417f37a60853d8ff522203f7e9112c.png

五、Struts2的配置文件

1、加载时机:

当应用被tomcat加载的时候,struts2的配置文件就已经被加载过了。

2、加载顺序

顺序

配置文件名

所在位置

说明

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

我们的应用中

我们修改的,可以给过滤器配置参数

注意:

1、Struts2提供了两种配置的方式。一种是key=value的方式,即使用.properties文件。另一种是xml文件配置。我们推荐使用xml文件(它能描述层级关系)。

2、当多个配置文件中,有相同的参数,后面的会把前面的值给覆盖了。

46355d8ca61e6dc0f28b4f62ba6263db.png

六、Struts2框架提供的常量

1、常用的常量

常量定义在了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

页面展示用的主题

2、在struts.xml中覆盖常量

使用元素进行覆盖

例如:

4e9cc2b6ddb9750d62b2c6e86ff422a0.png

7b9a896be867aee351253f632a004639.png

3、创建struts.properties文件覆盖

在应用的构建路径中创建一个struts.properties的文件。

b745cbb6da241220b68436099d47b92e.png

3、在web.xml中配置过滤器参数

11e22fad84bf3e90e1fb5ecbbfb9547f.png

七、xml配置文件的主要元素

1、package元素

1.1、作用:

在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。

1.2、属性:

name:包的名称。必须写。且必须唯一。

extends:一般情况下需要继承struts-default包,但不是必须的。不过如果不继承的话,将无法使用struts2提供的核心功能。

struts-default.xml中定义着struts-default这个包。而struts-default.xml是在我们的struts.xml加载之前加载。

abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有元素的包,就可以声明为抽象包。

namespace:名称空间。

名称空间 + 动作名称 = 访问路径

77585cb8773c86e98ce8adf0371c8b71.png

e82918a687d74abf96236f8d9844137b.png

1.3、packege中的namespace详解

namespace的默认值:

a.不写该属性

b.写了该属性,取值是一个"".

注意:默认值不是/

动作类的搜索顺序:

c3e08fdb47c5eabf7c790a81539638bf.png

2、action元素

2.1、作用:

配置动作用的。

2.2、属性:

name:动作名称

class:动作类全名。默认的动作类是:com.opensymphony.xwork2.ActionSupport

是在struts-default.xml中定义的

65a9ccc3ac6903bd14d341a7dbcd1e7a.png

要想替换默认动作类:

在应用的struts.xml中,package中加入:

7628092ecba8fb433dcb62a4cd4021ac.png

method:动作类中的方法名称。默认是public String execute(){}

要求:

1.public的

2.返回值必须是String

3.没有参数

2.3、动作类

a.方式一:动作类就是一个POJO(Plain Old Java Object原始的java对象),非常简单的javabean。

c9656fb1041ac78e7cafb51ca21150d0.png

b.方式二:动作类实现com.opensymphony.xwork2.Action接口。

常量:给动作方法返回值用的。用常量可以使你的应用规范和统一。

常量变量名

对应的值

说明

SUCCESS

success

动作方法执行一切OK

ERROR

error

动作方法执行时遇到了异常

INPUT

input

回显

LOGIN

login

一般转向登陆页面

NONE

none

不转向任何的视图

c.方式三:动作类继承com.opensymphony.xwork2.ActionSupport 推荐使用

ebd98143b630f74e1160803bfdbe6cdd.png

2.4、动作的访问

a.使用通配符:

53cc71be9d2f03e0594432af64d8e434.png

升级版:

a7575310576a7c01e4b23395cd8decb3.png

优先级:绝对匹配优先。使用通配符的按照在配置文件中的先后顺序进行匹配的。

b.动态方法调用

918b1b8b5174a841a5f2fa701ee324c0.png

5e94c4373911b1b5663e0459bdb9ca96.png

八、结果类型视图(逻辑结果视图)

前奏:该部分内容指的就是struts配置文件中的result元素的使用

1、result元素

作用:

为动作指定结果视图

属性:

name:逻辑视图的名称,对应着动作方法的返回值。默认值是success。

587f6acf2c131cdf64270fb8de483023.png

type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher。

4b929dcb887492d60419ef20be6c6b86.png

2、result元素中type的取值

type属性的取值在struts-default.xml中定义着。

7fe3c7e4c24da6dbe264170e43c9f7da.png

常用结果类型介绍:

dispatcher:(默认值)

使用请求转发,转向一个页面。

redirect:

使用重定向,转向一个页面。

b3bb98c6319e3133065b13f423bef1f5.png

redirectAction:注意:使用的是重定向。

a.重定向到另一个相同名称空间的动作。

c3c859296481a8ba9906a42365e6253d.png

b.重定向到不同名称空间的动作

5b56ca7ffef2069f1167bf634b76e948.png

chain:注意: 使用的是请求转发。

a.转发到另一个相同名称空间的动作。

4810ccbedc8355549d3273aa5c9ea7d1.png

b.请求转发到不同名称空间的动作

5e60171026dff22c4f296a65e85d3f5d.png

3、result元素中param子元素

在转发或者重定向到不同包下的动作时,都用到了result元素的子元素param。

param元素的作用:依赖注入(Dependence Injection)思想

我们通过struts-default.xml中的resultTypes元素中配置可以看出,每个结果类型视图其实都是靠一个类来实现的。而param元素就是将配置的参数,注入到该类中。

调用的是对应类的setter方法进行注入的。

例如:redirectAction结果视图

d8167224716e45b44ca7d96c84a554bd.png

该类中肯定会有对actionName和namespace属性的注入方法(setter方法)。

43e246540b9365102263a266edce690f.png

再比如:默认结果视图dispatcher

a479647dace6b4ca2aad8e3b502b4c58.png

da8e178245e17a0c8763a6dea632ceff.png

4、自定义结果类型

通过前面的内容,我们看出,其实结果类型就是一个类,这些类都实现了com.opensymphony.xwork2.Result接口。

或者继承自该接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport。

这些类都有一个doExecute方法,用于执行结果视图。

综上:我们也可以自己写一个结果视图。

例子:

输出CAPTCHA图像的结果类型。

CAPTCHA(Completely Automated Public Turing Test to Tell Computers and Humans Apart 全自动区分计算机和人类的图灵测试)————>简称:验证码。

第一步:写一个类,实现接口或者继承接口的实现类

d76afe3d9cd5cac996358e8eee3f5c91.png

第二步:在struts.xml文件中配置结果类型

4a94d3b854ebbfc5f8c215848e901124.png

第三步:在action配置时引用

79e03b69a2f706ca8522a2730841a51a.png

最终结果:

65962727fb2edeaaa2c89ffefc716517.png

扩展:通过可配置的参数,实现图像大小的调整

be1abc9fac9856c8d4bbf1e7e10a1c74.png

5、全局视图和局部视图

5.1、局部视图

370d2780b1a2f584046f56feb0b89760.png

5.2、全局视图

8c01c7a3842e92358a4a50c9618c6eeb.png

运行结果:

122bf19d3f3033d892916643dbbd5704.png

九、在动作类中访问Servlet的API

第一种方式:使用ServletActionContext类

2a430ea7009ae9183428027356800d8e.png

第二种方式:使用实现接口的方式

b67d782382cdfeac6dcc65266a38f1a6.png

a2fc427336a4acbcf3aa4f8b599ea60e.png

十、分文件编写框架配置文件

1、不分文件开发可能产生的问题

就类似于我们在写java类时,所有代码都写在一个类里,甚至写在一个方法里。

cb336246b522e035d4116be01286ff62.png

84f2c59211bfcc3ebc94e53c6955ea49.png

当3个人都checkout了struts.xml文件时,第一个人提交了,后面的人在没有更新就提交时,第一个人写的可能就白写了。

2、分文件编写Struts2的配置文件

f5b01cf879c7b1f04d2c44b8bf6c042e.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值