トップページ⇒tech
983コメント352KB

JavaサーブレットQ&A LV2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
サーブレットに関する疑問・質問はこちらで。
0159☆NGNG
Java(Servlet)でExcelのファイルを編集したいのですが、どうすればいいのでしょうか?
0160む ◆.UAaBAKA NGNG
?
0161デフォルトの名無しさんNGNG
>>159
JCom使え
0162デフォルトの名無しさんNGNG
>>158
PipedInputStream/PipedOutputStreamはどうだ?
0163☆NGNG
つかえん
0164デフォルトの名無しさんNGNG
excelファイルを作成するtaglibがある
0165デフォルトの名無しさんNGNG
146>>
なんていうやつ?
0166デフォルトの名無しさんNGNG
tomcat4のservlet.xmlの設定、意味わかんね
マニュアルも英語しかないし・・
誰かわかる?
0167 NGNG
>>166
俺はお前の意味がわかんね。
英語っても義務教育で習ったろ?意味わかんね。
誰かわかる?
0168デフォルトの名無しさんNGNG
>>167
英語のマニュアルが読めないんだろ?
お前バカ?意味わかんね。
0169デフォルトの名無しさんNGNG
意味わかんね。誰かわかる?意味わかんね。
英語だよ、英語。意味わかんね。
誰かわかる?
0170デフォルトの名無しさんNGNG
>>169
キモッ
0171デフォルトの名無しさんNGNG
前の方、英語使わないで下さ〜い
どう思う?英語使ったよ今!
一番前で観てんのに英語使ってたよ〜?
感じ悪いね〜
アハハハ
0172デフォルトの名無しさんNGNG
荒れてンナ・・・。
0173デフォルトの名無しさんNGNG
servlet.xmlのマニュアル
和訳してあるサイトがあったような
0174メルトスライムNGNG
Javaサーブレットでアプロダみたいなものを作っていますが、
50kB以上のファイルを転送できません。
サーバーが見つかりませんという表示になるのです。
jspから転送するのですが、formタグのところには
enctype="multipart/form-data"があり、
サーブレットでリクエストからバイナリ(request.getInputStream)で読み取って
解析しています。
サーバーはtomcat3.2.2とApache1.3を使用、
OSはWin98、ブラウザはIE5.0を使用しています。
ソフトを新しいのにしろとは言わないでください。

0175manNGNG
>>174
私がところは問題なくUPできています。
methodがgetになっていないですか?


でもって、
私も似たようなことしていまして、

multipart/form-dataで送信したバイナリファイルの取得できたのですが、
普通の文字のエンコードで行き詰まっております。


new String(xxx.getBytes(),"JISAutoDetect")
new String(xxx.getBytes("ISO-8859-1"),"JISAutoDetect")
(xxxはServletInputStreamからreadLineで切り出したものです)

とかで問題なく取得できると思っていたのですが、???となってしまいます。

お気付きの点がありましたら、どなたかご教授おねがいします。
0176 NGNG
ISO-8859-1じゃなくてSJISにしてみたら?
0177デフォルトの名無しさんNGNG
>>175
multipart/form-data で送信されるテキストは特にエンコードされて
なくて Shift-JIS 直書きのテキストが送られてくると思う。そもそも
ServletInputStream#readLine() が返した文字列は化けてないの?
0178manNGNG
new String(xxx.getBytes("SJIS"),"JISAutoDetect"))でもだめでした。

これはsoralis上で発生しているんですが、
さきほどwindows環境でやってみたら、なんの問題もなく全角が表示されました。

どうやらデフォルトエンコーディングとかが怪しそうです。

tomcat4.0のデフォルトエンコーディングの設定はどこにあるのでしょうか?
申し訳ありませんが、ご教授よろしくお願いします。

一応ページの最初では
<%@ page contentType="text/html; charset=Shift_JIS" %>
としています。


0179 NGNG
charsetがサーバー依存の予感
0180manNGNG
>>177
恥ずかしいことなのですが、
サーバが側の設定を正しくしておらず、
System.out.println("あ");とやっても化けてしまうので
確認できません。
(最後に戻せばよいかと思っておりました。)

