3

这是我第一次使用 Java 和 tomcat,我对所有东西如何组合在一起有点困惑 - 我已经无休止地搜索了一些概念,但似乎无法理解一些概念。

我已经完成了一个输出 bufferedImages 的 Java 程序。我的目标是最终让这些图像显示在网页上。

我无法理解当前在 NetBeans 中运行的 java 文件 (.java) 如何与 servlet 和/或 JSP 交互。

理想情况下,当程序运行并且 HTML 文件可以以某种方式交互时,servlet 或 JSP(不是 100% 清楚其中任何一个是如何工作的。不过,我主要通过查看各种示例来理解语法)可以得到我的输出(bufferedImages)无论他们在做什么,以便图像可以显示在网页上。我不确定这是否可能。如果有人能建议做事的一般顺序,那就太棒了。

在我发现的每个示例/教程中,没有人使用 .java 文件 - WEB-INF 文件夹中有 .classes - 人们似乎没有在 java 程序上使用完整的文件。但是,我需要运行我的 .java 程序,以便我可以检索输出并在 webapp 上使用它。

任何一般指导将不胜感激!

4

2 回答 2

3

我认为可悲的是缺乏这种文件。太多人认为一个例子就是一种解释,尽管你可以从一个例子中得到所有美妙的东西,但有时解释并不是其中之一。我将尝试解释您提到的一些总体概念;不幸的是,它们不会直接帮助您解决缓冲图像显示问题。

Tomcat 和其他类似的程序是“网络服务器”;这些是接受来自其他计算机的互联网连接并以特定格式返回信息的程序。当您在浏览器中输入“www”地址时,该地址中的字符串最终会(作为“请求”)在网络服务器上结束,然后它会返回一个网页(也称为“响应”)。Tomcat、Apache、Jetty、JBoss 和 WebSphere 都是执行此类操作的类似程序。在万维网的原始形式中,请求字符串表示服务器机器上的一个文件,而 Web 服务器的工作是返回该 (html) 文件以在浏览器中显示。

Servlet 是一种运行在某些 Web 服务器上的 Java 程序。servlet 本身是一个 java 类,其方法由 javax.servlet.Servlet 接口定义。在处理 servlet 的 web 服务器中,熟悉配置文件的人可以指示 web 服务器程序接受某些请求,而不是从服务器返回 HTML 文件(或其他文件),而是执行 servlet 代码。servlet 本质上返回内容本身——想想一个输出 HTML 的程序,你就走在了正确的轨道上。

但事实证明,从程序中输出完整的 HTML 是一件很痛苦的事情——有大量的 HTML 与您需要某种编程语言的“繁重工作”没有太大关系。您必须使用 Java(或某种语言)来进行数据库查询、过滤结果等,但您并不需要 Java 来放入现代网页所需的数百个其他标签。

因此,JavaServerPage (JSP) 是一种特殊的混合体,是 HTML 和与 servlet 相关的东西的组合。您可以将 java 代码直接放在 JSP 文件中,但通常认为使用类似 html 的“标签”更好,然后由“JSP 编译器”解释并转换为 servlet。因此,JSP 页面的创建者学会了如何使用这些标签,对于网页创建者来说,这些标签(如果构造正确的话)比 java 编程语言更合乎逻辑,实际上根本不必是程序员。所以一个程序员,和这个面向内容的人一起工作,为页面创建标签来描述它希望它的页面看起来如何,然后程序员进行编程,内容人员用它创建网页。

对于您的具体问题,我们需要更多细节来帮助您。您是否设想该程序运行并使用用户提供的一些信息作为其生成图像的请求的一部分?还是只生成一次图像,现在只需要显示它们?实际上,我认为这是另一个问题的主题。

这应该足以让你开始。我现在建议有关这些事情的 wikipedia 文章以获取更多详细信息,并祝您好运,了解这些概念。我希望这有帮助。


本附录是在您发表关于想要制作幻灯片的评论之后提供的。

一个重要的 Web 编程概念是它的客户端-服务器和请求-响应性质。在传统的非 Javascript Web 环境中,客户端(读取浏览器)向服务器发送请求,服务器发送回字节。字节流结束后,两台计算机之间没有持续的连接,并且字节流可以持续多长时间是有限制的。此外,除了这个请求和响应之外,服务器通常没有能力向客户端发送任何东西,除非客户端请求它;客户端“驱动”数​​据交换。

因此,例如“幻灯片”,服务器会定期发送代表附加图像的字节,这不是 HTML 的工作方式(或本应工作的方式)。你可以在用户的​​控制下做一个:用户为下一张图片按下一个按钮,浏览器发送下一张图片的请求,它出现在上一张图片的位置。这符合请求-响应范式。

现在,使用 Javascript 可以实现自动幻灯片的效果。Javascript,基于 Java 但不相关,是一种脚本语言;它是 HTML 页面的一部分,与页面一起下载到浏览器,并在浏览器的环境中运行(与在服务器上执行的 JSP/servlet 不同)。您可以用 Javascript 编写一个计时器,它可以等待 N 秒并向服务器发送另一个请求(对于另一张图片或其他什么)。Javascript 有自己的规则等,但即便如此,我认为记住你不再只是在做 HTML 是个好主意。

如果幻灯片是您所追求的,那么您根本不需要 JSP。您可以创建一个 HTML 页面,其中包含显示图片的位置、标签和文本等,用于停止幻灯片放映的按钮等,在 HTML 中,以及用于请求附加图片的 Javascript。

您可以使用 JSP 创建页面,它可能会根据页面的复杂程度对您有所帮助,但它不会帮助您完成基本功能:获取幻灯片的下一张图片。当浏览器请求一个 JSP 页面时:

  1. 请求发送到服务器,
  2. 服务器确定您想要的页面并且它是一个 JSP 页面,
  3. 如果尚未将该页面编译为 servlet,则服务器会将其编译为 servlet,
  4. servlet 运行,根据现在编译成 Java 的标签生成 HTML 输出,
  5. 服务器将 HTML 返回给浏览器。

然后服务器完成,在发出另一个请求之前,更多的字节不会进入浏览器。

再次,我希望这有帮助。您的幻灯片示例揭示了一些需要了解的关于 Web 编程、服务器、HTML、JSP 和 Javascript 的基本概念,我祝您在所有这些过程中都好运。如果你认为这一切比它看起来需要的更复杂,那么你不会是第一个。

于 2013-03-26T03:50:48.267 回答
0

您可以创建一个调用 Java 类中的方法来检索 BufferedImage 的 JSP。然后您必须将内容类型设置为适当的图像类型:

response.setContentType()

棘手的部分是您必须从 JSP 打印图像,因此您必须调用:

response.getOutputStream()

来自您的 JSP,因此OutputStream您必须传递 BufferedImage 的字节。

请注意,在该 JSP 中,您将无法打印 HTML,只能打印图像。

我不确定您在哪里需要更多说明,因为您似乎对这些概念有些困惑。

顺便说一句:JSP 只是一个 servlet,它具有更简单的语法来一起编写 HTML 和 Java 代码。

于 2013-03-26T04:04:02.883 回答