解析url,本想用正则表达式处理,但正则表达式速度较慢。用split处理一下就可以了。 package RequestPackageimport java.util.HashMapimport java.util.Mappublic class CRequest {/** * 解析出url请求的
路径,包括页面 * @param strURL url地址 * @return url路径 */public static String UrlPage(String strURL){String strPage=null String[] arrSplit=null strURL=strURL.trim().toLowerCase() arrSplit=strURL.split("[?]") if(strURL.length()>0) { if(arrSplit.length>1) { if(arrSplit[0]!=null) { strPage=arrSplit[0] } } } return strPage }/** * 去掉url中的路径,留下请求
参数部分 * @param strURL url地址 * @return url请求参数部分 */private static String TruncateUrlPage(String strURL){String strAllParam=null String[] arrSplit=null strURL=strURL.trim().toLowerCase() arrSplit=strURL.split("[?]") if(strURL.length()>1) { if(arrSplit.length>1) { if(arrSplit[1]!=null) { strAllParam=arrSplit[1] } } } return strAllParam } /** * 解析出url参数中的
键值对 * 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中 * @param URL url地址 * @return url请求参数部分 */public static Map<String, String>URLRequest(String URL){Map<String, String>mapRequest = new HashMap<String, String>()String[] arrSplit=nullString strUrlParam=TruncateUrlPage(URL) if(strUrlParam==null){return mapRequest } //每个键值为一组 www.2cto.comarrSplit=strUrlParam.split("[&]") for(String strSplit:arrSplit){ String[] arrSplitEqual=null arrSplitEqual= strSplit.split("[=]") //解析出键值 if(arrSplitEqual.length>1) { //正确解析 mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]) } else { if(arrSplitEqual[0]!="") { //只有参数没有值,不加入 mapRequest.put(arrSplitEqual[0], "")} }} return mapRequest } } 测试类package RequestPackageimport java.util.Mappublic class TestCRequest { /**用于测试CRequest类 * @param args */public static void main(String[] args) {// 请求urlString str = "index.jsp?Action=del&id=123&sort=" //url页面路径System.out.println(CRequest.UrlPage(str)) //url参数键值对String strRequestKeyAndValues="" Map<String, String>mapRequest = CRequest.URLRequest(str) for(String strRequestKey: mapRequest.keySet()) { String strRequestValue=mapRequest.get(strRequestKey) strRequestKeyAndValues+="key:"+strRequestKey+",Value:"+strRequestValue+""}System.out.println(strRequestKeyAndValues) //获取无效键时,输出nullSystem.out.println(mapRequest.get("page")) }}如果是javaweb 项目,那么非常简单,直接调用 HttpServletRequest 对象的 .getParamter("参数名称") 方法即可得到。
如果是普通java 项目:
/**
* 获取网址的指定参数值
*
* @param url
*网址
* @param parameter
*参数名称
* @author cevencheng
* @return
*/
public static String getParameter(String url, String parameter, String defaultValue) {
try {
final String charset = "utf-8"
url = URLDecoder.decode(url, charset)
if (url.indexOf('?') != -1) {
final String contents = url.substring(url.indexOf('?') + 1)
HashMap<String, String>map = new HashMap<String, String>()
String[] keyValues = contents.split("&")
for (int i = 0i <keyValues.lengthi++) {
String key = keyValues[i].substring(0, keyValues[i].indexOf("="))
String value = keyValues[i].substring(keyValues[i].indexOf("=") + 1)
if (key.equals(parameter)) {
if (value == null || "".equals(value.trim())) {
return defaultValue
}
return value
}
map.put(key, value)
}
}
return null
} catch (Exception e) {
e.printStackTrace()
}
return null
}
主要有三种方式,先给大家第一种managed-bean,必须 scope设置为request
<managed-bean>
<managed-bean-name>nameBean</managed-bean-name>
<managed-bean-class>demo.NameBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>userName</property-name>
<value>#param.name</value>
</managed-property>
...
....
</managed-bean>
第二种方式:缺点是无法往后台传数据,当然你用javascript做一下动作也可以
<h:inputHidden id="userName" value="#{nameBean.userName}"/>
第三种方式,是直接在bean中获得,我认为这种应该是最实用、保险的方式。
public static String getRequestParameter(String name) {
return (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(name)
}