【问题标题】:Generate Dynamic web pages in java servlet [closed]在java servlet中生成动态网页[关闭]
【发布时间】:2020-04-22 06:53:11
【问题描述】:

我正在构建一个基于 HTML、CSS 和 JS 前端和 JAVA servlet 后端的网站。

我面临的问题是,在发送网页作为对来自客户端的某些请求的响应时,该网页并不是完全静态的。我需要根据数据库中的数据修改 HTML 的某些部分,然后我想通过重定向到该 HTML 页面或使用 HttpRequest 的getWriter() 函数将其逐行发送到客户端来将该网页发送到 HTTP 响应对象。

对于这两种方式,我都需要处理需要更改的 HTML 代码的某些部分。我能想到的一种方法是创建另一个 HTML 文件,读取我们 HTML 的第一个静态部分并将其写入新的 HTML。然后处理动态 HTML 代码并将其写入新的 HTML 文件。再次读取静态 HTML 并将其写入新的 HTML 文件等等。

但是通过这种方式,我不会处理 JS 和 CSS 文件以及其他文件(例如我们的 HTML 页面正在使用的图像),我们希望发送这些文件作为响应。

【问题讨论】:

    标签: javascript java html servlets web-development-server


    【解决方案1】:

    当您使用 JSP 时,网页会在服务器上按请求呈现一次,然后作为“静态”HTML 文档返回给客户端。如果我理解正确,您希望以某种方式将动态代码“注入”到现有的静态 .html 文件中。这不是不可能的,而是没用的。而是制作一个带有硬编码“静态”内容的 .JSP 文件,并使用 scriptlet 或 JSTL 标记库呈现“动态”上下文。

    对评论的反应:

    如果要显示动态图片,我现在想到的有两种方式:

    1. 如果您的图像作为 blob 直接存储在数据库中:只需在您的 scriplet 中解码图像,然后使用 base64 编码将图像直接渲染到imgsrc 属性。

    2. 如果您的图像本地存储在服务器根目录(包含 .jsp 文件的目录)中。您可以像在静态 Web 应用程序中一样直接处理它们。

    您的 JSP 文件可能如下所示:

        <%
            //between these tags you can write Java code
            //client wont see this code
            Product product = ...; // pull from database somehow
        %>
    
        <!--outside these tags you're writing HTML code-->
        <html>
           ...
           <p><b>Product name:</b> <%=product.getName()%></p>
           <img src="/img/products/image_<%=product.getId()=>.jpg"/>
        </html>
    

    【讨论】:

    • 非常感谢您提供这些信息。请再告诉我一件事。如果我制作了一个硬核静态 JSP 页面,那么需要从数据库中包含在页面上的图像呢?例如,如果要显示 ID 为 123 的帖子,并且该帖子在数据库中有一些图像,那么我如何在 JSP 页面上显示该图像
    • 修改了我的答案。
    • 谢谢。这很有帮助。