2013-06-22 44 views
0

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

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), 
+1

到页面你的意思是,对iWork的页面?或到网页上? – Raptor

+0

尝试引发异常,所有跟踪应该在网页上,但我认为这不能帮助你解决问题。 –

+0

通常,您*不希望在网页上打印堆栈痕迹。它可以透露很多信息,* *帮助*人们在未经您的同意的情况下访问您的服务器:) – devnull

回答

0

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

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"); 
    } 

} 

来源: