人に聞けない痔の悩み、これでスッキリ >>

こんにちは、私はJSP、サーブレット、JavaBeans
の仕様は理解しているのですが、最近Strutsも見てみようと思い、挑戦してみました。使ってみて感じたこととしては。

1.こういう作り方をしているとシステムがどのような仕組みで動いているか深いレベルで理解できないのではないか?(サーブレットの作成はコンテナーが自動で行うみたいだし)

2.コンテナーが自動で様々なファイルをで作成してくれるのは業務効率アップにはなるだろうけれど、
その分プログラマーは、機械によって自動で書かれたコードは理解しずらいだろうし保守にはよい影響をあたえないのだろうか?


3.JSPのカスタムタグをたくさん覚えないといけない

4.なぜ意味もなくフォームにクライアントからリクエストがあるたびに一度データを格納してアクションで使っているのか

5.アクションはなぜ必要なのか。実際コントローラーなのだからサーブレットでもよいのではないか?

など悪い点ばかりに気がつき、いい点がうまく理解できませんでした。これらの疑問について業務経験のあるかた解答をあたえていただけないでしょうか

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

A 回答 (4件)

 なにを疑問に思ってらっしゃるのか、俺には痛いほどよく分かります(笑)



1.こういう作り方をしていると...
 そのとおりです。
 でも実際のところ、『WEB開発』という仕事はITバブル期に一気に一般普及したものであるため、『理解できる人達だけの職人芸』であってはならないのです。
 初心者プログラマーでも、ある程度のものが作れなければいけません。
 サーブレットは少々固定観念の凝り固まりが強い傾向にはありますが、『職人以外には手も出せない』ようなシステムよりはマシなのです。

2.コンテナーが自動で様々なファイルを...
 サーブレットは保守自体も仕事を横割りする前提になっています。
 自動生成されたコードを読むのは、『それができる』人の仕事で、一般の管理者はそこまで厳密な保守をする必要はないというわけです。

3.JSPのカスタムタグをたくさん覚えないといけない
 最近のプログラム言語は覚えなきゃいけないAPIの数なんかも膨大です。
 それに比べれば少ない方だし、カスタムタグの多さは拡張性の高さに繋がるもので、ある程度やむをえないところはあります。

4.なぜ意味もなくフォームにクライアントからリクエストがあるたびに...
 これも開発作業を横割りにするためです。
 より深いフレームワークレベルのプログラムは上級プログラマーが組み、業務ロジックは一般プログラマーが作ることで、効率化を目指しているのです。

