こんばんは。
JAVAについて勉強したてのほやほやです。
ふと疑問に思ったのですが、サーブレットとPHPの違いってなんですか?
また、それぞれ、どういう時に使い分けたらいいんですか??

サーブレットは、サーバーで動くしDBも扱えると思います。
PHPの方も、サーバーで動くしDBも扱えます。

この2つの違いを教えてください。
宜しくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

PHPはHTMLに埋め込んで記述しますが、サーブレットは


そうではありません(そういう意味ではサーブレット
よりJSPの方がPHPに似ています)。

私は専門家ではないので、詳しいことは知りませんが、
Javaは、汎用的に使える言語であるため、
サーバサイドで動くアプリケーションもJavaで書いて
しまえば、すべてJavaでシステムを書いていくことが
できるかもしれません。
そうすれば、サーバサイドのアプリケーションで
利用したクラスやBeanを、サーブレットが(継承して)
使う、などということも可能になるわけで、いろいろと
システムを組み上げる上で生産的になるかもしれませんね。

そう考えると、大規模なシステムの場合は、Javaの方が
いいかもしれない、ということは考えられます。

それから、国際化されたシステムも、Javaの方が
作りやすいのかもしれません
(日本語と英語に、同じプログラムで対応するとか)。
そうであるなら、そういう点でも「生産的」だと
いうことができます。

# それにしても、PHPってどうなんでしょう?
# けっこう、好さそうですよね?
# まだ使ったことがないんですが...
    • good
    • 0

PHPは、動的にWebページを生成する


Webサーバの拡張機能のことですね。
使われるスクリプト言語もそう呼ばれます。
このスクリプトはC言語、Java、Perlの
各言語をミックスしたものでPHPオリジナルです。

サーブレットは、Webサーバ上で実行される
モジュール化されているものです。
これもWebサーバの拡張機能と言う意味では
PHPと同じですが、
Java言語で作成するので
特定のOSやハードウェアに依存せず、
あらゆるWebサーバで動かせます。

また、CGIなどの他のサーバサイドプログラム違って、
一度呼び出せばメモリに常駐することが出来るため、
動作が高速、データを永続的に扱えるなどの
メリットもあります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QJSP・サーブレットとphpどちらがいい?

質問1:どちらがおすすめですか?またこのどちらかじゃなくてもいいので、webサイト構築にお勧めの言語をご教示ください

質問2:jspやサーブレットでfacebookやmixiやok waveみたいなサイトを構築できますか?

質問3:スマートフォン向けのサイトの構築でもjspやサーブレットは使えますか?

Aベストアンサー

こんにちは。


1)環境も含め簡単に作るのであればPHPがお勧めです。
Webに特化していますし。

2)もちろん出来ます。

3)もちろん出来ます。
最終的にクライアントに返るのはどんな言語を使っても同じです。(HTMLやCSS等)

QTomcatは起動しますが初期index画面が表示できません

Tomcatについての質問は多数寄せられておりますが、
それらを参考にしてインストールなど行いますが、
どうしても後一歩のところで私の場合表示できないという、もどかしい状態になっております。
どうかご存知の方いらっしゃいましたらご教示お願い申し上げます。

Tomcat5.0をWindowsXPで起動しております。
Javaはj2sdk1.4.1_02です。
通常インストールした後Startup.batを起動し、IE6.0で
http://localhost:8080もしくは
http://127.0.0.1:8080と入力、Enterキーを押しますが、画面に
Connection refused
--------------------
Description: Connection refused
と表示されてしまいます。

下記に参考になるかわかりませんが、各種起動状態を記載いたします。アドバイスよろしくお願い申し上げます。

◆コマンドプロンプトで
>ping localhostと入力すると、
-----
Pinging yamamoto [127.0.0.1] with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
-----

と表示されます。また、
>telnet localhost 8080の場合は
-----
接続中: localhost...ホストへ接続できませんでした。 ポート番号 8080: 接続に失敗し
ました
-----
と表示されます。

お手数ですが、よろしくお願い申し上げます。

Tomcatについての質問は多数寄せられておりますが、
それらを参考にしてインストールなど行いますが、
どうしても後一歩のところで私の場合表示できないという、もどかしい状態になっております。
どうかご存知の方いらっしゃいましたらご教示お願い申し上げます。

Tomcat5.0をWindowsXPで起動しております。
Javaはj2sdk1.4.1_02です。
通常インストールした後Startup.batを起動し、IE6.0で
http://localhost:8080もしくは
http://127.0.0.1:8080と入力、Enterキーを押しますが、画面に
Connection re...続きを読む

Aベストアンサー

>Tomcatは起動しますが
とのことですが、Tomcatが起動していないと思います。

pingが通るのはTomcatと無関係で、PCが立ち上がっていれば帰ってくると思います。

telnet localhost 8080
で接続できないとのことなので、Tomcatが起動できていないのではないでしょうか?

QPHPとASPとJSPのメリット デメリットをおしえて

PHPとASPとJSPのメリット デメリットを教えて下さい

よろしくお願いいたします

Aベストアンサー

http://oshiete1.goo.ne.jp/qa4623832.html

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

QリンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>

Qapacheのhtdocs

毎度、お世話になってます。

またくだらない質問かもしれないのですが、

apache で、htmlドキュメントその他いわゆるWebページとして
公開するファイルを置くディレクトリに良く見られるのが
/usr/local/apahce/htdocs 等だと思われます。

ですが、私の環境(FreeBSD Release6.1+Apache1.3.34)だと
インストール後のデフォルトが /usr/local/www/data になってる
ようです。いわゆるレンタルサーバなどの場合、前者/usr/local/apache/htdocs みたいなのを良く見かけたのですが
(OSはFreeBSDのバージョン違い)これって、違ってるのが普通
なんでしょうか。

