★★Java質問・相談スレッド165★★
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/10/20(日) 19:30:39.35JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
(p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※
前スレッド
★★Java質問・相談スレッド164★★
http://toro.2ch.net/test/read.cgi/tech/1378219684/
0657デフォルトの名無しさん
2013/11/13(水) 17:40:33.60軽くよんでみたんですけどこれってサーバー側で動的ページを表示させる方法にみえるんですけど
クライアント側でもHttpServletっていうクラスを使えばできるんですか?
まだServretの中身よんでないんですけど
方針がまちがってなければちゃんと調べてみます
0658デフォルトの名無しさん
2013/11/13(水) 17:42:50.89http://itpro.nikkeibp.co.jp/article/COLUMN/20070831/280847/
Lesson: Working With Cookies (The Java? Tutorials > Custom Networking)
http://docs.oracle.com/javase/tutorial/networking/cookies/
0659デフォルトの名無しさん
2013/11/13(水) 17:50:42.670660デフォルトの名無しさん
2013/11/13(水) 17:51:54.220661デフォルトの名無しさん
2013/11/13(水) 17:54:56.680662デフォルトの名無しさん
2013/11/13(水) 17:59:36.13というかそもそも読むだけしかできなくて
パスとIDをポストして結果をクッキーにためる処理もできないことに気づきました;;
Cookie = new Cookie();
url.post("id=...&pass=..., cookie); とかすれば勝手にクッキーに情報がたまって
url.openStream(cookie); みたいに引数でわたしたら勝手にクライアント認識してくれるようなクラスがあると思ってました;;
もうちょっと勉強しないと自分には無理っぽいです><
どうもおさわがせしました…
0663デフォルトの名無しさん
2013/11/13(水) 18:01:23.290664デフォルトの名無しさん
2013/11/13(水) 18:02:51.540665デフォルトの名無しさん
2013/11/13(水) 18:03:52.580666デフォルトの名無しさん
2013/11/13(水) 18:05:54.880667デフォルトの名無しさん
2013/11/13(水) 18:11:32.08CookieStore store = getCookieStore(); //クッキーのデフォルト保存先(メモリ)へのアクセス取り出して
CookieStoreのadd get removeを使ってファイルに書き出すなりファイルから読み込むなりして管理すれば十分だろJK
0668デフォルトの名無しさん
2013/11/13(水) 18:18:47.630669デフォルトの名無しさん
2013/11/13(水) 18:22:11.120670デフォルトの名無しさん
2013/11/13(水) 18:27:50.31まず、Javaのクラスは常にヒープを使用するというのが気になったので、
配列などにあらかじめインスタンスをたくさんnewして格納しておき、必要なときにその配列から
未使用のインスタンスを検索して取り出して、不要になったら配列に返す、という方法で
擬似的にスタックを再現しようと思いました。
叩き台としては、十分なreserve数を用意したArrayListにインスタンスをnewして詰め込んだあと、
インスタンスを使用するときにpop、返却するときにpush、という方法で作りました。
しかしながら、テストをしてみるとインスタンス化するクラスがよほど大きなクラスでない限りは
newしたまま放置するのとほとんど差がありませんでした(むしろ遅いときの方が多かった)
ここで質問なのですが、実際のところ、このような方法で素のnewやGCの機能を使うよりも
高速化を図ることはできるのでしょうか?
0671デフォルトの名無しさん
2013/11/13(水) 18:29:10.800672デフォルトの名無しさん
2013/11/13(水) 18:30:11.230673デフォルトの名無しさん
2013/11/13(水) 18:30:24.540674デフォルトの名無しさん
2013/11/13(水) 18:30:48.99Javaを使うことを諦める
0675デフォルトの名無しさん
2013/11/13(水) 18:34:30.15でも宿題だから仕方ない
0676デフォルトの名無しさん
2013/11/13(水) 18:38:40.65★★ Java の宿題ここで答えます Part 72 ★★
http://toro.2ch.net/test/read.cgi/tech/1337692704/
0677デフォルトの名無しさん
2013/11/13(水) 18:42:55.68特にコンストラクタが
0678デフォルトの名無しさん
2013/11/13(水) 18:43:00.11GCが発生しそうなプログラムなら速くなると思いますけどね
new って実際メモリ確保する時間はほぼ一瞬なのでインスタンス化の時間は変わらないと思います
0679デフォルトの名無しさん
2013/11/13(水) 18:48:28.61http://www.ibm.com/developerworks/jp/java/library/j-jtp01274/#3.1
0680デフォルトの名無しさん
2013/11/13(水) 19:09:17.52荒らすな雑魚
0681デフォルトの名無しさん
2013/11/13(水) 19:26:36.75みなさんありがとうございます。
>>679
とても参考になりました。今回とは関係ないけれど不変オブジェクトについても
大変興味深かったです。Scalaやりたくなってきた・・・
0682デフォルトの名無しさん
2013/11/13(水) 19:38:20.94誰がなんと言おうとプリミティブラッパーは普通の数値として計算に使おうとするとゴミだし
0683デフォルトの名無しさん
2013/11/13(水) 20:21:34.86こういった「その時代時代のパラダイム」に依拠したネイティブ・ハッキングは、たとえお金を積まれたとしてもあまりやりたくないね
0684デフォルトの名無しさん
2013/11/13(水) 20:22:16.37使い道の無いかもしれないオブジェクトを後生大事にプールしておくより、
短寿命のオブジェクトをポコポコ作る方が効率よい。
0685デフォルトの名無しさん
2013/11/13(水) 21:15:26.67関数型言語の名手で関数戻り値マンセーだから不変オブジェクトにこだわりがあるのもよくよく分かる。
ただ、オブジェクト指向言語を使ってライブラリを設計するというのは、不変オブジェクトやシングルトンだけでなく、関数型由来の方法以外の、他の方法論もたくさんある、ということは一言いっておきたい。
0686デフォルトの名無しさん
2013/11/13(水) 21:19:47.40そういうのは気にしなくていいと記事には書いてある
0687デフォルトの名無しさん
2013/11/13(水) 21:35:50.65Apache CommonsのHttpClientを使え。
標準クラスライブラリの範囲内でもCookie処理は実現できるが、
Java 6ではexpiresの解釈にバグが混入していたり(7以降は解決済み)、
http://www.javainthebox.com/2007/09/blog-post_4729.html
Set-Cookieの適用順が変わっているからエラーが起きたり、
http://tomott.cocolog-nifty.com/blog/2010/09/javecookie5-5d9.html
ライブラリとしての完成度や信頼性は高くない。
0688デフォルトの名無しさん
2013/11/13(水) 21:53:59.14レスありがとうございます
これすごいですね
ぱっとみた感じ HTTP のプロトコルわからなくても
フォームにかかれてるの name と value の Map を渡すだけで
POST リクエスト作ってくれるみたいですね
あれからもずっと調べてたりプログラムかいたり試行錯誤してたんですが
そもそもログインフォームのソースみながら
POST してクッキーを受け取る部分すらできなくて困ってました…
さっそく使ってみようと思います
0689デフォルトの名無しさん
2013/11/13(水) 22:04:33.070690デフォルトの名無しさん
2013/11/13(水) 22:20:27.17kwsk
0691デフォルトの名無しさん
2013/11/13(水) 22:26:41.080692デフォルトの名無しさん
2013/11/13(水) 22:38:05.92プリミティブ型は後方互換のために存在するって言い切って良いレベルだとでも?
0693デフォルトの名無しさん
2013/11/13(水) 22:44:53.710694デフォルトの名無しさん
2013/11/13(水) 22:51:11.460695デフォルトの名無しさん
2013/11/13(水) 22:56:57.70ていうか2ch用のネタの投下だってことに気づけw
0696デフォルトの名無しさん
2013/11/13(水) 22:59:37.130697デフォルトの名無しさん
2013/11/14(木) 00:14:14.09ようやくポストするとこまでいけたけど HTTP コード 302 が帰ってきてボディがからっぽになる;;
302 って軽く調べたらリダイレクトらしいんですけどリダイレクト先の URL がどこにもない;;
0698デフォルトの名無しさん
2013/11/14(木) 00:26:00.04本当にリダイレクト先のURLが書いていないのなら、それはサーバーが意図的にそういう設定にしてるってことだからどうにもできない。
POSTしたデータがおかしいからサーバーがエラー吐いてる可能性もある。
0699デフォルトの名無しさん
2013/11/14(木) 00:42:00.13HTTPヘッダのLocation見ろ。
そして、HTTP勉強してから出直せ。
とりあえずcurlとか使って、手動でできるレベルになれ。
0700デフォルトの名無しさん
2013/11/14(木) 00:54:08.77>>697
リダイレクト対応する場合は以下のコード追加しろ
http://d.hatena.ne.jp/lettas0726/20120806/1344264352
0701デフォルトの名無しさん
2013/11/14(木) 02:11:47.94MyInterfaceを実装するMyClassを総称型引数に持つList<MyClass>のインスタンスを、myMethod(List<MyInterface> myInterfaceList)に渡したい
0702デフォルトの名無しさん
2013/11/14(木) 02:13:27.380703デフォルトの名無しさん
2013/11/14(木) 02:17:10.340704デフォルトの名無しさん
2013/11/14(木) 02:23:48.84myMethod(List<? extends MyInterface> myInterfaceList)
こんな感じ?
0705デフォルトの名無しさん
2013/11/14(木) 02:25:57.18http://www.ne.jp/asahi/hishidama/home/tech/java/generics.html
0706デフォルトの名無しさん
2013/11/14(木) 02:54:54.39ありがとうございます
職場で試します
0707デフォルトの名無しさん
2013/11/14(木) 03:08:07.63こうか?
0708デフォルトの名無しさん
2013/11/14(木) 03:41:47.94レスありがとうございました
>>700 さんの方法がうまくいけば簡単そうなので試そうとしたんですが
パッケージ内のクラスに DefaultRedirectStrategy ってクラスがないみたいで
HttpClient に setRedirectStrategy ってメンバーメソッドもないみたいだし
4.3.1 をおとしたんですけどこの記事とバージョンが違ったのかな…
@Override っていう書き方はじめてみたんですけど
匿名クラスを自分で定義する感じなんでしょうか…
>>698,699
Location って HTTP ヘッダよむ方法がようやくわかってなんとかリダイレクト先のURL取得できたので
明日また手動でリダイレクト先を取得しにいこうと思います
いろいろアドバイスありがとうございました
0709デフォルトの名無しさん
2013/11/14(木) 07:37:19.12あとの細かい試行錯誤はブログでやって
0710デフォルトの名無しさん
2013/11/14(木) 08:17:21.87Stringはそのまま使えるのに。
統一しろや。
0711デフォルトの名無しさん
2013/11/14(木) 08:22:53.63httpclient-4.3.1.jar
httpcore-4.3.jar
が適切にクラスパスに追加されてれば以下のコードが動くはず
http://ideone.com/Ukqu1n
俺の環境で実行に成功したコードをそのままコピーしてきたから、
これがエラーで動かない場合はクラスパスの設定がおかしいってこと
0712デフォルトの名無しさん
2013/11/14(木) 08:35:34.79プリミティブ型もクラスとして扱う考え方は後付けで色々ほころびがあるのはやむを得ない。
文句を言わず我慢しろ。
0713デフォルトの名無しさん
2013/11/14(木) 08:44:24.690714デフォルトの名無しさん
2013/11/14(木) 08:46:56.680715デフォルトの名無しさん
2013/11/14(木) 09:11:14.85LaxRedirectStrategy使うんじゃダメなん?
0716デフォルトの名無しさん
2013/11/14(木) 09:13:03.52優性交配した次世代はもっとイケメンだから。
0717デフォルトの名無しさん
2013/11/14(木) 09:17:04.200718デフォルトの名無しさん
2013/11/14(木) 09:23:22.58日本語でおけ
0719デフォルトの名無しさん
2013/11/14(木) 18:04:31.47昨日からいろいろレスくれたみなさんありがとうございました
とくに HttpClient と Location を教えてくれた >>687,699 さん本当に助かりました!
HTTP や クッキーの実装意識しなくてもソーステキストレベルでウェブトラバースするだけで
クッキーの処理1文字もかかずにすんだんですけど
最初 HTTP とクッキー勉強しないと無理っていわれてすごい困ってました
普段UIや画像処理系のプログラムしかかかないので
ネットワークプログラミングがこんなに大変とは…
手動なら30秒とかでできることをプロgyラムにさせるのに丸一日かかっちゃいました;;
ブラウザってすごいことやってたんですね…
>>711 さんわざわざ動作確認までしていただいたのにすいません
たぶん httpclient だけ落としてて core の方をおとしてなかったせいだと思います
ただ POST した時点でログイン処理は成立してて
リダイレクト無視していきたいページ GET するだけで
普通にログイン状態維持できてたので自分的にはこれでOKでした
0720デフォルトの名無しさん
2013/11/14(木) 18:08:28.900721デフォルトの名無しさん
2013/11/14(木) 18:19:04.740722デフォルトの名無しさん
2013/11/14(木) 18:29:50.33標準のCookieManagerの実装の問題って直ってるのかな。
0723デフォルトの名無しさん
2013/11/14(木) 19:22:56.54>>705
>>707
ちゃんと出来ました
ありがとうございました
0724デフォルトの名無しさん
2013/11/14(木) 19:27:52.98あれ使えたら、ちょっとしたコード試すとき便利なのに。
0725デフォルトの名無しさん
2013/11/14(木) 19:39:18.71java7では直ってないので俺は1から作りなおしたけどな。
0726デフォルトの名無しさん
2013/11/14(木) 20:56:19.92DeprecatedなDateコンストラクタでもいいんだけどさ。
0727デフォルトの名無しさん
2013/11/14(木) 21:45:24.63java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
at org.apache.http.util.Asserts.check(Asserts.java:34)
ってエラーが出始めて1回でるとずっと GET に失敗する…
やってることは
HttpClient client = new DefaultHttpClient();
for(;;) {
if(!login) {
HttpPost post = new HttpPost(ログインページ);
params.add(...) // ID PASS セット
HttpResponse response = client.execute(post);
post.abort();
login = true;
}
HttpGet get = new HttpGet(みたいページ);
HttpResponse response = client.execute(get); // ここでエラー
if(response.getStatusLine().getStatusCode() == 403) {
login = false; continue;
}
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
以下読み込み
get.abort();
}
っていう感じなんですけどループの中の GET execute でエラーがでる;;
なんかもう Java とは関係ないセッションのステートの話だと思うんですけど
もし詳しい人いたら原因わかりませんか?
アサートの中でエラーがでてるのでネットワークの状況というよりローカルでの使い方の問題な気もするんですが…
0728デフォルトの名無しさん
2013/11/14(木) 21:52:59.080729デフォルトの名無しさん
2013/11/14(木) 21:55:45.25最後の br.close() はやってるんですけど…
0730デフォルトの名無しさん
2013/11/14(木) 22:12:19.70client.getHttpConnectionManager().closeIdleConnections(1);
とやってコネクション閉じたら直るかも。
というかそもそもclientをPOSTとGETで使いまわしているけど
それぞれ別のHttpClientを使ったらどうよ?
0731デフォルトの名無しさん
2013/11/14(木) 22:20:22.11DefaultHttpClientのインスタンスを使いまわす場合は注意が必要
例えばこういうコードはダメ。実行すればそれと同じエラーがでる
【エラーが起きるコード】
HttpClient client = new DefaultHttpClient();
while (true) {
HttpGet get = new HttpGet("http://example.com");
HttpResponse response = client.execute(get);
Thread.sleep(1000);
}
【問題ないコード1】
HttpClient client = new DefaultHttpClient();
while (true) {
HttpGet get = new HttpGet("http://example.com");
HttpResponse response = client.execute(get);
EntityUtils.consume(response.getEntity()); // これでDefaultHttpClientは再利用可能になる
Thread.sleep(1000);
}
【問題ないコード2】
while (true) {
HttpClient client = new DefaultHttpClient(); // ←client.execute()を実行するたびにDefaultHttpClientを作り直す
HttpGet get = new HttpGet("http://example.com");
HttpResponse response = client.execute(get);
Thread.sleep(1000);
}
0732デフォルトの名無しさん
2013/11/14(木) 22:23:09.65使い方も簡単だしインスタンス使いまわしのエラーなど妙なハマりどころがないから
0733デフォルトの名無しさん
2013/11/14(木) 22:25:51.210734デフォルトの名無しさん
2013/11/14(木) 22:30:36.750735デフォルトの名無しさん
2013/11/14(木) 22:31:58.05おおお ありがとうございます
>>731 とかまさにやっちゃダメなコードになってる気がします
さっそく書き換えてみます
0736デフォルトの名無しさん
2013/11/14(木) 22:32:05.22話を聞く限り単純なネットワークプログラミングが目的でJavaに拘る理由はないし、
Pythonのコードの方がよほど簡単
http://d.hatena.ne.jp/yatt/20110503/1304403694
0737デフォルトの名無しさん
2013/11/14(木) 22:44:04.64一応 C java perl PHP ぐらいは使ったことあるんですけど Python はないかも…
GUI扱えるのが C++ と Java だけなんですよね…
今回やりたかったのはピクシブってサイトでおきにりの絵師さんが絵投稿したら
ポップアップだして絵を表示するみたいなことをしたかったのでGUIが使える言語でJava選びました
というかスクリプト言語って変数宣言の自由度が高すぎて
知らないうちに名前空間が被ったりしてデバッグ大変そうで…
0738デフォルトの名無しさん
2013/11/14(木) 23:04:59.700739デフォルトの名無しさん
2013/11/14(木) 23:11:56.890740デフォルトの名無しさん
2013/11/14(木) 23:11:58.58レスポンスをクローズするのじゃダメなの?
0741デフォルトの名無しさん
2013/11/14(木) 23:16:18.080742デフォルトの名無しさん
2013/11/14(木) 23:16:49.290743デフォルトの名無しさん
2013/11/14(木) 23:24:05.13他人に解からない難解なものがカッコいいというのが彼のポリシーだったようで。
再利用性皆無なコードだったな。
0744デフォルトの名無しさん
2013/11/14(木) 23:26:10.860745デフォルトの名無しさん
2013/11/14(木) 23:29:57.91そのハゲにとって他人に簡単に理解されたら辞めさせられておまんま食い上げだからしょうがないが。
0746デフォルトの名無しさん
2013/11/14(木) 23:31:19.560747デフォルトの名無しさん
2013/11/14(木) 23:33:39.76>>731 のがまさにこれだったのでうまくいくかと思ったのに
EntityUtils.consume(response.getEntity());
を加えても同じエラーでちゃいます…
3つめの HttpClient を毎回生成するのはセッションまで新しくなっちゃうみたいで
エラーはでないんですけどログイン状態が維持されない…
>>730 さんの試してみたんですけど
getHttpConnectionManager がみつからないっていわれるんですよね…
軽く調べたら 3.x 系のサンプルがでてきたんですけど 4 系と違うのかな…
0748デフォルトの名無しさん
2013/11/14(木) 23:33:50.180749デフォルトの名無しさん
2013/11/14(木) 23:37:07.860750デフォルトの名無しさん
2013/11/14(木) 23:52:50.22環境はTomcatで、JSP/Servletで簡単なページを2−3つぐらい作成するのですが、
これで、Webサーバ(Apache)を使う必要(メリット)はあるのでしょうか?
(クライアントからのリクエストは、特に多いといわけでもありません)
0751デフォルトの名無しさん
2013/11/14(木) 23:55:21.09無い。
0752デフォルトの名無しさん
2013/11/14(木) 23:55:41.90画像表示はapacheの方が圧倒的に早い。
0753デフォルトの名無しさん
2013/11/15(金) 00:47:44.20httpのログは?
0754デフォルトの名無しさん
2013/11/15(金) 01:26:35.14ときどき 503 がでてるみたいでその後に GET したときに必ずエラーが出てるみたいです
根本的な解決方法がわからないけど
とりあえず例外はいたら HttpClient のインスタンスを作り直して
ログインからやり直すって感じの応急処置にしてみました
若干解決方法が気持ち悪いけど現状安定してるみたいです…
アドバイスくれた方々ありがとうございました!
0755デフォルトの名無しさん
2013/11/15(金) 07:14:27.220756デフォルトの名無しさん
2013/11/15(金) 08:54:29.06荒らすなゆとり
■ このスレッドは過去ログ倉庫に格納されています