📄 jworksparameterparser.java
字号:
/**
* $RCSfile: JWorksParameterParser.java,v $
* $Revision: 1.2 $
* $Date: 2004/08/26 11:10:26 $
*
* Copyright (C) 2002-2004 softme.org (Softme Studio). All rights reserved.
* ===================================================================
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS INC. OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*/
package org.softme.jworks.util.parser;
import javax.servlet.http.HttpServletRequest;
import org.apache.turbine.services.resources.TurbineResources;
import org.apache.turbine.util.Log;
import org.apache.turbine.util.parser.DefaultParameterParser;
import org.softme.util.StringUtils;
/**
* <p>
* JWorks Parameter Parser
* </p>
* <p>
* 覆盖Turbine默认的Action名称解析方法: <br>
* 如果为 <code>JWorks</code> 的Action, 名称从Request对象的ServletPath中截取,
* 返回类型为:"foo.action"。 <br>
* Action调用格式: "http://hostname/namespace/foo.action" <br>
* 如果为 <code>Turbine</code> 的Action, 名称从Request对象的Parameter中获取, 范围类型为: "foo"。
* <br>
* Action调用格式: "http://hostname/path/page?action=foo"
* </p>
*
* @author <a href="mailto:brokendoor@sina.com">boon xiong </a>
* @version CVS $Revision: 1.2 $ $Date: 2004/08/26 11:10:26 $
*/
public class JWorksParameterParser extends DefaultParameterParser {
private static final String REQUEST_ENCODING = "request.encoding";
/**
*
* @see org.apache.turbine.util.ValueParser#getString(java.lang.String)
*/
public String getString(String name) {
Log.debug("-------JWorksParameterParser getString() : name = " + name);
// 截断Turbine对Action名称的解析方法
if (name.equalsIgnoreCase("action")) {
String actionName = "";
Log.debug("---Get Action Name ------");
// 判断是否采用WebWork2的Action解析语法
if (isJWorksAction(this.getRequest())) {
Log.debug("---Using jWorks Action Name ------");
actionName = getActionName(this.getRequest());
Log.debug("Action Name: " + actionName);
Log.debug("------------------------------");
} else {
Log.debug("---Using Turbine Action Name ------");
actionName = super.getString(name);
Log.debug("Action Name: " + actionName);
Log.debug("------------------------------");
}
return actionName;
}
// BUGFIXED 其他参数的解析
Log.debug("--Using Turbine ValueParser getString(): name = " + name);
String value = super.getString(name);
// JWorks 编码处理
String encode =
TurbineResources.getString(REQUEST_ENCODING, "GBK");
if (encode!=null && !encode.equals(""))
value = StringUtils.encode(value, encode);
Log.debug("--Encoded: value = " + value);
Log.debug("------------------------------");
return value;
}
/**
* 获取请求路径
*
* @param request
* @return 完整的请求路径
*/
public String getPathInfo(HttpServletRequest request) {
String servletPath = request.getPathInfo();
Log.debug("getPathInfo=" + servletPath);
String s = request.getServletPath();
Log.debug("getServletPath()=" + s);
servletPath = s + servletPath;
return servletPath;
}
/**
* 判断Request对象中是否包含JWorksAction语法的Action调用
*
* @param pathInfo
* @return
*/
public boolean isJWorksAction(HttpServletRequest request) {
int idx = this.getPathInfo(request).lastIndexOf(".action");
return (idx == -1) ? false : true;
}
/**
* 从 <code>request</code> 对象中分析ActionName. <br>
* 操作名称为"foo.action"格式
*
* @return the name or alias of the action to execute.
*/
public String getActionName(HttpServletRequest request) {
return getActionName(this.getPathInfo(request)) + ".action";
}
/**
* Determine action name by extracting last string and removing extension
* (i.e., /.../.../Foo.action -> Foo).
*
* @param name
* the full action path.
* @return the action name stripped of path/context info.
*/
public String getActionName(String name) {
// Get action name ("Foo.action" -> "Foo" action)
int beginIdx = name.lastIndexOf("/");
int endIdx = name.lastIndexOf(".");
return name.substring(((beginIdx == -1) ? 0 : (beginIdx + 1)),
(endIdx == -1) ? name.length() : endIdx);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -