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