http://www.t3.rim.or.jp/~yoko-k-h/java/servlet/programming/howtoupload.html
に送られてくるサンプルがありましたね。

が、原田さんのページもエンコードとしてはnew String(uploadfile.getBytes("ISO-8859-1"), encoding)だけで
他に特別なことはなさそうです。

Windwos環境では正しく全角の表示がコンソールでもブラウザでも確認できております。

やはり環境が違うだけで表示できなくなるということなので、
TOMCATの設定なのでしょうか?
0181デフォルトの名無しさんNGNG
>>180
> System.out.println("あ");とやっても化けてしまうので
> 確認できません。

まずそれを直してから話を進めれ
0182メルトスライムNGNG
174のことですが、サーバー(Apache)をいじって解決しました。
1MB以上のファイルをはねる機能を付けていますが、
はねる場合にリクエストを読み込まずにすむ方法はないのでしょうか。
アップロードできないのにレスポンスが遅いのはちょっと問題かと。
あと、テキストファイルのエンコードはいじっていません。
>>175
methodはPOST(大文字)です。POSTには二重引用符もつけてあります。
0183デフォルトの名無しさんNGNG
>>182
リクエストの Content-Length ヘッダ見て 1MB 以上なら処理を止めちゃえば
0184manNGNG
解決しました。超初歩的なミスをしておりました。
String(byte[] bytes, int offset, int length) は
これはデフォルトエンコーディングを使うということで
String(byte[] bytes, int offset, int length, String enc)で万事解決しました。

昔はtomcatの起動時に引数を与えてやることによって
デフォルトエンコーディングを指定できたようですが、
現在は無視され、反映されないと聞きました。
みなさん、デフォルトエンコーディングはどのように指定されていますか?

ちなみに、私の環境のデフォルトはgetPropertyで見たところ646と出力されasciiでした。


>>182
こんなページはどうでしょう?
http://support.softartisans.com/docs/safileupdocs/japanese/Documentation/prog_g_clientrestrictfile.htm

0185piraniaNGNG
PreparedStatementを使ってバイナリデータをDBに追加したいのですが、
PreparedStatementX.setBinaryStream(2,ByteArrayInputStreamX,10240);を処理すると

InputStream as parameter not supported
at org.postgresql.jdbc2.PreparedStatement.setBinaryStream(Unknown Source)
とエラーが発生します。

