java怎么获取url上的参数

Python017

java怎么获取url上的参数,第1张

解析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)

}