個人的感覚からして、こういうディレクトリ構造ってある程度
似通ってるのが普通なんじゃないかと思っていたのですが。

Aベストアンサー

>/usr/local/www/data

Ports/Packagesからインストールするとそうなりますね。

>/usr/local/apache/htdocs

Apache(1.3系)をtarballからconfigure時に特に何も指定しないでインストールした場合のデフォルトですね。

FreeBSDの場合には、/usr/local/wwwディレクトリ配下にHTMLファイルやPHPスクリプト等を集約しているようです。
例えば、WEB上でPostfixの仮想ドメイン/仮想ユーザの管理を行えるpostfixadmin(PHPスクリプト)は、Ports/Packagesからインストールすると/usr/local/www/postfixadminにインストールされますね。

まあ、httpd.conf内で設定を変更すれば/usr/local/www/data以外の好きなディレクトリにする事も出来ますね。
変更したからと言ってDocumentRootの位置を意識するようなものでもない限り特に問題は出ないと思いますよ。

/usr/local/www/data以外にしてXOOPS(PHP、MySQLとの連動)を動かしていましたが特に問題なかったですし、現在は(名前ベースの)バーチャルホストでバーチャルホスト毎にDocumentRootを設定して/usr/local/www/data以外でもXOOPS、OpenPNE、Postfixadmin等が動作していますがちゃんと動作しています。

>/usr/local/www/data

Ports/Packagesからインストールするとそうなりますね。

>/usr/local/apache/htdocs

Apache(1.3系)をtarballからconfigure時に特に何も指定しないでインストールした場合のデフォルトですね。

FreeBSDの場合には、/usr/local/wwwディレクトリ配下にHTMLファイルやPHPスクリプト等を集約しているようです。
例えば、WEB上でPostfixの仮想ドメイン/仮想ユーザの管理を行えるpostfixadmin(PHPスクリプト)は、Ports/Packagesからインストールすると/usr/local/www/postfixadminに...続きを読む

QServletからHTMLページへの遷移について

初めまして。

JDK:1.5.0_10
Apache Tomcat:/5.5.15
の環境で、Java Servletを組んでいます。

実現したい処理があるのですが、いろいろ調べても見つからないので質問させて頂きます。

1.クライアントがボタンを押す(.htmlのページ)
2.1から命令を受け取ってサーブレットが処理する
3.1のページを更新して再表示してあげる
というようなものです。

わからないのが、3の サーブレットからHTMLへページ遷移する方法です。

すみませんが、何か方法があったら教えて下さい。

Aベストアンサー

処理が終わった後にサーブレットのページを表示させずに、パッと元のHTMLに戻るということですよね?
でしたら、
response.sendRedirect("XXX.html");←これをサーブレットの最後に入れればhtmlに遷移します。
responseですが、HttpServletResponseクラスの名前が、resとかならば
res.sendRedirect("XXX.html");という感じになります。

■サンプルページ
Java 入門 | Servlet/JSP/Java Bean | リダイレクト:http://www.nextindex.net/java/servlet/sendRedirect.html
リダイレクト(redirect) - サーブレット間の連携 - サーブレット入門:http://www.javadrive.jp/servlet/dispatch/index4.html

Q仕様書?設計書?要件定義書?

仕様書・設計書・要件定義書、これらの違いがいまいちパっとしないのですが、どう言う違いがあるとかんがえたらよいのでしょうか?

要件定義書は顧客の要求をまとめたもので、それに基づき作成するものが仕様書と理解していますが、仕様書と設計書の違いとはどのような違いでしょうか?
境界の目安がわかればおしえていただけるでしょうか?
また、システム設計書と外部設計書の違いもいまいちわかりません。

教えてください。

よろしくお願いいたします。

Aベストアンサー

要件定義書は、顧客の要望をまとめたものです。ヒアリングをしながら開発側が作っていってあげるケースが多いですが、顧客が作る場合もあります。乱暴な言い方をすれば、できるかできないかはおいといて、とにかく顧客の「こうしてほしい、こういうのがほしい」をまとめたものです。
仕様書は、要件定義書に基づいて(他の情報や調査結果も使いますが)システムがどういう稼動環境下でどのような機能を具備するかを定義したものです。費用や時間、背反する要件などを詰めていって、結局、「こういうのを作ります」をまとめたものです。
設計書は、仕様書に記載されたものを、具体的にどう作るかを記述したものです。きちんとした顧客ならちゃんとチェックしますが、主に作り手が必要とするものです。
システム設計と外部設計は、開発するシステムの内と外ですね。外部設計書は、そのシステムが外部とどういう関係をもつかを記したものです。どのような業務の流れの中で、どのように使われ、他のどういったシステムと連携をとるのかということです。ここをきちんと詰めておかないと実業務で役に立たないシステムになってしまいかねません。
…と「読んで字の如く」的な説明をしてしまいましたが、お役にたてたでしょうか。
なお、shikakuhonpoさんのご指摘の通り、実際には会社によって定義が違うので、毎回、きちんと確認し、関係者間で定義を明確にしておかないとトラブルになりかねないので注意してください。

要件定義書は、顧客の要望をまとめたものです。ヒアリングをしながら開発側が作っていってあげるケースが多いですが、顧客が作る場合もあります。乱暴な言い方をすれば、できるかできないかはおいといて、とにかく顧客の「こうしてほしい、こういうのがほしい」をまとめたものです。
仕様書は、要件定義書に基づいて(他の情報や調査結果も使いますが)システムがどういう稼動環境下でどのような機能を具備するかを定義したものです。費用や時間、背反する要件などを詰めていって、結局、「こういうのを作ります...続きを読む

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング