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截取的实现方法
# 详解
相关文章:
如何快速建站并高效导出源代码?
如何在阿里云域名上完成建站全流程?
北京制作网站的公司,北京铁路集团官方网站?
股票网站制作软件,网上股票怎么开户?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
内部网站制作流程,如何建立公司内部网站?
建站之星下载版如何获取与安装?
如何通过虚拟机搭建网站?详细步骤解析
网站制作新手教程,新手建设一个网站需要注意些什么?
购物网站制作公司有哪些,哪个购物网站比较好?
如何用5美元大硬盘VPS安全高效搭建个人网站?
再谈Python中的字符串与字符编码(推荐)
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何通过FTP空间快速搭建安全高效网站?
如何快速登录WAP自助建站平台?
寿县云建站:智能SEO优化与多行业模板快速上线指南
建站之星伪静态规则如何正确配置?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何在万网自助建站中设置域名及备案?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
专业网站建设制作报价,网页设计制作要考什么证?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何通过老薛主机一键快速建站?
ui设计制作网站有哪些,手机UI设计网址吗?
家庭服务器如何搭建个人网站?
湖北网站制作公司有哪些,湖北清能集团官网?
建站之星代理如何获取技术支持?
如何通过宝塔面板实现本地网站访问?
如何快速搭建高效香港服务器网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
建站之星如何防范黑客攻击与数据泄露?
如何在IIS中新建站点并配置端口与IP地址?
制作旅游网站html,怎样注册旅游网站?
如何正确选择百度移动适配建站域名?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何用腾讯建站主机快速创建免费网站?
建站之星官网登录失败?如何快速解决?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
建站之星如何配置系统实现高效建站?
建站之星如何快速解决建站难题?
电商网站制作公司有哪些,1688网是什么意思?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何通过虚拟主机快速完成网站搭建?
如何快速搭建二级域名独立网站?
建站之星在线版空间:自助建站+智能模板一键生成方案
公司网站制作需要多少钱,找人做公司网站需要多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。