?? 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 + -