javaurl取参数
㈠ java重定向接受参数问题
在Java Web开发中,处理重定向时接受参数的问题,可以通过以下几种方式解决:
使用Session或Application对象:
- Session:由于session的生命周期跨越多个请求,可以在一个请求中将参数存入session,然后在重定向后的请求中从session中取出参数。这种方式适用于需要在用户会话期间保持数据的情况。
- Application:如果需要在整个应用程序范围内共享数据,可以使用application对象。但通常,对于用户特定的数据,session是更合适的选择。
使用URL重写:
- 在重定向的URL中附加查询字符串参数。这种方式简单直接,但不适用于传递大量数据或敏感信息,因为所有参数都会暴露在URL中。
改用RequestDispatcher的forward方法:
- 如果重定向不是必须的,可以考虑使用request.forward方法进行页面跳转。这种方法是在服务器端进行的,客户端浏览器不知道跳转的发生,因此可以在forward的目标页面中直接访问原始request对象中的参数。
注意事项:
- request的生命周期:request对象的生命周期与一个请求响应周期相对应。一旦请求结束,request对象及其包含的数据将被销毁。因此,不能直接在重定向后的新请求中访问原始request对象的参数。
- session的管理:使用session时,需要注意session的超时设置和失效机制,以确保数据的及时清理和安全性。
综上所述,在处理Java Web开发中的重定向接受参数问题时,可以根据具体需求选择合适的方法,如使用session、application对象,或者改用request.forward方法进行页面跳转。同时,需要注意各种方法的使用场景和限制条件。
㈡ java解析出url请求的路径和参数键值对类
解析url,本想用正则表达式处理,但正则表达式速度较慢。用split处理一下就可以了。
packageRequestPackage;
importjava.util.HashMap;
importjava.util.Map;
publicclassCRequest{
/**
*解析出url请求的路径,包括页面
*@paramstrURLurl地址
*@returnurl路径
*/
publicstaticStringUrlPage(StringstrURL)
{
StringstrPage=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];
}
}
}
returnstrPage;
}
/**
*去掉url中的路径,留下请求参数部分
*@paramstrURLurl地址
*@returnurl请求参数部分
*/
(StringstrURL)
{
StringstrAllParam=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];
}
}
}
returnstrAllParam;
}
/**
*解析出url参数中的键值对
*如"index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
*@paramURLurl地址
*@returnurl请求参数部分
*/
publicstaticMap<String,String>URLRequest(StringURL)
{
Map<String,String>mapRequest=newHashMap<String,String>();
String[]arrSplit=null;
StringstrUrlParam=TruncateUrlPage(URL);
if(strUrlParam==null)
{
returnmapRequest;
}
//每个键值为一组www.2cto.com
arrSplit=strUrlParam.split("[&]");
for(StringstrSplit: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],"");
}
}
}
returnmapRequest;
}
}
测试类
packageRequestPackage;
importjava.util.Map;
publicclassTestCRequest{
/**用于测试CRequest类
*@paramargs
*/
publicstaticvoidmain(String[]args){
//请求url
Stringstr="index.jsp?Action=del&id=123&sort=";
//url页面路径
System.out.println(CRequest.UrlPage(str));
//url参数键值对
StringstrRequestKeyAndValues="";
Map<String,String>mapRequest=CRequest.URLRequest(str);
for(StringstrRequestKey:mapRequest.keySet()){
StringstrRequestValue=mapRequest.get(strRequestKey);
strRequestKeyAndValues+="key:"+strRequestKey+",Value:"+strRequestValue+";";
}
System.out.println(strRequestKeyAndValues);
//获取无效键时,输出null
System.out.println(mapRequest.get("page"));
}
}
测试代码运行效果
index.jsp
key:id,Value:123;key:sort,Value:;key:action,Value:del;
null
㈢ java URL 添加参数的几种简单方式
主要有三种方式,先给大家第一种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);
}
㈣ java 接收url中参数带 % %传过来的值
%是URL中的转义符,比如 %20 表示空格,如果你要表达一个%本身,需要使用 %25表示。
js中可以使用 escape() 来编码。
㈤ java 怎么获取一个url最终指向了哪里
java中确定url指向最终是靠页面跳转实现的。
一、跳转到新页面,并且是在新窗口中打开页面:
function openHtml()
{
//do someghing here...
window.open("xxxx.html");
}
window是一个javascript对象,可以用它的open方法,需要注意的是,如果这个页面不是一相相对路径,那么要加“http://”,比如:
function openHtml()
{
window.open("http://www..com");
}
二、在本页面窗口中跳转:
function totest2()
{
window.location.assign("test2.html");
}
如果直接使用location.assgin()也可以,但是window.location.assign()更合理一些,当前窗口的location对象的assign()方法。
另外,location对象还有一个方法replace()也可以做页面跳转,它跟assign()方法的区别在于:
replace() 方法不会在 History 对象中生成一个新的纪录。当使用该方法时,新的 URL 将覆盖 History 对象中的当前纪录。