5.アクションはなぜ必要なのか。実際コントローラーなのだからサーブレットでもよいのではないか?
 これも4.と同じですね。
 1人の上級プログラマーに過負荷をかけるより、1人の上級者と複数の初心者とで仕事を分担した方が効率が良いからです。

 とまぁ、ここまでツラツラ書きましたが、実際のところこの回答ではあなたの不満は解消しないと俺は確信しています。
 なぜなら、サーブレットは『経営者ウケするように作られたシステム』だからです。

 市販のシステムパッケージというのは2種類あって、1つは『本当に現場のことを思って作られたもの』、そしてもう1つは『経営者ウケを狙って、現場の意見を無視して作られたもの』です。
 実際のところ、システムパッケージに対してお金を払うのは、コンピューターの素人であることが多い『経営者』で、現実的には後者のシステムの方がよく売れるんです。
 ようするに、『IT経済というものは現場で回ってるんじゃなく、会議室で回ってる』わけですね(^_^;
 それが現実です。

この回答への補足

みなさんすばらしい回答ありがとうございました。どの回答も非常に充実しており、みなさんにポイントをあげたいのですが、それはできないみたいなのでthe moonさん DQさん大変申し訳ありません。また機会がありましたら優先的にポイントを割り振らせていただこうと思います

補足日時:2006/03/31 01:30
    • good
    • 0

あなたが言っているのは、結局は「車輪の再発明」と同じことです。



深く理解できるから、JSPのカスタムタグのような複雑な機構は不要だから、リクエストパラメータをいちいちJavaBeanに押し込めなくてもよいから、サーブレットで何でもできるから、だから全部コーディングするのですか?

それではプロジェクトは成り立ちません。
Strutsのようなフレームワークは、毎回書かずにすむような部分を提供しているに過ぎません。中にはJSPのように、処理上は迂遠で重いだけのようなコードも含まれますが、それでもStrutsを選ぶのは、無駄な開発コストをかけないためです。

あなたはもしかしたら、Strutsよりシンプルな構造をベースにしたWebシステムを組めるかもしれません。
では次は?また0から組みますか?再利用するでしょう?
その再利用する部分は、結局Strutsと同じか、似たような機能の集合体になりませんか? ならなぜ、既にあるStrutsを使わないのでしょうか?

Struts登場以前は、各社から似たようなフレームワークが乱立していたのです。オープンソースでシンプル、かつ容易にカスタマイズ可能なStrutsが登場したことで、それらは結局駆逐されました。
駆逐されなくても、結局どこのプロジェクトでも、何かしらのフレームワークは使っていたでしょう。誰も、車輪(フレームワーク)を再発明(0から作り直し)したいとは思っていないからです。
    • good
    • 0

参考書にあるような単純な画面をつくるだけならStrutsのメリットは生かせないでしょう。


ですが、実際の業務では何百という画面を作ります。
そのためにいちいちサーブレットを作っては手間がかかりますし、質問者様のように開発者がみんなサーブレットを理解してるとも限りません。

また、サニタイジングの問題もあります。
Strutsのタグは、多少なりともそこを吸収して、開発者の作業を軽減してくれています。
また、カスタムタグはJSPでスクリプティングを書くことを少なくしてくれます。

できればStrutsのコードを読んで見てください。
実際に使っていても気づかないようなことをしてくれています。
それを毎回開発する手間を考えると、かなりの効率アップになるんじゃないでしょうか。
    • good
    • 0

その疑問点はもっともですので、その気づいた点を考慮に入れたフレームワークを作成してみてください。



例えばどのような形のがよいのでしょうか?

PHPは自由度がありすぎるので、JAVAの方がいいとか、その逆でJAVAでは敷居が高すぎるとか、いろいろ言われてそれぞれもっともなのです。

例えば、
1は、深いレベルで理解しなくても済むとも言えるのです。昔の人はアセンブラを知らずしてプログラムは語れないといいました。確かにそうでしょう。その後はCを知らずして、その後はJAVA、その後は…。

でも今のシステムをCで構築していたら膨大な時間がかかってしまいます。

逆に小さいものを作るならフレームワークは不要です。(当たり前ですが)

1つ経験者として言えるのが、struts(他のフレームワークでもいいです)というみんなと共通の約束事があると開発はスムーズに進みます。
でもその代わりルールも増えてしまうのです。

要は個々ではなく、全体としてとらえてみてください。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

QTomcatでのHTMLの表示

Tomcatで、HTMLファイルをwebappsディレクトリに作って、http://localhost8080/webapps/ファイル名.htmlというアドレスで表示しようとしたんですけど、HTTP404とエラー表示がされます。
http://localhost:8080にはアクセスできるんで、インストールは成功してると思うんですけど、何が原因なのでしょうか?

Aベストアンサー

#2です。。
記載しましたが、まったく間違った情報でした。すみません。
webapps/ROOTがデフォルトルートなので、そこに入れないと、http://localhost:8080/ファイル名.htmlには出来なかったですね。。

http://localhost8080/webapps/ファイル名.html
とするためには、TomcatのServer.xmlファイルに
<Context path="/webapps" workDir="フルパスディレクトリ" />
とか記載しないといけないかもしれません。

そのディレクトリに、ファイル名.htmlを配置になります。 間違った情報を掲載してしまいまして申し訳有りません。

QStrutsでJSPからListを受け取りたい

JSPに複数のhidden(動的に数が変化)があり、これらの値をformのlist(配列)に詰めたいです。
尚、nameの値は別の処理でjavascriptを使いvalueを変化させるため連番であれば構わないです。です。

~~~JSP~~~
<input type="hidden" name="str1" value="a"/>
<input type="hidden" name="str2" value="b"/>
<input type="hidden" name="str3" value="c"/>
~~~~~~~~
上のJSPから下記のFORMに詰めたい
~~~form~~~
private List strList;

public List getStrList(){
return strList;
}
~~~~~~~~

又、こちらで調べたところ下記のようにすればいけるようですが欲しい値は一つのためBeanを使用しなくても実現可能ではないかと思い、質問させていただきました。
よろしくお願い致します。

~~~JSP~~~
<input type="hidden" name="testArray[0].str" value="a"/>
<input type="hidden" name="testArray[1].str" value="b"/>
<input type="hidden" name="testArray[2].str" value="c"/>
~~~~~~~

~~~FORM~~~

private List list;
public TestBean getTestA(int iIndex) {
while (this.list.size() <= iIndex) {
this.list.add(new TestBean ());
}
return ( TestBean ) this.list.get(iIndex);
}
public Object[] getTestArray() {
return list.toArray();
}

public static class TestBean {
private String str = "";
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}

JSPに複数のhidden(動的に数が変化)があり、これらの値をformのlist(配列)に詰めたいです。
尚、nameの値は別の処理でjavascriptを使いvalueを変化させるため連番であれば構わないです。です。

~~~JSP~~~
<input type="hidden" name="str1" value="a"/>
<input type="hidden" name="str2" value="b"/>
<input type="hidden" name="str3" value="c"/>
~~~~~~~~
上のJSPから下記のFORMに詰めたい
~~~form~~~
private List strList;

public List getStrList(){
return strLis...続きを読む

Aベストアンサー

うーむむ・・・。こゆうことでしょうか。
アドバイスの方向が間違ってたらすいません。
(※実行してないため、コードはあくまで参考程度で。)

----Jsp側
<html:hidden property="strArray[0]" value="a" />
<html:hidden property="strArray[1]" value="b" />
<html:hidden property="strArray[2]" value="c" />
....

----Form側
String[] strArray;
List<String> strList;
public void setStrArray(String[] strArray) {
____this.strArray = strArray;
____this.strList = Array.asList(strArray);
}
public String[] getStrArray() {
____return this.strArray;
}
public List<String> getStrList() {
____return this.strList;
}

うーむむ・・・。こゆうことでしょうか。
アドバイスの方向が間違ってたらすいません。
(※実行してないため、コードはあくまで参考程度で。)

----Jsp側
<html:hidden property="strArray[0]" value="a" />
<html:hidden property="strArray[1]" value="b" />
<html:hidden property="strArray[2]" value="c" />
....

----Form側
String[] strArray;
List<String> strList;
public void setStrArray(String[] strArray) {
____this.strArray = strArray;
____this.strList = Array.asList(strArra...続きを読む

QJSPからServletへの遷移

今回、eclipseで開発をすることになりました。
しかしながら、動的Webプロジェクトという使い慣れないプロジェクトでの作成を
しなくてはならなくなり、混乱しています。

tomcatとWTPのことについては、先の質問で教えて頂き解決したのですが、
もう一つ困ったことがあったので、再度質問させて頂きます。

---------------------------------------
環境
Windows7 Ultimate
eclipse Indigo
tomcat 5.5
---------------------------------------

まずは、JSPを作成し、それを実行し、ブラウザ上に表示することは出来ました。
その後にServletに<form action ="/test" method = "POST">という形で投げるのですが、
それがうまくいかず、404エラーが出てしまいます。

階層としては、JSPはSample(プロジェクト名)/WebContent/NewFile.jspに配置しています。
そして、Servletについては、Sample(プロジェクト名)/src/test/Test.javaに配置しています。
web.xmlについては、Sample(プロジェクト名)/WebContent/WEB-INF/web.xmlにあります。

まず、JSPのソースは以下の様に書かれています。
-----------------------------------------------------
<%@ page contentType="text/html;charset=Windows-31J" language="java"%>
<%@ page pageEncoding="Windows-31J"%>

<html>
<head><title>タイトル</title></head>


<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<%request.setCharacterEncoding("Windows-31J");%>

<body>
<form method="POST" action="/test">
<%--ここに処理を記述 --%>
<input type = "submit" name="submit" value = "送信">
</form>

</body>
</html>
-----------------------------------------------------

Servletについては、以下の様に、型だけ記述しています。

-----------------------------------------------------
package test;


import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class Test
*/
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public Test() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

}
----------------------------------------------------

そして、web.xmlについては、以下の様に記述しています。
----------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>SampleWeb</display-name>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>test</servlet-name>
<servlet-class>test.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>

</web-app>
-----------------------------------------------------

その状態で、JSPの中から
<form action ="/test" method = "POST">
<input type ="submit" name = "submit" value="送信">
</form>

とやっても、404が出てしまいます。

Java自体が久々で、根本的に間違っているかもしれませんが、
ご教授お願い致します。

今回、eclipseで開発をすることになりました。
しかしながら、動的Webプロジェクトという使い慣れないプロジェクトでの作成を
しなくてはならなくなり、混乱しています。

tomcatとWTPのことについては、先の質問で教えて頂き解決したのですが、
もう一つ困ったことがあったので、再度質問させて頂きます。

---------------------------------------
環境
Windows7 Ultimate
eclipse Indigo
tomcat 5.5
---------------------------------------

まずは、JSPを作成し、それを実行し、ブラウザ上に表示すること...続きを読む

Aベストアンサー

# <form method="POST" action="/test">



<form method="POST" action="./test">

<form method="POST" action="test">


人気Q&Aランキング