对Java文件,JSP,servlet的集成感到困惑?

时间:2013-03-26 03:20:09

标签: java jsp tomcat web-applications servlets

这是我第一次使用Java和tomcat,我对所有内容如何组合感到有些困惑 - 我已经无休止地搜索了一下,但似乎无法围绕一些概念。

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

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

理想情况下,一个servlet或JSP(不是100%清楚它们是如何工作的。但我通常通过查看各种示例来理解语法)可以在程序运行时得到我的输出(bufferedImages)和HTML文件可以某种方式与他们正在做的任何事情互动,以便图像可以显示在网页上。我不确定这是否可行。如果任何人都可以提出关于事情的一般顺序,那就太棒了。

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

非常感谢任何一般指导!

2 个答案:

答案 0 :(得分:3)

我认为这种文件遗憾地缺乏;太多人认为一个例子是一个解释,对于你可以从一个例子中得到的所有美好的事物,有时解释不是其中之一。我将试图解释你提到的一些整体概念;不幸的是,它们无法帮助您直接解决缓冲图像显示问题。

Tomcat和其他类似的程序是" web服务器&#34 ;;这些是接受来自其他计算机的互联网连接并以特定格式返回信息的程序。当你输入" www"在浏览器中的地址,该地址中的字符串最终在Web服务器上结束(作为"请求"),然后返回一个网页(也称为"响应") 。 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编程语言更合乎逻辑,并且实际上根本不必是程序员。因此,程序员与这个面向内容的人合作,为页面创建标签,用于描述页面的外观,然后程序员进行编程,内容人员用它创建网页。

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

这应该足以让你开始。我现在建议关于这些事情的维基百科文章以获得更多细节,并祝你好好理解这些概念。我希望这有所帮助。


在您就想要进行幻灯片放映的评论之后提供了此附录。

一个重要的Web编程概念是它的客户端 - 服务器和请求 - 响应特性。在传统的非Javascript Web环境中,客户端(读取浏览器)向服务器发送请求,服务器发回字节。在字节流完成后,两台计算机之间没有正在进行的连接,并且对该字节流可以继续的时间有限制。此外,在此请求和响应之外,服务器通常无法向客户端发送任何内容,除非客户端请求它;客户'驱动'数据交换。

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

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

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

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

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

然后服务器完成,更多字节不会进入浏览器,直到另一个请求为止。

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

答案 1 :(得分:0)

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

response.setContentType()

棘手的部分是你必须从JSP打印图像,所以你必须调用:

response.getOutputStream()
来自您的JSP的

,并且使用OutputStream,您必须传递BufferedImage的字节。

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

我不确定你需要更多澄清的地方,因为看起来你对这些概念感到有些困惑。

BTW:一个JSP只是一个servlet,它有一个更简单的语法来编写HTML和Java代码。