0

だから私はデータベースとグラフでいくつかの基本的なことをしようとしています. JSP コードが機能するようになりましたが、jsp ですべてを実行するのは非常に悪い考えだと聞いたので、それをサーブレットやその他のリソースに移動したいと考えています。私はサーブレットについていくつかの調査を行いましたが、それらがどのように動作し、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>
4

3 に答える 3

2

複数のレイヤーを使用して Web アプリケーションを構築することには、大きなメリットがあります。次の応答は非常に役立ちます。

于 2012-05-24T20:28:56.080 に答える
0

ここに簡単な例があります: JSP MVC デザインでは、ページの読み込み時にコマンドを自動的に呼び出すことができますか?

これを見る方法は、JSP ファイルを、ページがどのように見えるべきかの単純なテンプレートと見なすことです。動的なもの、ページ ビューごとに変化するものがある場合は常に、プレース ホルダーを配置します。次に、サーブレットで、これらのプレースホルダーを設定します。データが取り込まれたら、値を取得してページ内の適切な場所に配置する JSP に転送します。

JSTL と JSP Expression Language を読んでください。

于 2012-05-24T20:40:06.487 に答える
0

JSP はどのようにサーブレットと通信しますか? もちろん、HTTP<form>リクエストまたは AJAX 呼び出しを行います。

あなたの本能は良いものです。JSP 内のスクリプトレット コードは非常に悪い考えです。

フレームワークの泥沼に飛び込む必要はありません。枠組みなしでそれを行うことの苦痛に耐えることにも価値があるかもしれません. 次回もよろしくお願いします。

クエリを実行するためにサーブレットに渡す必要があるものを見つけます。<form>サーブレットの URL にPOST することでそれを行います。サーブレットは、リクエスト パラメータの名前と値のペアを取得し、それらをクエリにバインドし、ResultSet をオブジェクトまたはコレクションにマップし、レンダリングのためにページ、リクエスト、またはセッション スコープに追加します。また、次に表示するページを指定します。

簡単です。幸運を。

于 2012-05-24T20:39:45.840 に答える