java - por - ¿Cómo establecer un parámetro en HttpServletRequest?
request setattribute (4)
A partir de su pregunta, creo que lo que está tratando de hacer es almacenar algo (un objeto, una cadena ...) para llegar a otro servlet, utilizando RequestDispatcher (). Para hacer esto, no necesita establecer un parámetro sino un atributo usando
void setAttribute(String name, Object o);
y entonces
Object getAttribute(String name);
Estoy usando javax.servlet.http.HttpServletRequest para implementar una aplicación web.
No tengo ningún problema para obtener el parámetro de una solicitud utilizando el método getParameter . Sin embargo, no sé cómo configurar un parámetro en mi solicitud.
Si realmente quiere hacer esto, cree un HttpServletRequestWrapper.
public class AddableHttpRequest extends HttpServletRequestWrapper {
private HashMap params = new HashMap();
public AddableingHttpRequest(HttpServletRequest request) {
super(request);
}
public String getParameter(String name) {
// if we added one, return that one
if ( params.get( name ) != null ) {
return params.get( name );
}
// otherwise return what''s in the original request
HttpServletRequest req = (HttpServletRequest) super.getRequest();
return validate( name, req.getParameter( name ) );
}
public void addParameter( String name, String value ) {
params.put( name, value );
}
}
Lo siento, pero por qué no usar la siguiente construcción:
request.getParameterMap().put(parameterName, new String[] {parameterValue});
No puede, no usa la API estándar. HttpServletRequest
representa una solicitud recibida por el servidor, por lo que agregar nuevos parámetros no es una opción válida (en lo que respecta a la API).
En principio, podría implementar una subclase de HttpServletRequestWrapper
que envuelva la solicitud original e intercepte los métodos getParameter()
y pase la solicitud envuelta cuando reenvíe.
Si realiza esta ruta, debe usar un Filter
para reemplazar su HttpServletRequest
con un HttpServletRequestWrapper
:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if (servletRequest instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// Check wether the current request needs to be able to support the body to be read multiple times
if (MULTI_READ_HTTP_METHODS.contains(request.getMethod())) {
// Override current HttpServletRequest with custom implementation
filterChain.doFilter(new HttpServletRequestWrapper(request), servletResponse);
return;
}
}
filterChain.doFilter(servletRequest, servletResponse);
}