【问题标题】:Migrating from JSP Scriptlets to Servlets从 JSP Scriptlet 迁移到 Servlet
【发布时间】:2012-05-24 20:16:53
【问题描述】:

所以我正在尝试用数据库和图表做一些基本的事情。我已经让我的 JSP 代码工作了,但我想将它移到 servlet/其他资源,因为我听说在 jsp 中做所有事情是一个非常糟糕的主意。我对 servlet 进行了一些研究,但我对它们如何工作/如何与 jsps 和其他文件链接感到非常困惑。

我知道我想要将 d3.js 代码保留在 .jsp 中(可能),但我主要关心的是数据库连接代码。

这是我的 JSP:

    <%@ page language="java" import="java.sql.*, java.util.*"%>

<html>
    <head>
        <title>D3 Test</title>
        <script type="text/javascript" src="d3/d3.v2.js"></script>
        <style type="text/css">
        </style>
    </head>
    <body>

    <%
    Class.forName("com.mysql.jdbc.Driver");



Connection con=null;
ResultSet rst=null;
Statement stmt=null;
try{
String url="jdbc:mysql://localhost:3306/testdb?user=root&password=password";

int i=1;
con=DriverManager.getConnection(url);
stmt=con.createStatement();
rst=stmt.executeQuery("select * from test ");

%>
        <script type="text/javascript">

            var dataset = [ 
    <% while (rst !=null && rst.next()) { %>
       <%=rst.getInt("ID")%>, 
    <% }%>
    ]; 

            var w = 500;
            var h = 340;
            var barPadding = 1;
            /*var xScale = d3.scale.linear()
                                 .domain([0, d3.max(dataset, function(d) { return d[0]; })])
                                 .range([padding, w - padding * 2]);

            var yScale = d3.scale.linear()
                                 .domain([0, d3.max(dataset, function(d) { return d[1]; })])
                                 .range([h - padding, padding]);*/
            var svg = d3.select("body")
                        .append("svg")
                        .attr("width", w)
                        .attr("height", h);
            svg.selectAll("rect")
                .data(dataset)
                .enter()
                .append("rect")
                .attr("id", "rect1")
                .attr("x", function(d, i) {
                        return i * (w / dataset.length);
                    })
                .attr("y", function(d) {
                    return h - d*4;
                })
                .attr("width", w/ dataset.length - barPadding)
                .attr("height", function(d) {
                    return d * 4;
                })
                .attr("fill", function(d) {
                    return "rgb(0, 0, " + (d * 10) + ")";
                });

            svg.selectAll("text")
                .data(dataset)
                .enter()
                .append("text")
                .text(function(d) { 
                    return d;
                })
                .attr("x", function(d, i) {
                    return i * (w / dataset.length)+ (75 / dataset.length);
                })
                .attr("y", function(d) { 
                    return h - (d * 4) + 15;
                })
                .attr("font-family", "sans-serif")
                .attr("font-size", "11px")
                .attr("fill", "white");
                <%   
    } finally {
        if (stmt != null) { stmt.close(); }
    }%>
        </script>

    </body>
</html>

【问题讨论】:

  • 这是一个暗黑破坏神3项目吗,如果是的话我很乐意帮忙=P
  • 很遗憾,没有。 d3.js 是数据驱动文档,是一个用于在 javascript 中创建 SVG 图像的库。但是当我正在处理这个并且我必须输入 d3 时,我会畏缩,因为我想停止工作和玩耍!哈哈。
  • 呸,跛脚。回到正题,你想拿到多重?如今,大多数 Web 应用程序都使用框架来解决 servlet 架构中的许多烦人问题
  • 这并不意味着疯狂的沉重。这只是为了我学习的目的。在我弄清楚一切之后,我可能会尝试做一个测试网站或其他东西,但仅此而已。

标签: java mysql database jsp servlets


【解决方案1】:

肯定使用多层来构建一个Web应用程序有很大的好处。以下回复将非常有用:

【讨论】:

    【解决方案2】:

    JSP 如何与 servlet 通信?当然,通过发出 HTTP &lt;form&gt; 请求或 AJAX 调用。

    你的直觉是好的:JSP 中的 scriptlet 代码是一个非常糟糕的主意。

    您无需直接跳入框架泥潭。在没有框架的情况下忍受痛苦甚至可能是有价值的。下次你会再欣赏一个。

    找出您需要传递给 servlet 以执行查询的内容。通过将&lt;form&gt; 发布到servlet URL 来实现。 servlet 将获取请求参数名称/值对,将它们绑定到查询,将 ResultSet 映射到对象或集合,并将其添加到页面、请求或会话范围以进行呈现。它还会说明要显示的下一页应该是什么。

    简单易懂。祝你好运。

    【讨论】:

    • 并非如此。两者都可以是真的。我希望您投票并接受答案。非常感谢,但投票和接受对我们双方都有好处。
    • 他们在我的脑海中自相矛盾,因为我通常会将好运与一些可能会遇到困难的人联系起来。我是开玩笑说的,因为我只是觉得这很有趣。不幸的是,我无法投票,因为我需要超过 15 个声望,而我没有。
    • 别担心,您接受了答案。这就是你应该做的。
    【解决方案3】:

    我这里有一个简单的例子:In a JSP MVC design is it possible to automatically invoke a Command upon page load?

    查看它的方法是将 JSP 文件简单地视为页面外观的模板。无论您在哪里有动态的东西,从页面视图到页面视图的变化,您都可以放置占位符。然后,在您的 servlet 中填充这些占位符。填充它们后,您将转发到 JSP,该 JSP 接受这些值并将它们放在页面中的适当位置。

    阅读 JSTL 和 JSP 表达式语言。

    【讨论】:

      猜你喜欢
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2018-05-07
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多