手机版

Struts1之全球资源定位器(统一资源定位符)截取_动力节点爪哇学院整理

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

结构一之全球资源定位器(统一资源定位符)截取

先我们来对ActionServlet深层次进行分析。我们用断点的调试的方式来看底层源码。因为这个实例是邮政方式提交,所以将断点设置到doPost方法上。

我们调试运行程序,进入doPost里面的方法:

这个方法非常重要是ActionServlet运行的核心方法。

我们进入这个方法:

再继续进入:

我们赫然发现了这样一个方法就是processPath方法,这个方法就是截取字符串的方法。这个方法的源代码如下:

/** *识别并返回路径组件(来自请求URI),*我们将使用它来选择要匹配的代码操作映射/代码。*如果无法识别这样的路径,请创建错误响应并返回* codenull/code ./p * * @param请求我们正在处理的小型应用程序请求* @param响应我们正在创建的小型应用程序响应* * @如果出现输入/输出错误,就会引发IOException */受保护的字符串进程路径请求,HttpServletResponse响应)引发IOException {字符串路径=null//对于前缀匹配,在路径信息(如果有)上匹配路径=(字符串)请求。getattribute(INCLUDE _ PATH _ INFO);if(path==null){ path=request。getPathInfo();} if(((路径!=null)(路径。length()0)){ return(路径);} //对于扩展匹配,剥离模块前缀和扩展路径=(字符串)请求。getattribute(INCLUDE _ SERVLET _ PATH);if(path==null){ path=request。getservlet path();}字符串前缀=模块图get prefix();if(!path.startsWith(前缀)){ String msg=getInternal().getMessage(' processPath ');日志。错误(消息“”请求。GetRequesturi());回应。sender error(HttpServletresponse .SC_BAD_REQUEST,msg);返回null}路径=路径。子串(前缀。length());(同Internationalorganizations)国际组织斜杠=路径。的last index('/');int period=path.lastIndexOf(' . ');if(句点=0)(句点斜杠)){ path=path.substring(0,句点);}返回(路径);} 分析一下这段代码:

路径=(字符串)请求。GetAttribute(INCLUDE _ PATH _ INFO);if(path==null){ path=request。getPathInfo();} if(((路径!=null)(路径。length()0)){ return(路径);} 这段代码首先判断一下javax。servlet。包括。路径信息是否存在路径信息,这里要知道当当一个页面是以RequestDispatcher.include方式显示的话,这个属性值才存在。所以这里没有值,就会进入path=request.getPathInfo()程序中,这里的getPathInfo获取的值是相对小型应用程序的路径信息。

//对于扩展匹配,剥离模块前缀和扩展路径=(字符串)请求。getattribute(INCLUDE _ SERVLET _ PATH);if(path==null){ path=request。getservlet path();}字符串前缀=模块图get prefix();if(!path.startsWith(前缀)){ String msg=getInternal().getMessage(' processPath ');日志。错误(消息“”请求。GetRequesturi());回应。sender error(HttpServletresponse .SC_BAD_REQUEST,msg);返回null}这一段代码是判断javax。servlet。包括。servlet _路径是否存在值,这个也是当一个页面是以equestDispatcher.include方式显示的话,这个属性值才存在,所以这里的值没有。之后进入路径=请求。getservlet path();这个方法是获得返回请求上呼吸道感染上下文后的子串,所以这里的返回值就是"/"和访问页面名称和后缀(这里和我的手动音量调节实例截取的是不是一样的道理)。随后进入下面代码:

路径=路径。子串(前缀。length());(同Internationalorganizations)国际组织斜杠=路径。的last index('/');intperiod=path.lastIndexOf(' . ');if(句点=0)(句点斜杠)){ path=path.substring(0,句点);}返回(路径);这里的方法主要和我的上面的那里是一样的,主要就是去掉后缀。

版权声明:Struts1之全球资源定位器(统一资源定位符)截取_动力节点爪哇学院整理是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。