java程序单独运行正确,用jsp调用就出错,希望大家帮忙

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序单独运行正确,用jsp调用就出错,希望大家帮忙相关的知识,希望对你有一定的参考价值。

编写了一,个java程序,功能是把html网页保存为pdf格式,单独运行时结果正确,但是想把这段java程序放入JSP,让jsp调用这段java程序,就总是报错。
JSP部分代码:
<%@ page import="format.conversion.HtmlToPdf" %>
<body>
This is my JSP page. <br>
</body>
<%
HtmlToPdf htp=new HtmlToPdf();
htp.go();
%>
java代码:
public class HtmlToPdf
public void go()throws Exception
String inputFile = "WebRoot/Report.html";
String url = new File(inputFile).toURI().toURL().toString();
File file=new File("F:/Report.pdf");
String outputFile =file.toString();
String url1=new File(outputFile).toURI().toURL().toString();
System.out.println(url);
System.out.println(url1);
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.layout();
renderer.createPDF(os);
os.close();


出错信息: message An exception occurred processing JSP page /index.jsp at line 29
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 29
26: </body>
27: <%
28: HtmlToPdf htp=new HtmlToPdf();
29: htp.go();
30: %>
31: </html>

你应该还有log没贴进来,仔细看看,无非是空指针,数据转换失败等错误,仔细查下JasperException的文档,在go()方法里用起来,试试能不能获取错误信息,然后再具体分析。

String outputFile =file.toString();仔细查查这个方法需要的包,是否在jsp页面也import进去了追问

还有个比较奇怪的问题,这个java类直接运行结果是正确的,但是如果进入Debug模式,单步运行就会出错,运行到 String url = new File(inputFile).toURI().toURL().toString();    
                              File file=new File("F:/Report.pdf");

就会出错,错误提示是:

追答

出现上面这个图是因为跳到这一步的时候,只有类文件,没有源文件。这个时候你继续按F6应该还是可以继续运行的。这并不代表你的代码有错误

追问 

 

 
追答

主要看root cause里的内容,第一行是错误的类型 noClassDefFoundError,下面的是错误的位置,HtmlToPdf.java的44行,自己搜下吧。

参考技术A

请在29行处判断下那个htp对象是否存在

if(htp!=null) 
    htp.go();
 else 
    out.print("**** 变量htp变量为空 ****");

参考技术B 在GO方法里面打个断点看看在哪一行执行有问题,应该是你的JAVA方法里面执行有问题追问

恩,我打断点试了,运行到 String url = new File(inputFile).toURI().toURL().toString();  就提示错误,错误信息如图:

追答

String url = new File(inputFile).toURI().toURL().toString();
把你这一行分几步执行
File file = new File(inputFile);
URI uri = file .toURI();
uri .toURL().toString();
你要把后台的错误发出来......不是你发的这个..这个只是看原码!!!!不是错误信息!

参考技术C Java代码放在JSP中需要使用<script language="javascript"> java代码</script>来引用,然后函数中的方法在JSP中的引用语法为:Click="go()" 参考技术D <%@ page import="format.conversion.HtmlToPdf" %>没有导java包

在 JSP 中显示 Java 内容

【中文标题】在 JSP 中显示 Java 内容【英文标题】:Displaying Java content in JSP 【发布时间】:2012-06-03 21:51:24 【问题描述】:

设置 - Tomcat 6.0.16 - MacBook

我有一个 JSP 页面,它调用一个单独的 Java 应用程序来搜索 Web 并返回内容。我希望在我的 JSP 页面上显示此内容。

我的 JSP 代码 - 调用下面的 JAVA

System.out.println("Test3");
Injector injector = Guice.createInjector(new GuiceInjector());
Run r = injector.getInstance(Run.class);
r.runSliceConsumer();   

我的 JAVA - 这可以工作并将我的内容打印到终端窗口。

if (sliceHits == null) 
    System.err.println("Timeout occurred while fetching slices");
    return;

if (!sliceHits.isEmpty()) 
    System.out.println("Found some slices Yuhuuuu ! :-) ");
    String sliceContent = createSlices(sliceHits);
    System.out.println("sliceContent:");
    System.out.println(sliceContent);
 
else 
    System.out.println("No Slices were found for this query");

我的问题是我想在我的 JSP 网页中显示上面的内容,而不仅仅是终端窗口。我假设当以一种方式建立连接时,我的 JSP 调用了我的 JAVA,我应该能够只显示结果,但我遇到了一些问题,我希望它只是与我的语法有关。

我在 JSP 中的尝试

<div id="result-page-query" align='center'>
<%
    sliceContent = createSlices(sliceHits);
    out.println(sliceContent);
%>
</div>

我不确定我的解释是否正确,但实际上我是在尝试在我的网页上显示“sliceContent”的内容

谢谢

编辑:

您好,正如 jddsantaella 和 Hardik Mishra 下面的建议,我必须导入必要的包。然后我在这种情况下创建了一个对象“kContent”并执行了该方法。

解决方法类似于以下

<%

    Run kContent = injector.getInstance(Run.class);
    kContent.runSliceConsumer();
    out.println(kContent);
%>

【问题讨论】:

使用 您从尝试中看到了什么结果? @pb2q 你好。这给了我下面的 Tomcat 错误消息,错误就在该行“org.apache.jasper.JasperException:无法为 JSP 编译类:” @dystroy: out 在 JSP 中隐式可用,可用于像上面给出的代码一样打印。 【参考方案1】:

你不应该在你的 JSP 中使用 Java 代码,这是不推荐的。无论如何,您可以打印由执行以下操作的方法返回的值:

...
<%=myObjetct.myMethod(...)%>
...

您的尝试不清楚createSlices 是什么。我觉得可以

<%=r.runSliceConsumer()%>

假设您的 runSliceConsumer 方法正在返回一些东西

【讨论】:

嗨,jddsantaella,我想你在这里做点什么。生病玩它,看看我想出什么。 JSP 不是我的强项,所以我会尝试随机语法组合 您好 jddsantaella 只是想对您的帮助表示感谢。我已经根据您上面的建议发布了我的解决方案。【参考方案2】:

不建议在 JSP 中使用 JAVA 代码。 JSP 主要用于展示。

其次,"org.apache.jasper.JasperException: Unable to compile class for JSP 是运行时异常。当您运行 JSP 时,如果之前编译的 JSP 发生了变化,您的 Web 容器会在运行时编译 JSP。

另外,你应该在 jsp 的开头使用add the necessary import 语句

<%@ page import="java.util.List" %>

<%@ page import="yourpackage.slicer" %> 

最后,

<%
    sliceContent = createSlices(sliceHits);
    out.println(sliceContent);
%>

您可以从您的方法打印字符串返回值。只需检查调用方法,如myObj.myMethod()

【讨论】:

以上是关于java程序单独运行正确,用jsp调用就出错,希望大家帮忙的主要内容,如果未能解决你的问题,请参考以下文章

java调用webservice出错了!

java web servlet 调用 dao层方法 总出错 !!!!新手求解,多谢!!!

java工程运行报错 在本地没问题 部署到服务器上就出错

在 JSP 中显示 Java 内容

运行JSP文件是出错,显示404怎样解决?

在加载类时,如何指定所使用的jar包