パラメータ等問題ないように思うのですが、同じよう経験された方、
何かお気付きの方、ご教授お願いします。
0186デフォルトの名無しさんNGNG
そのメッセージが正しいなら PostgreSQL の JDBC ドライバが
setBinaryStream() をサポートしていないんじゃないの?
0187メルトスライムNGNG
>>184
ありがとうございます。
クライアントサイドで止めるということですね。
>>183
サーバーエラーになります。(悲
0188振られ気分でロックンロールNGNG
すいません、ご教授お願いします。
Q1.サーブレット作っているのですが、一度サーバにアップしたあと
確かめる(セッションを開始)
間違ってた(表示関係)ので手直しして再度アップ。
リロードしても反映されず。HTMLやJSPは反映されるのでサーバは動いている。
こんなことってありえます?
サーバにアップしたファイルをデリートしてもIEでリロードしても見れるのです。
対処法をお願いします。手直しができない…

Q2.req.getCharacterEncoding();  (実例:String encoding = req.getCharacterEncoding(); )
がコンパイルを通りません。この一文を消せば通ります(実際はout.println(encoding);も消しますが)
なんででしょうか?エンコード指定ができないので文字化けが…
ちなみに、JSPでのpageEncoding指定も通りません。

宜しくお願いします。

環境
開発OS:WindowsME
確認用プラウザ:IE5(観覧IE5以上限定で作ってます)
サーバ:TOMCAT、アパッチ
SDK:1.3.1

0189デフォルトの名無しさんNGNG
キャッシュじゃねーの?
それと、コンパイルが通らない、だけじゃわかんねーよ。
0190デフォルトの名無しさんNGNG
>>188
Q1:再起動か、classの再ロード
Q2:java.net.URLEencoder.encode
0191デフォルトの名無しさんNGNG
>>190 ネタ?
0192振られ気分でロックンロールNGNG
レス、ありがとうございます。
>>189 すいません、エラーメッセージです。
シンボルを解釈処理できません。
シンボル: メソッド setCharacterEncoding (java.lang.String)
位置 : javax.servlet.http.HttpServletRequest の インタフェース
req.setCharacterEncoding("JISAutoDetect");
  ^<ピリオドについている

キャッシュは疑ったのですが、対処法はプラウザ上での再読込を行っただけです。
HTML等の場合はOKですが、サーブレットでこれって対処法になってますか?
他のキャッシュのクリア方法がありましたらご教授お願いします。
ちなみに、仕方ないので、今はファイル名を変えながら試しています…
これまた、一回アップしたら更新できないので、これの繰り返しですが
なのでサーバアップのディレクトリやアドレス間違いではありません。

java.net.URLEencoder.encode
これって、どうやって使うのですか?
検索してみたけど0件でした。
0193デフォルトの名無しさんNGNG
>>192
getじゃなくてsetって書いてるじゃねーか!
ボケナス!
ついでにServletは自動リロードされると思うな!
Tomcatを再起動しろ!
チンカス!
0194デフォルトの名無しさんNGNG
キャッシュはブラウザだけの技ではないのでござる。
再起動をむずがっていては、サーブレットの開発などできませぬ。
みな毎回立ち上げなおしているのでござる。
めんどうなのは、javaを選んだことであきらめないと。
沈下す扱いされても、ただただ再立ち上げを。
わたしなど、修正すると手がかってに再起動コマンドを...
0195振られ気分でロックンロールNGNG
>>193 (=189?)
すまんすまんすまん!はずかしぃぃぃぃ ありがとう! 撃つ打・・・

>>193 ,194
ありがとうござました。
サーバかあ立ち上げ直さないといけないのですね。
サーバ管理者は別だったのですがなんとかしなくちゃ・・・

ありがとうございます。いつか恩返しできるくらい成長したる!
0196振られ気分でロックンロールNGNG
しかも セルフ晒しage ・・・
0197デフォルトの名無しさんNGNG
JSPなんですけどスレが無くて・・・わかる方いたらお願いします。
<%
Integer count = (Integer)session.getAttribute("count");
count = new Integer(count.intValue()+1);
%>
<%
session.setAttribute("count",count);
%>
こんな感じであるJSPでカウントアップして、セッションで共有して
他のJSPで<%= count %>と表示するのを作ったのですが、
これの文字版ができません。
あ、ただたんに文字変数を共有したいだけです。文字でカウントアップはしませんです。
Integer count = (Integer)session.getAttribute("count"); 文の
個人的には Integer を Characer にすれば,,,と思ったのですが
生成されたサーブレットのエラーです:
/var/tomcat4/work/dev_pc1/examples/jsp/hanatest/kobetsukeiyaku_0005fkakunin$jsp.java:132: java.lang.Object から char へのキャストが無効です。
char moji = (char)session.getAttribute("Moji");
とエラーが。先ほどのcount が成功しているファイルでやってるので
sessionの定義関係で失敗はないと思うのですが,,,


0198197NGNG
ごめん、いまやったらコンパイルエラーじゃなくてサーバエラーになった,,,

Apache Tomcat/4.0.2 - HTTP Status 500 - Internal Server Error

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

type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

exception

java.lang.ClassCastException: java.lang.String

0199デフォルトの名無しさんNGNG
セッションに入っているのは文字列。setAttribute() でやったとき
String 型のオブジェクトを入れたでしょ。だから取り出すときは

String str = (String)session.getAttribute("Moji");

多分 1 文字だけの文字列が入っていると思うので、

char ch = str.charAt(0);
0200197NGNG
>>199
ベリーサンクスっす!できました!感謝感激です。そしてもう一つだけ・・・
今、この質問のおかげで共有変数にできたので回避はできるのですが
<jsp:include page="Monamona.jsp" >
<jsp:param name="Mona" value="もなー"/>
</jsp:include><br>
これのinclude文でパラメータに変数の値を入れたいのですが可能でしょうか?
気持ち的には
<%! String moji = "もなー"; %>
<jsp:include page="Monamona.jsp" >
<jsp:param name="Mona" value=moji />
</jsp:include><br>
って、感じで変数の値を渡したいのです。 可否だけでも良いので教えてくださいませ・・・
0201デフォルトの名無しさんNGNG
やってみろ。
0202197NGNG
>>201
もちろんやったよぅ エラーが帰ってきたよ。ちゃんと”でくくれって・・・
0203デフォルトの名無しさんNGNG
じゃあ
<jsp:param name="Mona" value="<%= moji%>"/>
でやってみろ。
0204197NGNG
>>203
できました!ありがとうございました!<%= が書けるとは思わなかったよ ありがとう
0205デフォルトの名無しさんNGNG
Googleで探せばすぐに見つかるだろ。
リファレンスくらい読め。
0206aNGNG
ある文字列の中から特定の文字を除外し、新たな文字列を作る場合、
JAVAでそういったことを簡単にやれる関数ってないですよね?

やっぱ、文字数調べて、ループ回して、一文字フィルタかけるしかないのかなぁ?
0207デフォルトの名無しさんNGNG
>>206
ちと大げさかも知れんが、正規表現は?

http://www.alphaworks.ibm.com/tech/regex4j
http://www.mycgiserver.com/~tora/java/regexp.html
http://www02.so-net.ne.jp/~greentea/doc-jp/regexp/
0208 NGNG
っていうか、jakarta-oroじゃないの?
0209デフォルトの名無しさんNGNG
regexpもな。
0210aNGNG
ご回答ありがとうございます。

jakarta-oroやregexpというものがあったのですね。勉強不足でした。

大きな差はないですが、なんとなくjakarta-oroがよさそうな感じですね。

vbやPerlはこういった文字列操作する関数が沢山ありますが、
JAVAはそこらへんは使いにくいですね。
バージョンが上がれば追加されてくるのかな?
0211デフォルトの名無しさんNGNG
1.4から追加されてねーか?
0212aNGNG
すみません。文字列置換は存在していました。
replace(char oldChar, char newChar)
0213デフォルトの名無しさんNGNG
JAVA初心者スレはスレ違いだったみたいなのでこちらで質問します。

入力ホームにあらかじめ任意の値を入れておく事はできますか?
理想は、クッキーつかった掲示板での名前入力みたいな感じです。
できればクッキー使わずに、内部だけで行いたいのですが・・・
0214デフォルトの名無しさんNGNG
>>213
板違いだヴォケ

+ JavaScript の質問用スレッド vol.8 +
http://pc.2ch.net/test/read.cgi/hp/1014289221/l50
0215213(ヴォケ)NGNG
>>214
ありがとう。おかげで助かりました。
0216デフォルトの名無しさんNGNG
<jsp:include page="***.jsp" flush="true" />
とした場合、***.jsp内で
out.close();return;
としても、呼び出し元の残りの処理は一様に処理されてしまうのですが、
(out.close()しているので出力はされない)
ただ出力を止めているだけで、ムダな処理コストが発生してしまいます。

理想的にはreturn;をしたところで、処理を完全に止めたいのですが、
やはり、呼び出され側(jsp:include)の場合は無理なのでしょうか?
<%@ include file ="**"%>では当然可能ですが、jsp:includeでは
セッションに適当なフラグを作って呼び出し元で判断するしかないのでしょうか?
0217デフォルトの名無しさんNGNG
例外でも使えば?
0218デフォルトの名無しさんNGNG
>>217
try{
%><jsp:include page="***.jsp" flush="true" /><%
out.println("出したくないメッセージ");
}catch(Exception e){
}
として***.jsp先でthrow new Exception("exit!");
とするということですか?


throw new Exception("exit");としてやるということですか?
0219デフォルトの名無しさんNGNG
すみません。↑文末に変な繰り返しをしてしまいました。
0220デフォルトの名無しさんNGNG
アホしかおらんのか
0221デフォルトの名無しさんNGNG
まぁQAスレだし
0222デフォルトの名無しさんNGNG
>>216
System.exit(0);
0223デフォルトの名無しさんNGNG
JSPの中でreturnをやる奴なんて初めて聞いた。
目から鱗ってか、天然の恐ろしさってか。そんなの使うなよ。
0224582NGNG
>>223
同意。

つーか、returnさせたあとで動いてしまう処理ってのは何だ。
何をやりたいのだいったい。
0225デフォルトの名無しさんNGNG
>>223
何がそんなに恐ろしいんだ? 途中で return するとフローが終えないほど素人な
コードでも JSP に搭載しているのか?

だいたい拡張タグの SKIP_PAGE でも途中で return するだろ。認証していない
ときとか、ブラウザがおかしいときとかでエラーページに
forward()/sendRedirect() して return ってのはよくやるけどな (ちゃんと
作るときは拡張タグにするが)。
0226デフォルトの名無しさんNGNG
http://www.mycgiserver.com(resin) を利用したことがある方に質問です。

servletを動かす手順(ファイルを置くパス、いじるファイル名等)を教えてください。
FTPで/に/WEB-INF/classesを作ってそこにclassファイルを置いたりしてみたんですが、うまくいきません。
ちなみにローカル(Tomcat4.0.1)ではservletは動いています。
よろしくおながいします。
0227デフォルトの名無しさんNGNG
('-`)。o○(「うまくいきません」か…)
0228226NGNG
javax.servlet.ServletException: Class `ServletTest' was not found in classpath.
Classes normally belong in /usr/local/resin/doc/WEB-INF/classes.

こんな感じです。

>>227
?
うまくいきませんが、何か?
0229デフォルトの名無しさんNGNG
>>223
何故JSPの中でreturnしてはいけないんだ??
0230226NGNG
自力で解決しました。WEB-INF/classesとかweb.xmlとか難しく考えていたようです。
あと、mycgiserverでは超が5つ位つくほどガイシュツな質問でした(;´д`)
0231デフォルトの名無しさんNGNG
>>229
223ではないが、JSPはHTMLのテンプレートのように使うような気がするのだが、
そういう中でreturnなんていらないよな?
0232デフォルトの名無しさんNGNG
>JSPはHTMLのテンプレートのように使うような気がするのだが

JSPがHTMLの雛型??
スマソ、意味分からない。
0233デフォルトの名無しさんNGNG
>>231
なんでやねん。君のシステムは正常系しか想定してないのか?
0234223NGNG
>225
returnがおかしいってのは誤解を招いたね。
たしかに、<jsp:forward>がreturnしていることだという意味では、普通なことだと思う。
まあ、使わないに越したことない、作り方もう少し考えれば、っつうくらいに訂正しておく。

ところで、mycgiserverは使ったことないけど、当然secirity managerはちゃんと設定してあるんだよね? >222 をマジにやる奴もいるだろうし…。
0235デフォルトの名無しさんNGNG
> 使わないに越したことない、作り方もう少し考えれば、
おっけー
0236バカ厨NGNG
すみませんが、お知恵を貸してください!

WEBアプリケーションで、クライアント(ブラウザ)の
同一フレーム内にリストBOXが二つあり
一方の選択結果(KEY−1とする)によって
もう一方のリストBOXの内容を動的に変えたい…
なおかつ、この表示内容は、上記で選択された
KEY-1を使ってDB検索した結果を表示させたい…。
なんてことがやりたいのですが。
選択されたKEYをサーブレットに返して、同じフレームを再表示する方法以外で実現できますか?

0237デフォルトの名無しさんNGNG
>>236
サーブレットだけじゃできない
0238バカ厨NGNG
>>237
〜だけじゃなくても構いません…
ヒントだけでも…
0239237じゃないけどNGNG
>>238
JavaScript 使え
0240デフォルトの名無しさんNGNG
JavaScriptもキビしくないか?
アプレットつかえ。
0241バカ厨NGNG
それってデータをダウンロードさせといて
JavaScriptの関数をOnSelectで呼び出し
表示を切り替える…ってことでしょうか?

それはやりたくなかったので・・・
0242デフォルトの名無しさんNGNG
だからアプレットをつかえと・・・
0243デフォルトの名無しさんNGNG
ねねね、サーブレットとJSPとHTMLって
どうやって使い分けしてる?まぁHTMLは別物だけどさ
結局
HTMLは、サーブレットで作れるし、サーブレットはJSPで作れる。
なんだか全部で似たようなものが作れるからこの処理はこれで!
みたいな明確さが解からないのです。教えてくださらんか・・・ゴホゴホ
0244デフォルトの名無しさんNGNG
サーブレットでアプリケーションの動きをコントロールして、
JSPでその結果をビューする、ってのが一般的じゃないか?
簡単なアプリだとJSPだけでやることもある。
サーブレットの参考書にMVCってのが書いてあるだろうからそこいらを読め。
0245デフォルトの名無しさんNGNG
教えてください。

EJBの戻りが、
独自クラスのツリー状にネストしたものでも動くんですか?
0246デフォルトの名無しさんNGNG
>>245
知るか
0247245NGNG
おまえらJSPとか、サーブレットとかさわっただけで
へらへらしてんじゃねーよ。
はやく教えれ。
0248デフォルトの名無しさんNGNG
何が言いたいのかわかりません。
0249デフォルトの名無しさんNGNG
ネスト=nest=入れ子

■[入れ子]の大辞林第二版からの検索結果 

いれこ 【入れ子・入れ籠】

(1)大きな箱や器の中に、それより一まわり小さくて同じ形のものを順々に入れていくこと。また、そのように細工された箱・器。
(2)自分の子が死んだあと、迎え入れた他人の子。養子。《入子》
(3)〔(1)の意から〕内に隠されている事情。
(4)和船で、櫓臍(ろぺそ)をはめるための櫓にある穴。
0250デフォルトの名無しさんNGNG
>>245
国語の成績が悪かったろ?
0251デフォルトの名無しさんNGNG
木状の入れ子か。フラクタルだな。
0252デフォルトの名無しさんNGNG
そのEJBはSession?,Entity?それともMessage?
当たり前ですが仮にSessionである場合、戻りを返せたとしても、
そのNestedTreeSetが膨大なデータ転送を行う可能性があります。
なんかXMLを連想させるのですが得たい戻りが独自インスタンスに
おけるインターフェースへの参照が得たいので無ければ、素直に
データをバラシテ組み立てるか、永続化させた方がいいぞ。
(それにステート状態も???)
と書いてみるUnitTest
0253デフォルトの名無しさんNGNG
あのー、お尋ね申してよろしいかな?

今出てる SPARC版J2SE 1.4.0 て、リファレンス実装だろうか、それともプロダクト版だろうか?
-server付けても、JDK1.3よりレスポンスかなり悪いんですけど。

あ、動作環境は、Apache1.4 Catalina Struts ですが。誰かご存じないかのー…
0254253NGNG
○ Apache1.3.19
× Apache1.4
#恥
0255デフォルトの名無しさんNGNG
jspでJavaBeansを使う場合で、
<jsp:setProperty name="XXX" property="xxx" valie=<%=val%>>
とした場合、<%=val%>に値が設定されていない(<%=val%>の値が"")場合
set〜の処理が実行されないのは仕様なのでしょうか?
具体的には、<%=val%>にはTextBoxの値を渡していて、デフォルトで元の
値が入っており、それを画面で削除した場合です。
0256デフォルトの名無しさんNGNG
>>253
Tomcat4は今のところTomcat3よりかなり遅いみたいだけど
そういうことではない?
0257デフォルトの名無しさんNGNG
session間でパラメータを共有したいのですが、配列って可能ですか?
String Moji = (String)request.getParameter("moji");
  session.setAttribute("moji",Moji);
早い話がこれの、配列バージョンの書き方なんですけど・・・宜しくお願いします。
getParameterValues が無かった・・・

0258デフォルトの名無しさんNGNG
何も考えずにString[]にしたらいいだろ。
String[] mojis = {"あ", "い"};
sessin.setAttribute("mojis", mojis);
...
String[] anotherMojis = (String[])session.getAttribute("mojis");
■ このスレッドは過去ログ倉庫に格納されています