文系のIT勉強メモ

勉強中のメモと、インフラの覚書き

EclipseでServlet/JSP 試行錯誤

EclipseServlet/JSPで作ってるんだけど、エラーで進まん~

でもこういうのを乗り越えていくのって勉強になるのよね。せっかく何の機密もない勉強用のプロジェクトなんだし、とりあえずメモしていく。

【解決済】JSPのincludeで日本語のparam渡したら化ける

jspファイルのヘッダーとフッターを別ファイルに分けてインクルードしたい。できてる。ただ、ヘッダーはタイトルとh1がページごとに変わるので、各ページからパラメータを渡すようにつくっている。その渡したパラメータが????で表示されてしまう

f:id:suika_daisuki:20220212192946p:plain

アルファベットだと化けないんだけど日本語だとこうなる。検索しても、私が既にやってる対処法(子ファイル側にrequest.setCharacterEncoding("UTF-8");を書くしか見当たらない。

子ページのほうに入れてた<% request.setCharacterEncoding("UTF-8"); %>を、親ページのほうにも入れたら解決しました!

各ページ

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<% request.setCharacterEncoding("UTF-8"); %>

<jsp:include page="top.jsp">
    <jsp:param name="title" value="たいとるにする文字列" />
</jsp:include>

top.jspファイル

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
request.setCharacterEncoding("UTF-8");
String title = request.getParameter("title");
%>

<!DOCTYPE html>
<html lang="ja" class="h-100">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>XX社システム ー<%=title%></title>
<!-- CSS only -->
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
<link rel="icon" href="favicon.ico">
<meta name="theme-color" content="#FFA7B9">
</head>

<body class="d-flex flex-column h-100">

    <header class="container-fluid sticky-top mb-2 shadow-sm">
        <div
            class="d-flex flex-wrap justify-content-start align-items-center py-1 gap-2">
            <a href="#"><img src=" favicon.ico" alt="ロゴマーク"></a>
            <h1 class="h5"><%=title%></h1>
        </div>
    </header>

結局解決してくれたサイトはこちら↓

jsp:include タグ使用時に起こる文字化けについて – foot mark

jsp include param で 文字化け - 開発めも2

2008年の記事でした。。!

【一応解決?】servlet実行時にExlipseがいちいちエラーだす

ワークスペースに有効なブレークポイントがあります。デバッグ・モードで起動しますか?」というエラー?がでる。「はい」を選ぶと動作はしてるのかな。とりあえずdoGetで指定したファイルは開く。でもdoPostのほうに書いた超シンプルな遷移が、できていない。このエラー?のせいなのか、関係ないのかの切り分けがまず難しい!f:id:suika_daisuki:20220212193515p:plain

チームメンバがつくった.warファイルにつくっていってるので、その人のEclipseのバージョンと合わないせいかと思ったけど(彼はおそらく学校のバージョンと合わせてて、私は最新バージョン。学校のを移そうと思ったらファイルサイズが大きすぎて私のUSBメモリに入らなかったので)、自分のEclipseで一から作ったプロジェクトでも同じ問題が発生した。

知恵袋みて、「この緑のマークかな?」とクリックしてみた。それでまたservletを起動しようとしたら今までと違うダイアログがでた。サーバを再起動でとりあえず動いてるからいいか。。

f:id:suika_daisuki:20220212194248p:plain



f:id:suika_daisuki:20220212194753p:plain

知恵袋キャプチャ

【未解決】保存(=コンパイル)するたびに問題が発生する

f:id:suika_daisuki:20220213000340p:plain

どういう問題なんだ。。でも動いてるから「OK」でこのダイアログを消して無視してる。。

【解決済】1ページに複数の<form>

複数のフォームはOKらしい。

HTMLでページに複数の<FORM>を定義できますか?| OKWAVE

同一ページで複数のformを扱う場合 -同一のページ内にhiddenでID- | OKWAVE

それぞれのフォームのsubmitの前に
<input type="hidden" name="page_num" value="0">
というのを入れて、このvalueの値servletで取得して、
その値をもとにswitchで遷移先を分ける。

ということをしたいのだけど、1ページに3つフォームを入れたうちの3つ目しか正常に動作してないのよね。

        switch (request.getParameter("page_num")) {

        case "0":
            jspname = "search-xxx.jsp";
            break;

        case "1":
            jspname = "search-yyy.jsp";
            break;

        case "2":
            jspname = "search-zzz.jsp";
            break;

        default:
            break;

        }

何故なの~!困る~!!この最低限ができてないと、メソッドの中身に取り掛かれないんだけど~!

あ、このjspnameていうのはページ遷移を長々書かなくてよくしたものです。switch文の下にforwardJSP(jspname, request, response);と書いて実行させてて、
別途、HttpServletの下にforwardJSP()メソッドを書いてる。

private void forwardJSP(String url, HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        RequestDispatcher rd = request.getRequestDispatcher(url);
        rd.forward(request, response);
    }

まさかの、、formが入れ子になっていたー!それで最後のしか適用されんかったんや!

でもまだ真ん中のだけ遷移しない。遷移先ファイルで余計な文字が入っててJSPのエラーが起きてたので直したんだけど、それでも遷移してくれない。そのページ単体で起動しない。結局これは、ページインクルードの閉じタグ</jsp:include>が抜けてたのが原因でした。とりあえず全部遷移してくれてうれしい!

【解決済】CSSどこに置いたらいいの問題 ついでにfaviconとhtmlファイルも

授業でやったときはstylesheet1ファイルで、jspファイルと同じ場所(src/main/webapp/WEB-INF)に入れててちゃんと適用されてたと思うんだけど。

今度は1ファイル増えただけだけど、jspファイル数が多いからぐちゃぐちゃになるのいやで、フォルダに分けたとたん、適用されなくなった。。でも分けたい。。

faviconjspと同じ直下のまま。画像ファイルとしても機能している。

・htmlファイルは、結局、headerとfooterを共通化するのに、jspのほうが都合がいいからやめる。htmlファイルなし。でも今後のためにどこに置くべきか知っておきたい。(今後、はないかもしれないけど)

cssは以下のように記載して、適用されてない状態。/cssから始めても同じだった

<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">

ひとつ上の階層(私だとwebapp)にcssフォルダ作ったら適用された

これは以下の記事で解決!webapp配下にcssフォルダ作成して、jspに書くlink relはcss/style.cssのままで適用されました。

JSPファイルでCSSを読み込む方法【Java】【eclipse】 | エンジニアにさちあれ

でもこのWEB-INFは外から見れないという話は、じゃあなんで画像ファイル見てれるのかとか、フォルダに分けずにファイルを入れたときは適用されてたこととかが説明つかない気がするんだけど、、外から見れないんじゃなくて「直接呼び出せない」ってとこがポイントなんかね?

あとjsp側のlink relにプロジェクト名も書かないかんらしいけど、書いてなくていけてるのよね。。謎。。