Struts2学习笔记2

struts2配置详解:

 

Struts2中的配置文件

Web.xml----配置struts2过滤器

Struts.xml-----主配置文件 配置action信息

Struts-default.xml默认配置

Struts.propertis---属性配置

Struts-plugin.xml框架的插件配置文件

Struts2常量的配置:

可以在上面的五个文件中配置(由于struts-default.xmlstruts-plugin.xml是只读文件,位于jar包中,故不在这两个文件中修改和配置用户自己的常量)

常量配置的优先级:web.xml>struts.propertis>struts.xml,即常量在三个文件中都配置了,以优先级高的文件配置为准

下面以编码常量配置为例说明:

struts.xml中配置:<constant name="struts.i18n.encoding" value="UTF-8"/>,我们修改value值来配置

struts.propertis中配置:struts.i18n.encoding=utf-8

web.xml中配置:这里是配置在过滤器中的:代码如下

<filter>

<filter-name>struts2</filter-name>

<filter-class>

org.apache.struts2.dispatcher.FilterDispatcher

</filter-class>

<init-param>

<param-name>struts.i18n.encoding</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

常见的常量配置见 http://xiaolaogong.iteye.com/blog/470330

建议采用struts.propertis文件配置常量(个人习惯)

Struts.xml中namespace的使用:

Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀(前缀名字namespace。使用namespace可以有效的避免action重名的冲突,特别是多人开发中

Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的packageaction的请求。
   “/表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个package中查找。
   “”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。

struts2的基本流程,当客户发生请求以后,触发struts2FilterDispatcher过滤器(默认配置是所有请求都会触发。如果请求是以.action(可以根据个人习惯在struts.propertis文件中配置后缀常量如:.do)结尾, FilterDispatcher会去struts.xml里面查找action元素的name(匹配的不光是name属性,还有packagenamespace属性属性配置),找到匹配的,然后运行其class 属性指定的类。

前台
<s:form action="Hello">------------------<=><form: action="Hello.action">
<s:textfield label="Please enter your name" name="name"/>
<s:submit/>
</s:form> 

将产生一个如下的链接的请求: http://Hostname:port/appname/Hello.action
在定义Action的名字的时候不要使用和 /,最好使用英文字母和下划线。(可以在struts.propertis中配置action常量,指定action的命名规则)

每当struts2框架接受到一个请求的时候,它会去掉HostApplication和后缀等信息,得到Action的名字,例如如下的请求将得到Welcome这个Action。 

http://www.planetstruts.org/struts2-mailreader/Welcome.action

Struts2在匹配一个action的时候,先到它指定的命名空间中去找,如果没有再到这个默认的命名空间中去找。

Struts2还支持根命名空间(/),当一个request直接请求context path下面的资源时,struts2会首先到根命名空间下去寻找匹配的action,例如请求是http://server/myapp/bar.action,那么我们首先会去/命名空间下去寻找这个action

关于如何从URI映射到一个action中:

1.获得请求路径的URI,例如url是:http://server/myapp/path1/path2/path3/test.action

2.首先寻找namespace/path1/path2/path3package,如果存在这个package,则在这个package中寻找名字为testaction,若找到则执行,否则报错;如果不存在这个package则转步骤3

3.寻找namespace/path1/path2package,如果存在这个package,则在这个package中寻找名字为testaction,若找到则执行,否则报错;如果不存在这个package则转步骤4

4.寻找namespace/path1package,如果存在这个package,则在这个package中寻找名字为testaction,若找到则执行,否则报错;

如果仍然不存在这个package,就去namaspace为空字符串的package下面去找名字为testaction,如果还是找不到,页面提示找不到action


这里有几点特殊的情况要说明一下,如下所示:

1.如果匹配到了多个package,比如上述流程中有多个namespace/path1/path2/path3

package,此时按照package出现的顺序从前向后查找action,直至找完为止。(执行最后一个)

2.如果在一个package中有多个name属性相同的action,那么执行最后一个action。比如上述流程中,有一个namespace/path1/path2/path3package,它里面含有多个名字为testaction,那么选择最后一个执行。

Package:

Package的可以使用的属性:
属性

是否必须

说明

name

Package的表示,为了让其他的package引用

extends

从哪个package继承行为

namespace

参考Namespace配置说明

abstract

定义这个package为抽象的,这个package中不需要定义action

Abstract下面不允许出现action的配置:如struts-default.xml

<!--EndFragment-->
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值