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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

意見交換

クローズ

4回答

715閲覧

jspとsqlの連携について

kasiwamanju

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2023/11/07 03:33

0

0

テーマ、知りたいこと

jspとsqlの連携について

背景、状況

初めて質問させていただきます。

現在自分はjspの勉強をしており、mysqlと連携させるやり方を調べています。
といっても連携させるソースはわかっているのですが、参考書やwebで調べていると何種類かあることがわかりました。
自分が今わかっているのは2パターンです。
(例は前ページのフォームから送信された情報をINSERT文でデータベースに追加する場合)

jsp

1<%@ page contentType="text/html;charset=UTF-8" import="java.sql.*" %> 2<% 3request.setCharacterEncoding("UTF-8"); 4String sql = "INSERT INTO sample(name,address) VALUES (?,?)"; 5String url = "jdbc:mysql://localhost/test"; 6String user = "hoge"; 7String pass = "hoge"; 8 9try( 10 Connection conn = DriverManager.getConnection(url,user,pass); 11 PreparedStatement ps = conn.prepareStatement(sql); 12 ) { 13 ps.setString(1,request.getParameter("name")); 14 ps.setString(2,request.getParameter("address")); 15 ps.executeUpdate(); 16}catch(Exception e) { 17 18} 19 20response.sendRedirect("index.jsp"); 21%>

jsp

1<%@ page contentType="text/html;charset=UTF-8" import="java.sql.*,javax.sql.*,javax.naming.*" %> 2<% 3request.setCharacterEncoding("UTF-8"); 4String sql = "INSERT INTO sample(name,address) VALUES(?,?) "; 5Context context = new InitialContext(); 6DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/test"); 7 8try( 9 Connection db = ds.getConnection(); 10 PreparedStatement ps = db.prepareStatement(sql); 11 ) { 12 ps.setString(1,request.getParameter("name")); 13 ps.setString(2,request.getParameter("address")); 14 ps.executeUpdate(); 15}catch(Exception e) { 16 17} 18response.sendRedirect("index.jsp"); 19%>

上記2パターンでデータベースに反映できており、自分が分かった違いとして後者基準だと
・アプリケーションのルートディレクトリにcontext.xmlを設定して配置しなければエラー。
・ユーザーやパスワード情報もcontext.xmlに書いてあるため、ソースに書かなくてよい。
などがありました。

上記で述べたこと以外で内部的な違いがあれば、教えていただければと思います。
また、実際にsqlを連携するにあたって本番環境ではどちらがよいのかもよければ教えてください。

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

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

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

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

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

回答4

#1

jimbe

総合スコア13318

投稿2023/11/07 07:33

サンプルとしてなら jsp だけで済むほうが簡単かと思います。
本番環境なら context …と流れで言いたいところですが、本番で jsp にそこまでベタに SQL を書くかと言うところが引っ掛かります。
jsp が UI としての役割に徹するなら、ロジックは入れないでしょう。
コード部分も例外処理もしていないしコネクションを閉じてさえいません。
何かが起きたときどう処理してユーザに知らせるのか等の処理を入れていったらどうなるでしょうか。

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

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

#2

退会済みユーザー

退会済みユーザー

総合スコア0

投稿2023/11/07 08:20

#1の補足です。

世間的にjspにロジックのあるJavaコードを埋め込むことは忌避されています。
https://stackoverflow.com/questions/3177733/how-can-i-avoid-java-code-in-jsp-files-using-jsp-2

なので質問をするのであれば、まずWebアプリではなくコンソールアプリで質問(意見交換)した方がいいかと思います。

DriverManagerDataSourceの違いは以下に比較された文章があります。
https://docs.oracle.com/javase/jp/1.5.0/guide/jdbc/getstart/datasource.html

個人的には最近だとJNDIがどれだけ使用されてるのか分からないので、どちらでもいいと思います。参考までにGoogle Trendsだと

https://trends.google.co.jp/trends/explore?date=all&q=%2Fm%2F0br59&hl=ja

こんな感じに重要性が下がっているように見えます。2021年にちょっと上がってるのはlog4jの脆弱性が発見されたときだと思います。JNDIに関連してたので。

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

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

#3

kasiwamanju

総合スコア0

投稿2023/11/07 09:42

#1
jimbeさん、回答の程、ありがとうございます。

正直jspとサーブレットの使い分けがあまり分かっておらず、基本的にjspはUIなどの役割になるのですね。
SQLなども直接書くことは控えます。
例外処理は現時点で知識が皆無の為、そちらもあわせて勉強していこうかと思います。

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

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

#4

kasiwamanju

総合スコア0

投稿2023/11/07 10:01

#2
dameoさん、回答の程、ありがとうございます。

jspにはjavaの処理を書くのは今後控えていきます...。
DriverManagerとDataSourceの違いについてもソースを頂き、ありがとうございます。
今後は無難にDataSourceで連携していくのと、oracleの資料も目を通していきます。

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問