前提・実現したいこと
Javaで身長、体重を入力してBMIを計算するWEBアプリを作っています。
フォワード先のjspファイルで文字化けが発生しました。
(ツール)
IDE:eclips
サーブレットコンテナ:tomcat
発生している問題・エラーメッセージ
フォワード先のHelthCheckResult.jspで文字化けが発生しました。
エンコードの問題かと思いますが、どうしても分かりません。
helthCheck.jspでformから身長、体重を入力し、
サーブレットであるHelthCheck.javaに値をpostしています。
HelthCheck.javaの役割
・パラメータ取得
・BMIの計算
・体型の判定
・リクエストスコープにインスタンスを保存(Helth.java)
・フォワード先の指定(helthCheckResult.jsp)
helthCheckResult.jspでリクストスコープからインスタンスを取得し、表示。
下のように文字が化ける
該当のソースコード
]
ソースコード (helthCheck.jsp) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>健康診断</title> </head> <body> <h1>健康診断</h1> <form action="./HelthCheck" method="post" > 身長:<input type="text" name="height" size="40">(cm)<br> 体重:<input type="text" name="weight" size="40">(kg)<br> <input type="submit" value="実行"><br> </form> </body> </html>
(helthCheckResult.jsp) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%//JSPファイルでimport %> <%@ page import="model.Helth" %> <% //リクエストスコープからインスタンスを取得 Helth helth = (Helth)request.getAttribute("helth"); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>健康診断結果</title> </head> <body> <h1>健康診断結果</h1> <p>身長: <%=helth.getHeight()%></p> <p>体重: <%=helth.getWeight()%></p> <p>BMI: <%=helth.getBMI()%></p> <p>体型: <%=helth.getFigure() %></p> <a href="http://localhost:8080/example/helthCheck.jsp">戻る</a> </body> </html>
(HelthCheck.java) protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); //リクエストパラメータの文字コードを指定 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html charset=UTF-8"); //リクエストパラメータを取得 //パラメータは文字列じゃないと受け取れない String height = request.getParameter("height"); String weight = request.getParameter("weight"); //リクエストスコープに保存するインスタンスを生成 Helth helth = new Helth(); //double型に変換し、インスタンスフィールドにセット helth.setHeight(Double.parseDouble(height)); helth.setWeight(Double.parseDouble(weight)); //HelthCheckLogicインスタンスを生成 HelthCheckLogic helthCheckLogic = new HelthCheckLogic(); //HelthCheckLogicからBMICalculation()メソッドを取得 //BMIの計算 helthCheckLogic.BMICalculation(helth); //HelthCheckLogicからfigureJudge()メソッドを取得 //体型の判定 helthCheckLogic.figureJudge(helth); //リクエストスコープにインスタンスを保存 //request.setAttribute("属性名", "インスタンス"); request.setAttribute("helth", helth); //フォワード先を指定 RequestDispatcher dispatcher = request.getRequestDispatcher("./helthCheckResult.jsp"); dispatcher.forward(request,response); } }
(Helth.java) package model; //java-beansを読み込み import java.io.Serializable; public class Helth implements Serializable{ //JavaBeansルール //フィールドはカプセル化を行う private double height, weight, BMI; private String figure; public double getWeight() {return weight;} public void setWeight(double weight) {this.weight = weight;} public double getHeight() {return height;} public void setHeight(double height) {this.height = height;} public double getBMI() {return BMI;} public void setBMI(double BMI) {this.BMI = BMI;} public String getFigure() {return figure;} public void setFigure(String figure) {this.figure = figure;} }
試したこと
doPostメソッドに追加
request.setCharacterEncoding("UTF-8");
サーバーの再起動
補足情報(FW/ツールのバージョンなど)
tomcat9.0.34.0
初学者で言葉が足らぬ点や分かりにくい部分があるかと思います。
申し訳ありませんがよろしくお願いします。
あなたの回答
tips
プレビュー