Struts2基础复习系列(3)

本文深入探讨了Struts2中通配符映射的功能及其应用,包括直接配置、!访问形式、*通配符及_通配符的用法,并详细介绍了如何通过ActionContext、实现接口和ServletActionContext访问ServletAPI。

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

承接Struts2基础复习系列(2)

七、 通配符映射

在第一点的时候讲过,Servlet的缺点中有一条是如果servlet写了多个方法,那么进行操作的时候对于方法的选择必须通过传入一个参数来进行的,显然是不方便的,那么struts的这种通配符映射以及动态方法调用则相对好的解决了这样的问题。

1. 第一种:直接配置
<action name="user" class="com.struts.review1.UserAction">
    <result name="success">/success.jsp</result>
</action>

访问url:127.0.0.1:8080/projectName/user.action,默认执行execute方法,只执行一个方法的话显然不可取。

2. 第二种:直接配置
<action  method="login"  name="user" class="com.struts.review1.UserAction">
        <result name="success">/success.jsp</result>
</action>

访问url:127.0.0.1:8080/projectName/user.action,执行login方法,显然如果项目有多个action且多个方法的话,那么这种配置是不可取的,因为会导致action需要配置多个,那么使得struts.xml变的繁琐。

3. 第三种:!访问形式
<action name="user" class="com.struts.review1.UserAction">
    <result name="success">/success.jsp</result>
</action>

访问url:127.0.0.1:8080/projectName/user!方法名.action,
如:127.0.0.1:8080/projectName/user!login.action,访问的则是userAction的login方法。

4. 第四种:利用*通配符已经{1}确定方法
<actionmethod="{1}" name="user*" class="com.struts.review1.UserAction">
    <result name="success">/success.jsp</result>
</action>

访问url:127.0.0.1:8080/projectName/user方法名.action
如:127.0.0.1:8080/projectName/userlogin.action,访问的则是userAction的login方法。当然userlogin这样不方便看,可以将user*改成user_*也是一样的,只要满足这样的形式即可。

5. 第五种:利用_通配符形式,以及{1}{2}确定action和方法
<action method="{2}" name="*_*" class="com.struts.review1.{1}Action">
    <result name="success">/success.jsp</result>
</action>

访问url:127.0.0.1:8080/projectName/action类前缀_方法名.action
如:127.0.0.1:8080/projectName/User_login.action,访问的则是UserAction的login方法。当然不管上面的配置还是这里的都是区分大小写的,要记住,因为这里要匹配UserAction,因此_的第一个必须为大写,且第二个必须为匹配类中所存在的方法名。这种方法不推荐使用,因为覆盖范围过来,不好控制,也容易出错。

基本就这几种映射方法,当然这是最基本的,也可以通过上面的进行修改,比如运用到result也可以的,匹配name,然后{1}根据匹配的值来确定调用的jsp名。如下:

    <action method="{1}" name="user_*" class="com.struts.review1.UserAction">
        <result name="success">/{1}.jsp</result>
    </action>

访问url:127.0.0.1:8080/projectName/user_方法名.action
如:127.0.0.1:8080/projectName/userlogin.action,访问的则是userAction的login方法。然后因为在result中也匹配,因此当login方法返回success时,转发到login.jsp页面,因此要与匹配。

八、 访问Servlet API

有三种方式来访问ServletAPI。

1. 通过ActionContext来访问。

首先ActionContext ctx = ActionContext.getContext();获取ActionContext实例。而后通过调用相应的方法即可。
Object get(String key);类似调用request.getAttribute(String name)方法
void put(String key,Object val);类似调用request.setAttribute(String name,Object obj)方法
Map getParameters();类似调用request.getParameterMap()方法
Map getSession();返回Map对象,类似模拟一个Session实例
void setApplication(Map application);传入一个map实例,以键值对的形式转换成application的属性名和属性值
void setSession(Map session); 传入一个map实例,以键值对的形式转换成session的属性名和属性值

2. 实现接口的方式直接访问Servlet API

实现ServletContextAware,ServletRequestAware,ServletResponseAware接口,可以获取到相应的request,response,context实例,但是使用这种方法又将Servlet容器与action耦合在一起了。

3. 使用ServletActionContext访问ServletAPI

为了能够直接访问ServletAPI,Struts2提供了一个名为ServletActionContext的工具类,通过这个类可以直接访问ServletAPI。主要方法如下:
 ServletActionContext方法

1. 用户与权限管理模块 角色管理: 学生:查看实验室信息、预约设备、提交耗材申请、参与安全考核 教师:管理课题组预约、审批学生耗材申请、查看本课题组使用记录 管理员:设备全生命周期管理、审核预约、耗材采购与分发、安全检查 用户操作: 登录认证:统一身份认证(对接学号 / 工号系统,模拟实现),支持密码重置 信息管理:学生 / 教师维护个人信息(联系方式、所属院系),管理员管理所有用户 权限控制:不同角色仅可见对应功能(如学生不可删除设备信息) 2. 实验室与设备管理模块 实验室信息管理: 基础信息:实验室编号、名称、位置、容纳人数、开放时间、负责人 功能分类:按学科(计算机实验室 / 电子实验室 / 化学实验室)标记,关联可开展实验类型 状态展示:实时显示当前使用人数、设备运行状态(正常 / 故障) 设备管理: 设备档案:名称、型号、规格、购置日期、单价、生产厂家、存放位置、责任人 全生命周期管理: 入库登记:管理员录入新设备信息,生成唯一资产编号 维护记录:记录维修、校准、保养信息(时间、内容、执行人) 报废处理:登记报废原因、时间,更新设备状态为 "已报废" 设备查询:支持按名称、型号、状态多条件检索,显示设备当前可用情况 3. 预约与使用模块 预约管理: 预约规则:学生可预约未来 7 天内的设备 / 实验室,单次最长 4 小时(可设置) 预约流程:选择实验室→选择设备→选择时间段→提交申请(需填写实验目的) 审核机制:普通实验自动通过,高危实验(如化学实验)需教师审核 使用记录: 签到 / 签退:到达实验室后扫码签到,离开时签退,系统自动记录实际使用时长 使用登记:填写实验内容、设备运行情况(正常 / 异常),异常情况需详细描述 违规管理:迟到 15 分钟自动取消预约,多次违规限制预约权限 4. 耗材与安全管理模块 耗材管理: 耗材档案:名称、规格、数量、存放位置、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值