Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将堆栈跟踪打印到页面?_Java_Jsp - Fatal编程技术网

Java 如何将堆栈跟踪打印到页面?

Java 如何将堆栈跟踪打印到页面?,java,jsp,Java,Jsp,如何将异常堆栈跟踪打印到网页 import com.opensymphony.xwork2.ActionSupport; import java.util.Arrays; public class ExceptionAction extends ActionSupport { public String execute() { // String errMsg = Arrays.toString(Thread.currentThread().getStac

如何将异常堆栈跟踪打印到网页

import com.opensymphony.xwork2.ActionSupport;
import java.util.Arrays;

public class ExceptionAction extends ActionSupport 
{

 public String execute() 
 {      
    //
    String errMsg = Arrays.toString(Thread.currentThread().getStackTrace());

    this.addActionError(
                    "Unexcepted error has occurred. \n"
                    +errMsg
                    + "\nPlease try again or report this error to    administrator or support team. \n ");

    return "error";
 }

 /**
 * 
 */
 private static final long serialVersionUID = -3754090784536811052L;
}
但我得到了一个无用的味精使用上述代码,味精是这样的:

    [java.lang.Thread.getStackTrace(Thread.java:1479),    com.monitoring.action.ExceptionAction.execute(ExceptionAction.java:11), sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method), sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39), 


另请参见

这里是将堆栈跟踪打印到页面的代码

 package test;    
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

        PrintWriter out = response.getWriter();
        try {
            "test".charAt(20);
        } catch (RuntimeException e) {
            out.println("Stack Trace:<br/>");
            e.printStackTrace(out);
            out.println("<br/><br/>Stack Trace (for web display):</br>");
            out.println(displayErrorForWeb(e));
        }
    }

    public String displayErrorForWeb(Throwable t) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        t.printStackTrace(pw);
        String stackTrace = sw.toString();
        return stackTrace.replace(System.getProperty("line.separator"), "<br/>\n");
    }

}
封装测试;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.io.StringWriter;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
公共类TestServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)引发IOException{
PrintWriter out=response.getWriter();
试一试{
“测试”,查拉特(20);
}捕获(运行时异常e){
out.println(“堆栈跟踪:
”); e、 打印跟踪(输出); out.println(“

堆栈跟踪(用于web显示):
”; out.println(displayErrorForWeb(e)); } } Web的公共字符串显示错误(Throwable t){ StringWriter sw=新的StringWriter(); PrintWriter pw=新的PrintWriter(sw); t、 printStackTrace(pw); String stackTrace=sw.toString(); 返回stackTrace.replace(System.getProperty(“line.separator”),“
\n”); } }

来源:

你指的是网页,还是我的工作网页?或者在网页上?尝试在发生异常的地方抛出异常,所有跟踪都应该在网页上,但我认为这对解决您的问题没有帮助。通常,您不希望在网页上打印堆栈跟踪。它可以揭示很多信息,并帮助人们在未经您同意的情况下访问您的服务器:)这里有许多选项:包括Guava和commons lang的实用方法
 package test;    
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

        PrintWriter out = response.getWriter();
        try {
            "test".charAt(20);
        } catch (RuntimeException e) {
            out.println("Stack Trace:<br/>");
            e.printStackTrace(out);
            out.println("<br/><br/>Stack Trace (for web display):</br>");
            out.println(displayErrorForWeb(e));
        }
    }

    public String displayErrorForWeb(Throwable t) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        t.printStackTrace(pw);
        String stackTrace = sw.toString();
        return stackTrace.replace(System.getProperty("line.separator"), "<br/>\n");
    }

}