質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

6558閲覧

JSPの在り方、javascriptの書き方等

cha-ra

総合スコア40

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/09/09 03:04

現在進行中のプロジェクトでは、
各画面のjspに直接javascriptにて処理を記述しています。
理由としては以下の様なことが挙げられます。
・javascriptの記述の中でtaglibで記述したメソッドを使用したい
・EL式も使いたい
(セッション情報取得用)
・jstlも使いたい(エラー出るけど利用可能)
(c:foreachが便利なので。。。)
・javaで定義している定数も使いたい
(<%= %>で連動させたい)

しかし、どの画面の処理も似たような処理ばかりで、
出来れば共通化したいところなのですが、
外部jsファイルには記述出来ません。

共通的な処理を記述したjavascriptのみの外部jspファイルというのはアリなのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

共通的な処理を記述したjavascriptのみの外部jspファイルというのはアリなのでしょうか?

そうしても動きますよ。しかし私としては「ナシ」ですね。

・javascriptの記述の中でtaglibで記述したメソッドを使用したい
・EL式も使いたい
(セッション情報取得用)
・jstlも使いたい(エラー出るけど利用可能)
(c:foreachが便利なので。。。)
・javaで定義している定数も使いたい
(<%= %>で連動させたい)

これら自体はすべて行ってかまいませんが、それはすべてデータです。処理の中に埋め込むべきではありません。まず、処理とデータを分離しましょう。

それらの値だけを記述する外部JavaScriptをJSPで出力するようにし、それとは別に処理を通常のJavaScriptファイルで静的に定義すべきです。静的であるならばキャッシュ可能でそのファイルを何度も呼ばなくて済む様になります。

きれいに分離することにより、ネットワークトラフィックを減らせ、システムの高速化にもなりますし、何よりデータと処理をきれいに分離することによりメンテナンス性が向上します。

投稿2015/09/09 05:36

miu_ras

総合スコア902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cha-ra

2015/09/10 00:37

定義ファイルを動的に作成する、というのは思いつきませんでした。 とても参考になります! >それらの値だけを記述する外部JavaScriptをJSPで出力するようにし これはJSPからJavaScriptファイルを生成する、ということなのでしょうか? それともJava側で作成するのでしょうか? >それとは別に処理を通常のJavaScriptファイルで静的に定義すべきです 今回 c:foreach でループしている箇所はオブジェクトを利用しているのですが、 データ出力してしまう場合、連想配列にするかjavascriptで再度クラス定義しないといけない様な気がするのですが、もっと良い方法などあるのでしょうか?
miu_ras

2015/09/10 05:54

>>それらの値だけを記述する外部JavaScriptをJSPで出力するようにし >これはJSPからJavaScriptファイルを生成する、ということなのでしょうか? >それともJava側で作成するのでしょうか? 私はあなたの「Java側で作成」という言葉ががどうもよく分かりませんので、なんとも言えませんが…。 あなたは私の「JSPで出力する」という言葉の意味が分からないということなのでしょうか? それは「JavaScriptの内容を出力するJSPファイル」を作成しておいて、 そのJSPへのURLをHTMLのSCRIPT要素のSRC属性に指定して呼び出すという意味です。 >>それとは別に処理を通常のJavaScriptファイルで静的に定義すべきです >今回 c:foreach でループしている箇所はオブジェクトを利用しているのですが、 >データ出力してしまう場合、連想配列にするかjavascriptで再度クラス定義しないといけない様な気がするのですが、もっと良い方法などあるのでしょうか? データの形式や処理内容が一切提示されていないので、一般論でしか答えられませんが、私が「データ」と言っているのは「値」「変数」のことです。通常ならJSON形式で配列もしくはオブジェクト(連想配列)形式で変数を定義するでしょう。 あなたの言う「クラス定義」とはJavaScriptの言葉で言うコンストラクタ定義のことだとは思います。このようなケースでコンストラクタを使う状況が想定できませんが、必然性があるのなら使えばいいと思います。
cha-ra

2015/09/15 00:19

サーバ側で定数をjsファイルとして出力し、それを参照するものと勘違いしておりました。 定数を出力し、値を保持するためのファイルと、 振る舞いのみのファイルと分けると良いということですね。
guest

0

ベストアンサー

外部jsは、多画面で使える共通処理(ファンクション)
外部JSPってのは、多画面で使えるコンテンツ

というのが一般認識かと思います。
これを強引に共通jsをJSPにやってしまうと、
それを知らないプログラマが誤認識を起こします。
なので、JSPでJavaScriptの共通化はすべきではないと思います。

投稿2015/09/10 21:02

TetsujiMiwa

総合スコア1124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cha-ra

2015/09/15 00:21

後から参加する人に対して、誤解させない為にも使うべきではないということですね。
guest

0

Javaで以下のような数値の配列があったとして

int n[] = {1, 2, 3, 4};

それをJavaScriptに処理させるために出力するときに

console.log(1); console.log(2); console.log(3); console.log(4);

というようなコードをc:foreachで出力するのではなく、

あらかじめ以下の内容を共通の処理として静的なファイルで用意しておいて

for (var i = 0; i < arr.length; i++) { console.log(arr[i]); }

それとは別のファイルに以下の内容だけをc:foreachなどで動的に出力するといい、ということです。

var arr = [1, 2, 3, 4];

投稿2015/09/10 06:03

miu_ras

総合スコア902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

アリですしApache Tilesなどの利用方法を見ても常用されています。
(JavaScriptだけでなくCSSファイルなども)
Tilesなどのライブラリを利用することでログイン前、ログイン後でincludeさせるjspを分けることもできますし複数のJSPファイルに分割して条件分岐でincludeさせることもできます。

投稿2015/09/09 03:43

CharmSystems

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cha-ra

2015/09/10 00:39

Tilesは使用したことが無かったので選択肢として浮かびませんでした、ありがとうございます。 もっといろいろなライブラリ利用の方法も検索してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問