Java 将请求转发给tomcat';s错误页

Java 将请求转发给tomcat';s错误页,java,tomcat,servlets,Java,Tomcat,Servlets,我的web.xml中包含以下内容: <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/error/exception</location> </error-page> java.lang.Throwable /错误/异常 路径/error/exception是一个ser

我的web.xml中包含以下内容:

    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error/exception</location>
    </error-page>

java.lang.Throwable
/错误/异常
路径
/error/exception
是一个servlet

我的问题是:有没有一种方法可以转发导致web.xml中定义的错误页面出现异常的请求

上面创建了一个新的请求

事实并非如此。当然,除非您在servlet内部发送重定向,但这将是一个非常明显的错误


我需要导致异常的请求的请求正文

请求正文只能读取一次。只要你想再次阅读,客户端就不会再次发送。在正常的
应用程序/x-www-form-urlencoded
POST请求的情况下,服务器将在您通过
HttpServletRequest#getParameterMap()获得请求时读取请求正文并将其解析为请求参数。如果出于某种不明显的原因,您不想在一个漂亮的列表/表格中显示所有请求参数,那么您也可以基于请求参数映射重构请求主体。例如

String requestBody = toQueryString(request.getParameterMap());
// ...

公共静态字符串到querystring(映射参数){
StringBuilder queryString=新建StringBuilder();
for(条目参数:params.entrySet()){
for(字符串值:param.getValue()){
if(queryString.length()>0){
queryString.append(“&;”);
}
质询
.append(URLEncoder.encode(param.getKey(),“UTF-8”))
.append(“=”)
.append(URLEncoder.encode(值,“UTF-8”));
}
}
返回queryString.toString();
}
对于
multipart/formdata
请求,这取决于您如何解析请求体和存储数据。重建也不那么琐碎


如果您想要一个完全透明的解决方案,请考虑一个<代码> HTTPServestRealEdvestWraseBue/Cuff>,它将请求体复制到本地(字节)缓冲区(或超过某个阈值的临时文件),每当调用“代码> GETInPixStutts())/>代码>或<代码> GeCudioRead()/<代码>时。然后,只需将

HttpServletRequest
强制转换到包装器实现中,并获取该副本。

这样就可以了。您遇到了什么问题?@BalusC上面创建了一个新请求,我需要导致异常的请求的请求正文。谢谢您的回答,我使用了HttpServletRequestWrapper。
public static String toQueryString(Map<String, String[]> params) {
    StringBuilder queryString = new StringBuilder();

    for (Entry<String, String[]> param : params.entrySet()) {
        for (String value : param.getValue()) {
            if (queryString.length() > 0) {
                queryString.append("&amp;");
            }

            queryString
                .append(URLEncoder.encode(param.getKey(), "UTF-8"))
                .append("=")
                .append(URLEncoder.encode(value, "UTF-8"));
        }
    }

    return queryString.toString();
}