Eclipseでlocalhost:8080で404エラーが出たの
Eclipseでjspファイルにアクセスする際にlocalhost:8080で404エラーがでました。
なぜ起きていたのか
エラーの原因はファイルの位置とパスの指定ミスでした。
以下の順番でファイル移動を行います
この間でlocalhost:8080で404エラーが表示されていました。
原因のコード
ファイルの位置
jspファイルをwebappの直下においていました。
doPostには以下のようにパスを指定していました。
/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("input", input); RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Answer.jsp"); dispatcher.forward(request, response); }
修正後
/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("input", input); RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Answer.jsp"); dispatcher.forward(request, response); }
WEB-INFにjspフォルダを作成し、jspファイルをそこに置き 遷移先のパスも変更。
request.getRequestDispatcher("/WEB-INF/jsp/Answer.jsp")
【Amazonプライムビデオ】おすすめのシットコム3選!!
ドラマを見る際に一時間は長いなと思ったことありませんか?
そんな時は、海外ドラマのシットコムを見るのが一番!
一話完結で一話あたり時間は約30分!
今回はご飯を食べながら、サクッと観れる海外ドラマを3つ選びました。
どの作品も、見終わったあとのlost感が辛かったです・・・
おすすめのシットコム
フレンズ
ビッグバン★セオリー
モダンファミリー
【一株投資】複利の力
6月の配当金が出揃いました。
税引き後の配当金は4,374円でした・・・
年間、一万円いくでしょうか?
怪しいところです。
複利の力
金融庁のページより資産シミュレーションができます。
現在は毎月2万円ほど投資に回している状態なので
毎月積立額を2万円、利回り4%、20年間運用すると
最終積立金額7,335,493円
になります。
利回り4%だと、それなりにリスクを負ってこの金額です。
もし、月5万円ほど投資に回すことができれば
毎月積立額を5万円、利回り4%、20年間運用すると
最終積立金額18,338,731円
月3万円の差で
1年間36万円 × 20年間 = 720万円
18,338,731(積立額を5万円) - 7,335,493(積立額を2万円) = 11,003,238円
11,003,238円 - 7,200,000 = 3,803,238円
複利に力で約400万円の差が生まれています。
これを見ると、早く投資して、長く持つことで複利の恩恵を受けやすくなります。
株主アンケートについて
東京海上ホールディングスの株主向けアンケート結果がありました
9年以上保有している人が約4分の1を占めています。
自分は短期売買では勝てないとわかっているので
安定的な企業を長く持ち続けて
長期投資を前提に、これからも投資をしていきたいと思っています。
あとがき
今後株価はどうなるのでしょうか・・・
リーマンショックを経験したことがないので暴落の恐怖が想像できません。
えげつないことになるんだろうなと思いつつ、貯金は貯金で確保します。
【Java】文字列(String)を数値(int)に変換する方法
Javaを勉強して「文字列→数値」の変換する機会がよくあります。
コマンドライン引数の値はString型として読み込まれるので、コマンドライン引数を使う機会が多いと自然に使う頻度は多くなるのかなと思っています。
文字列 → 数値
int i = Integer.parseInt(a);
数値 → 文字列
String a = String.valueOf(i);
こんな感じで使っています
public class Main { public static void main(String[] args) { int i = Integer.parseInt(args[0]); } }
あとがき
csvファイルを読み込む際にもStringの配列として格納して値を使用するので その際にも文字列→数値に変換して使用していました。
使用回数は多いですが、実際はほとんどコピペしているのであまり書いたことがありません・・・
【Java】HashMapの使い方と注意点
HashMapを使ったので記録として残しておきます。
Mapについて
mapは[キー]と[値]をペアとして格納するデータ構造になっています
putを使って値を格納、getを使って値を所得する
import java.util.HashMap; import java.util.Map; public class Main { Map<String, String> map = new HashMap<>(); public static void main(String[] args) { Main main = new Main(); main.exec(); } public void exec(){ map.put("key1", "広島"); map.put("key2", "山口"); map.put("key3", "岡山"); System.out.println(map.get("key1")); System.out.println(map.get("key2")); System.out.println(map.get("key3")); } }
>広島 >山口 >岡山
データを格納するときは[キー]と[値]をセットで記述します。 データを取り出すときは[キー]を指定することで値を取り出します。
1つずつ値を取り出す
1つずつ取り出すにはfor文を使います
import java.util.HashMap; import java.util.Map; public class Main { Map<String, String> map = new HashMap<>(); public static void main(String[] args) { Main main = new Main(); main.exec(); } public void exec(){ map.put("key1", "広島"); map.put("key2", "山口"); map.put("key3", "岡山"); for (String key : map.keySet()) { String value = map.get(key); System.out.println(key + ":" + value); } } }
>key1:広島 >key2:山口 >key3:岡山
注意点
HashMap (Java SE 11 & JDK 11 )
このクラスはマップの順序を保証しません。特に、その順序を常に一定に保つことを保証しません。
公式に載っているように順番が一定ではないようです。
私が確認したところ格納量が5つ以上になると並び順がバラバラになって取り出されました。
import java.util.HashMap; import java.util.Map; public class Main { Map<String, String> map = new HashMap<>(); public static void main(String[] args) { Main main = new Main(); main.exec(); } public void exec(){ map.put("key1", "広島"); map.put("key2", "山口"); map.put("key3", "岡山"); map.put("key4", "広島"); map.put("key5", "山口"); map.put("key6", "岡山"); for (String key : map.keySet()) { String value = map.get(key); System.out.println(key + ":" + value); } } }
>key1:広島 >key2:山口 >key5:山口 >key6:岡山 >key3:岡山 >key4:広島
少しだけバラバラに取り出されています
データが多くなるともっとデータがごちゃごちゃになって返ってきそうなので 使い方には注意したいと思います。
あとがき
今はArrayList,HashMapしか使ったことがないので
TreeSetやTreeMapなど勉強していきたいと思います。
【Java】継承に継承を重ねオーバーライドする
継承を重ねることができることは知ってるけどどうやって書くの?
オーバーライドってよくわからない!
と思ったので、継承を理解していく為に記録しておきます。
継承に継承を重ねる
public class Main { public static void main(String[] args) { UltraHero ul = new UltraHero(); ul.attack(); //UktraHeroのattackを実行 SuperHero sh = new SuperHero(); sh.attack(); //SuperHeroのattackを実行 Hero h = new Hero(); h.attack(); //Heroのattackを実行 } } public class Hero { public void attack() { System.out.println("攻撃力は10"); } } public class SuperHero extends Hero { public void attack() { System.out.println("攻撃力は20"); } } public class UltraHero extends SuperHero { public void attack() { System.out.println("攻撃力は30"); } }
プログラムを実行すると
それぞれのattackメソッドが実行されます
>攻撃力は30 >攻撃力は20 >攻撃力は10
オーバーライドしてみる
コマンドライン引数を使い入力した数字によって
実行結果が変わるようにします。
Mainクラスでは継承末端の孫であるUltraHeroクラスを呼び出します。
public class Main { public static void main(String[] args) { UltraHero ul = new UltraHero(); ul.attack(args); } } public class Hero {//親 public void attack(String[] args) { int hp = Integer.parseInt(args[0]); if (hp == 10) { System.out.println("攻撃力は10"); } else { System.out.println("攻撃できません"); } } } public class SuperHero extends Hero {//子 public void attack(String[] args) { int hp = Integer.parseInt(args[0]); if (hp == 20) { System.out.println("攻撃力は20"); } else { super.attack(args); } } } public class UltraHero extends SuperHero {//孫 public void attack(String[] args) { int hp = Integer.parseInt(args[0]); if (hp == 30) { System.out.println("攻撃力は30"); } else { super.attack(args); } } }
コマンドライン引数に30を入力します
>攻撃力は30
コマンドライン引数に20を入力します
>攻撃力は20
SuperHeroクラスのattackメソッドが実行されています
コマンドライン引数に0を入力します
>攻撃できません
Heroクラスのattackメソッドが実行されています
あとがき
継承を少しかじることができました。
インターフェースは、まだ理解できていないのでこれから勉強していこうと思います。