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

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

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

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Q&A

0回答

1113閲覧

JAVAのURL.openStream()で処理が終了しない

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

0グッド

0クリップ

投稿2020/03/27 04:48

こんにちは。

現在、サイト内検索の機能を作成しており、自ページを含めて、htmlソースそのものを取得しようとしています。
しかし、JAVAのopenStream()で処理が終了しません。

掲載したコードURLをyahooなどに変更すると動作するため、自ページの読み込みがうまくいかないのかと考えています。
※検索処理は省略しています。

<デバックで確認>
F6でステップ実行:openStream()で処理が止まる。
F8で実行(※openStream()の前後にブレーク):何回もクラスが実行される。
※localhostは待ち状態。

環境
JAVA 1.8.0_241
Eclipse 4.4.2
Struts 1
Tomcat 8
Windows 8.1
プロジェクト名:test

JAVA

1package hoge; 2 3import java.io.BufferedReader; 4import java.io.InputStream; 5import java.io.InputStreamReader; 6import java.net.URL; 7import java.util.ArrayList; 8import java.util.List; 9 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12 13import org.apache.struts.action.Action; 14import org.apache.struts.action.ActionForm; 15import org.apache.struts.action.ActionForward; 16import org.apache.struts.action.ActionMapping; 17 18public class Search extends Action { 19 20 @Override 21 public ActionForward execute(ActionMapping mapping, ActionForm form, 22 HttpServletRequest request, HttpServletResponse response) 23 throws Exception { 24 25 String line; 26 BufferedReader br = null; 27 InputStreamReader isr = null; 28 29 List<URL> list = new ArrayList<URL>(); 30 list.add(new URL("http://localhost:8080/test/Search.do")); 31 32 for (URL url : list) { 33 // InputStreamをUTF8のInputStreamReader(文字ストリーム)に変換する 34 InputStream is = url.openStream(); 35 isr = new InputStreamReader(is, "UTF-8"); 36 br = new BufferedReader(isr); 37 38 // 1行ずつ 39 while ((line = br.readLine()) != null) { 40 System.out.println(line); 41 } 42 } 43 // フォーワード 44 return mapping.findForward("success"); 45 46 } 47 48}

JSP

1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4</head> 5<body> 6 <form action="/test/Search.do" method="GET"> 7 <input id="search-input" name="searchkey" property="searchkey" type="text"> 8 <input id="search-button" type="submit" value=検索"> 9 </form> 10</body> 11</html>

strutsconfig

1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE struts-config PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 4 "http://struts.apache.org/dtds/struts-config_1_3.dtd"> 5 6<struts-config> 7 <!-- フォームビーン --> 8 <form-beans> 9 <form-bean name="Bean" type="hoge.Bean"/> 10 </form-beans> 11 12 <!-- アクションマッピング --> 13 <action-mappings> 14 <action path="/Search" type="hoge.Search" scope="request" name="Bean"> 15 <forward name="success" path="/pages/Search.jsp" /> 16 </action> 17 </action-mappings> 18 19 <!-- メッセージ --> 20 <message-resources parameter="MessageResources" /> 21 22 <!-- プラグイン --> 23 <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> 24 <set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml, /WEB-INF/validation.xml"/> 25 </plug-in> 26 27</struts-config>

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

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

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

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

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

xebme

2020/03/28 00:17

・ブラウザを使って"http://localhost:8080/test/Search.do"にアクセスできるか追記してください。 ・url.openStream()しているけれど、閉じていないのでコネクションリークしていませんか。
退会済みユーザー

退会済みユーザー

2020/03/28 01:47

・"http://localhost:8080/test/Search.do"は待ち状態でアクセス不可です。 ・確かに閉じていませんでしたが、閉じる処理を追加しても特に変わりませんでした。
xebme

2020/03/28 12:34 編集

ということは、自分自身の URLにリクエストを出しているので、いつまでも自分にリクエストし続ける無限ループに陥っている。それに気づかないで質問しているということですね。<-- すみません。言い方がきつくなっていました。また戻ってきてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問