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>
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();
你要把后台的错误发出来......不是你发的这个..这个只是看原码!!!!不是错误信息!
在 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调用就出错,希望大家帮忙的主要内容,如果未能解决你的问题,请参考以下文章