java修改參數
A. 在java中沒有指針,如何修改函數中參數的值
想通過函數改變參數的值,這點好像不可能,因為java的函數傳參是值傳遞,沒有C語言中的重命名和指針傳參方法。不過也有方法:在函數中通過return值將結果返回,在通過用要改變的參數接收返回值就可以了,不過這點好像和直接賦值沒多大區別,但如果函數體中賦值過程比較復雜,這個方法還是可行的。
B. java修改請求參數的值
網上查了一些資料,解決方案是使用Wrapper,重寫HttpServletRequestWrapper,如下:
package com.gdcn.bpaf.security.yale;
import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
@SuppressWarnings("unchecked")
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params;
public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
}
public Map getParameterMap() {
return params;
}
public Enumeration getParameterNames() {
Vector l = new Vector(params.keySet());
return l.elements();
}
public String[] getParameterValues(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
return (String[]) v;
} else if (v instanceof String) {
return new String[] { (String) v };
} else {
return new String[] { v.toString() };
}
}
public String getParameter(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
return strArr[0];
} else {
return null;
}
} else if (v instanceof String) {
return (String) v;
} else {
return v.toString();
}
}
}
�0�22.使用
//然後在另一個地方使用時,按下面這樣用,假如我要修改username的值
HashMap m=new HashMap(request.getParameterMap());
/*
關鍵部分,如果不轉換成String數組,如果在下面這樣是有時:
eg:
HttpSession session = request.getSession();
Map map = request.getParameterMap();
Set keySet = map.keySet();
for (Iterator iterator = keySet.iterator(); iterator.hasNext();)
{
String key = (String)iterator.next();
String values[] = (String[])map.get(key); //這個地方就會報錯,因為username一個String不能轉換成String數組
if (values.length == 1)
session.setAttribute(key, values[0]);
else
session.setAttribute(key, values);
}
異常
就會出現java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.String;
*/
//m.put("username", newusername); //這樣會報錯
m.put("username", new String[]{newusername}); //這就是對的
HttpServletRequest req = (HttpServletRequest) request;
com.gdcn.bpaf.security.yale.ParameterRequestWrapper wrapRequest=new com.gdcn.bpaf.security.yale.ParameterRequestWrapper(req,m);
request=wrapRequest; //這是rquest就和本身的request一樣了
C. java修改請求參數的值
java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap。網上查了一些資料,解決方案是使用Wrapper,重寫HttpServletRequestWrapper,如下:
Java代碼
package com.gdcn.bpaf.security.yale;
import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
@SuppressWarnings("unchecked")
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params;
public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
}
public Map getParameterMap() {
return params;
}
public Enumeration getParameterNames() {
Vector l = new Vector(params.keySet());
return l.elements();
D. java修改請求參數的值
網上查了一些資料,解決方案是使用Wrapper,重寫HttpServletRequestWrapper,如下:
package com.gdcn.bpaf.security.yale;
import java.util.Enumeration;
import java.util.Map;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
@SuppressWarnings("unchecked")
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params;
public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {
super(request);
this.params = newParams;
}
public Map getParameterMap() {
return params;
}
public Enumeration getParameterNames() {
Vector l = new Vector(params.keySet());
return l.elements();
}
public String[] getParameterValues(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
return (String[]) v;
} else if (v instanceof String) {
return new String[] { (String) v };
} else {
return new String[] { v.toString() };
}
}
public String getParameter(String name) {
Object v = params.get(name);
if (v == null) {
return null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
return strArr[0];
} else {
return null;
}
} else if (v instanceof String) {
return (String) v;
} else {
return v.toString();
}
}
}
�0�22.使用
//然後在另一個地方使用時,按下面這樣用,假如我要修改username的值
HashMap m=new HashMap(request.getParameterMap());
/*
關鍵部分,如果不轉換成String數組,如果在下面這樣是有時:
eg:
HttpSession session = request.getSession();
Map map = request.getParameterMap();
Set keySet = map.keySet();
for (Iterator iterator = keySet.iterator(); iterator.hasNext();)
{
String key = (String)iterator.next();
String values[] = (String[])map.get(key); //這個地方就會報錯,因為username一個String不能轉換成String數組
if (values.length == 1)
session.setAttribute(key, values[0]);
else
session.setAttribute(key, values);
}
異常
就會出現java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.String;
E. Java中如何改變參數的值(實現按址傳遞)
java方法中傳值和傳引用的問題是個基本問題,但是也有很多人一時弄不清。你的題目本身就有歧義,無法直接針對題目作答(因為java不存在類似c或c++那樣的傳址)。我從頭講起:
(一)基本數據類型:傳值,方法不會改變實參的值。
(二)對象類型參數:傳引用,方法體內改變形參引用,不會改變實參的引用,但有可能改變實參對象的屬性值。例如
public class TestFun4 {
public static void testStringBuffer(StringBuffer sb){
sb.append("java");//改變了實參的內容
}
public static void main(String[] args) {
StringBuffer sb= new StringBuffer("my ");
new TestFun4().testStringBuffer(sb);
System.out.println("sb="+sb.toString());//內容變化了
}
}
F. java修改請求參數的值
什麼請求,jsp+servlet的嗎?可以通過request.getParameters("paraName")獲得值恩
修改好的值,可以out.print('');的頁面
我們有學習小組也 希望一起學習進步 Java框架平台研發 378 437 335