⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jworksparameterparser.java

📁 jworks program
💻 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 + -