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

来源:互联网 发布:个人 软件著作权申请 编辑:程序博客网 时间:2024/06/05 10:52

实现了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必需的属性,指定该包的名字,该名字是该包被其他包引用的keyextends可选属性,指定该包继承其他包。一般选择继承框架提供的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>



原创粉丝点击