【问题标题】:How to execute and include a Java API from a Web App project如何从 Web App 项目执行和包含 Java API
【发布时间】:2012-03-20 03:38:40
【问题描述】:

这类似于 java parameter in jsp:includehttps://stackoverflow.com/questions/6677981/eclipse-project-from-ant-build-file-for-a-java-web-project-on-svn-doesnt-import

我希望从 JSP 文件 (response.jsp) 执行 Java 文件 (run.java) 并将其输出返回到 JSP 文件。

我正在使用

Mac OSX 10.6.8, Apache Tomcat 6.0.16, Java1.6.0_29, Eclipse IDE 靛蓝,

我在 Tomcat 中部署了一个 JSP Web 应用程序,它搜索 XML 内容存储库并将结果返回给用户。

我被要求包含一个 Java API,它使用相同的查询来抓取预定义的网站。这必须与 Web 应用程序分开

我需要向 Java API 发送用户查询并将内容返回给 JSP WebAp。谁能给我一些关于向外部 Java API 发布查询的建议?

JSP 文件已经调用了同一个 WebAp 中的其他 .jsp 文件,例如

<%@ include file="siteheader.jsp" %>
<jsp:include page="<%= session.getAttribute(\"device\") + \"header.jsp\"%>">
<jsp:param name="title" value="Response" />
</jsp:include>

我已经尝试了以下以及其他一些变体,以使其至少连接到外部 java 文件但无法破解它。

<%@ include file="/Users/me/Documents/workspace/Slicer/src/slicer/Run.java"     %>

我不断收到 tomcat 错误,找不到文件“Macintosh HD/Users/me/Documents/workspace/Slicer/src/slicer/Run.java”

非常感谢任何建议或帮助

B

【问题讨论】:

    标签: java jsp include


    【解决方案1】:

    在 JSP 页面中包含 Java 源文件是不正确的。您应该做的是从服务器组件(如 Servlet)执行 java 程序(作为 Class 或 JAR 文件)(您可以从 JSP 页面执行此操作,但此类操作应在 Controller 层完成)。

    【讨论】:

    • 嗨 Carlos 感谢您的回复,只是为了检查您何时说控制器层是指通过将代码包含在 WEB-INF 文件中并编辑类路径来使代码对 WebAp 可用? Sean Owen 在link 中提出了类似的建议。我在这方面不是很精通,但可以试一试最好的,B
    • 嗨 Carlos 由于项目的构成现在发生了变化,我将重新发布一个稍作修改的问题,但感谢您的帮助。
    【解决方案2】:

    请查看 BalusC 的解决方案
    How do I programmatically compile and instantiate a Java class?
    为了测试,复制并粘贴以下 JSP。我希望 BalusC 不介意我更改了他的代码。

    <%@ page import="java.util.*,java.io.*,javax.tools.*,java.net.*" %><%
    System.setOut(new PrintStream(response.getOutputStream()));
    // Prepare source somehow. 
    String source = "package test; public class Test { static { System.out.println(\"hello\"); } public Test() { System.out.println(\"rickz\"); } }";  
    // Save source in .java file. 
    File root = new File("/testJava"); 
    // On Windows running on C:\, this is C:\testJava. 
    File sourceFile = new File(root, "test/Test.java"); 
    sourceFile.getParentFile().mkdirs(); 
    new FileWriter(sourceFile).append(source).close();  
    // Compile source file. 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
    compiler.run(null, null, null, sourceFile.getPath());  
    // Load and instantiate compiled class. 
    URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() }); 
    Class<?> cls = Class.forName("test.Test", true, classLoader); // Should print "hello". 
    Object instance = cls.newInstance(); // Should print "world". 
    System.out.println(instance); // Should print "test.Test@hashcode". 
    if(out != null) return;
    %>
    

    【讨论】:

    • 嗨 rickz 非常感谢全面的回放。我会在早上第一件事好好看看它干杯B
    • 嗨 rickz 该项目现在已更改,Java 文件已包含在 WebAp 中。虽然我没有机会实施它,但我要感谢您的回答。我可能会重新发布一个修改后的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2011-01-17
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多