Struts2(7):struts.xml中的<package>元素

本文介绍了如何在Struts2框架中配置Action处理类,并详细解释了&lt;package&gt;元素及其属性的作用,包括name、extends、namespace和abstract等属性的含义及用途。

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

实现了Action处理类之后,就可以在struts.xml文件中配置该Action了。配置Action就是让Struts2知道哪个Action处理哪个请求,也就是完成用户请求和Action之间的对应关系。我们可以认为,Action是Struts2的基本“程序单位”。

Struts2使用<package>来组织Action,因此将Action定义放在包定义下完成,定义Action使用<action>元素完成。

Struts2框架中核心组件就是Action和拦截器,Struts2框架使用<package>来管理Action和拦截器。每个<package>就是多个Action、多个拦截器、多个拦截器引用的集合。

定义<package>元素时可以指定如下几个属性:

<package>元素的属性
属性名说明
name必需的属性,指定该包的名字,该名字是该包被其他包引用的key
extends可选属性,指定该包继承其他包。一般选择继承框架提供的struts-default包。
namespace可选属性,定义该包的命名空间。
abstract可选属性,指定该包是否为一个抽象包。抽象包不能包含Action定义。

struts2-core-2.1.8.1.jar里已经定义了struts-default抽象包,该包下包含了大量结果类型定义,拦截器定义,拦截器引用定义等,这些定义是配置普通Action的基础,所以开发者定义的package通常应该继承struts-default包。

<package>的命名空间---namespace属性:

从前面的内容可以看出,每次定义一个package元素时,都可以指定一个namespace属性,用于指定该包对应的命名空间。

Struts2之所以提供命名空间的功能,主要是为了处理同一个Web应用中包含同名Action的情形。有了命名空间的话,同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。

Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。如果没有为<package>指定namespace属性,则该包下的所有Action处于默认的包空间下。

当某个包指定了命名空间后,该包下所有Action处理的URL应该是命名空间+Action名。譬如:

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>

<package name="demo" extends="struts-default" namespace="/test">
<action name="login" class="action.Login">
<result name="success" type="dispatcher">/ok.jsp</result>
<result name="login" type="redirect">/login.jsp</result>
</action>
</package>

</struts>
上面配置文件为<package>元素指定了namespace属性为“/test”,那么此时login.jsp中的<form>的action属性就不再是"login",而是"test/login":

login.jsp :

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<form action="test/login" method="post">
姓名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值