Struts1之url截取_动力节点Java学院整理
发布时间 - 2026-01-11 03:05:47 点击率:次Struts1之url截取

先我们来对ActionServlet深层次进行分析。我们用断点的调试的方式来看底层源码。因为这个实例是post方式提交,所以将断点设置到doPost方法上。
我们debug运行程序,进入doPost里面的方法:
这个方法非常重要是ActionServlet运行的核心方法。
我们进入这个方法:
再继续进入:
我们赫然发现了这样一个方法就是processPath方法,这个方法就是截取字符串的方法。这个方法的源代码如下:
/**
* <p>Identify and return the path component(from the request URI) that
* we will use to select an <code>ActionMapping</code> with which todispatch.
* If no such path can be identified,create an error response and return
* <code>null</code>.</p>
*
* @param request The servlet request weare processing
* @param response The servlet response weare creating
*
* @exception IOException if an input/outputerror occurs
*/
protectedString processPath(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
String path = null;
// For prefix matching, match on the path info (if any)
path = (String) request.getAttribute(INCLUDE_PATH_INFO);
if (path == null) {
path = request.getPathInfo();
}
if ((path != null) && (path.length() > 0)) {
return (path);
}
// For extension matching, strip the module prefix and extension
path = (String) request.getAttribute(INCLUDE_SERVLET_PATH);
if (path == null) {
path = request.getServletPath();
}
String prefix = moduleConfig.getPrefix();
if (!path.startsWith(prefix)) {
String msg =getInternal().getMessage("processPath");
log.error(msg + " " + request.getRequestURI());
response.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
return null;
}
path = path.substring(prefix.length());
int slash = path.lastIndexOf("/");
int period = path.lastIndexOf(".");
if ((period >= 0) && (period >slash)) {
path = path.substring(0, period);
}
return (path);
}
分析一下这段代码:
path = (String)request.getAttribute(INCLUDE_PATH_INFO);
if (path == null) {
path = request.getPathInfo();
}
if ((path != null) && (path.length() > 0)) {
return (path);
}
这段代码首先判断一下javax.servlet.include.path_info是否存在路径信息,这里要知道当当一个页面是以RequestDispatcher.include方式显示的话,这个属性值才存在。所以这里没有值,就会进入path=request.getPathInfo()程序中,这里的getPathInfo获取的值是相对servlet的路径信息。
// For extension matching, stripthe module prefix and extension
path = (String) request.getAttribute(INCLUDE_SERVLET_PATH);
if (path == null) {
path = request.getServletPath();
}
String prefix = moduleConfig.getPrefix();
if (!path.startsWith(prefix)) {
String msg =getInternal().getMessage("processPath");
log.error(msg + " " + request.getRequestURI());
response.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
return null;
}
这一段代码是判断javax.servlet.include.servlet_path是否存在值,这个也是当一个页面是以equestDispatcher.include方式显示的话,这个属性值才存在,所以这里的值没有。之后进入path = request.getServletPath();这个方法是获得返回请求URI上下文后的子串,所以这里的返回值就是“/”和访问页面名称和后缀(这里和我的mvc实例截取的是不是一样的道理)。随后进入下面代码:
path = path.substring(prefix.length());
intslash = path.lastIndexOf("/");
intperiod = path.lastIndexOf(".");
if((period >= 0) && (period > slash)) {
path = path.substring(0, period);
}
return (path);
这里的方法主要和我的上面的那里是一样的,主要就是去掉后缀。
# Struts1之url截取
# Struct
# 中url截取的实现方法
# 详解
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
如何基于云服务器快速搭建个人网站?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何生成腾讯云建站专用兑换码?
如何在IIS中新建站点并配置端口与IP地址?
Python文件操作最佳实践_稳定性说明【指导】
JavaScript如何实现路由_前端路由原理是什么
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
微信小程序 canvas开发实例及注意事项
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Laravel如何实现API速率限制?(Rate Limiting教程)
如何用美橙互联一键搭建多站合一网站?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel如何使用.env文件管理环境变量?(最佳实践)
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel如何处理和验证JSON类型的数据库字段
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
手机软键盘弹出时影响布局的解决方法
b2c电商网站制作流程,b2c水平综合的电商平台?
网站制作价目表怎么做,珍爱网婚介费用多少?
专业商城网站制作公司有哪些,pi商城官网是哪个?
Laravel如何发送系统通知?(Notification渠道示例)
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Laravel如何为API生成Swagger或OpenAPI文档
php结合redis实现高并发下的抢购、秒杀功能的实例
如何用花生壳三步快速搭建专属网站?
打造顶配客厅影院,这份100寸电视推荐名单请查收
黑客如何通过漏洞一步步攻陷网站服务器?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
创业网站制作流程,创业网站可靠吗?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何在IIS7上新建站点并设置安全权限?
如何在Tomcat中配置并部署网站项目?
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Laravel集合Collection怎么用_Laravel集合常用函数详解
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
如何在 Pandas 中基于一列条件计算另一列的分组均值

