5

作成している.jspページに問題があります。心配な方のために、宿題用のサイトでしたが、必要以上のことを考えており、採点については何も聞いていません。これは厳密に私自身の利益のためです。

ビジネスに至るまで:私はユーザーから入力を受け取り、method = "post"を実行してページを更新し、理想的な状況では機能します(それは宿題でした)。しかし、私はtry/catchを作成しようとしています。ユーザーがintフィールドに文字列を入力した場合はブロックします。

int Svolt = 0;
double Amperes = 0.0;
double LEDdrop = 0.0;

if (request.getParameter("Svolt") != null) {
try {
    Svolt = Integer.parseInt(request.getParameter("Svolt")); 
} catch ( NumberFormatException e ) {
    %>
    <script type ="text/javascript">
        alert("The source voltage must be an integer. Please fix this.");
    </script>
    <%                                                    
}

「NumberFormatException」を「Exception」に切り替えてみましたが、同じエラーコードが返されました。以前、if()ステートメントの前にtry catchを実行しましたが、機能しましたが、必要なアラートボックスが表示されませんでした。

そのコードは以下のとおりです。

final double MA_TO_A = 0.001;
int Svolt = 0;
double Amperes = 0.0;
double LEDdrop = 0.0;

try {
    if (request.getParameter("Svolt") != null) {
        try {
            Svolt = Integer.parseInt(request.getParameter("Svolt"));
        } catch (Exception e) 
        {
            %>
            <script type ="text/javascript">
                alert("The source voltage must be an integer. Please fix this.");
            </script>
            <%
        }
        Amperes = Double.parseDouble(request.getParameter("Amperes"));
        LEDdrop = Double.parseDouble(request.getParameter("LEDdrop"));

        out.println("Ideal resistance is: " + ((Svolt - LEDdrop) / (Amperes * MA_TO_A)) + " Ohms.");   
    }
} catch (Exception e) {
        out.println("Please make sure your inputs are correct.");
}

どんな助けでもありがたいです、そしてあなたの時間もそうです。どうもありがとうございます!

編集:申し訳ありませんが、エラーコードをコピーして貼り付けることを意味します:

org.apache.jasper.JasperException: java.lang.NumberFormatException: For input string: "a"

テストされた入力が文字列「a」であった場合

EDIT2:バックアップ/編集/テスト@Nambariの提案

final double MA_TO_A = 0.001;
int Svolt = 0;
double Amperes = 20.0;
double LEDdrop = 1.8;

try {
    if (request.getParameter("Svolt") != null) {
        try {
            Svolt = Integer.parseInt(request.getParameter("Svolt"));
        } catch (Exception e) 
        {
            %>
            <script type ="text/javascript">
                alert("The source voltage must be an integer. Please fix this.");
            </script>
        <%
        }
        out.println("Ideal resistance is: " + ((Svolt - LEDdrop) / (Amperes * MA_TO_A)) + " Ohms.");   
    }
} catch (Exception e) {
    out.println("Please make sure your inputs are correct.");
}

出力:理想的な抵抗は:-90.0オーム

警告ボックス(「ソース電圧は整数である必要があります。これを修正してください。」)

エラーコードはありません。

out.printlnは(「入力が正しいことを確認してください」)と言っていません。

最終編集:

コードはほぼ希望どおりに機能するようになりましたが、十分に機能します。

                    final double MA_TO_A = 0.001;
                    int Svolt;
                    double Amperes;
                    double LEDdrop;

                    if (request.getParameter("Svolt") != null) 
                    {
                        try 
                        {

                            try 
                            {
                                Svolt = Integer.parseInt(request.getParameter("Svolt"));
                            } catch (Exception e) 
                            {
                            %>
                            <script type ="text/javascript">
                                alert("The source voltage must be an integer. Please fix this.");
                            </script>
                            <%  
                            Svolt = 0;
                            }
                            try 
                            {
                                Amperes = Double.parseDouble(request.getParameter("Amperes"));
                            } catch (Exception e) 
                            {
                                %>
                                <script  type = "text/javascript"> 
                                    alert("The source voltage must be an integer. Please fix this.");
                                </script> 
                                <% 
                                Amperes = 0.0;
                            }
                            try 
                            {
                                LEDdrop = Double.parseDouble(request.getParameter("LEDdrop"));
                            } catch (Exception e) 
                            {
                            %>
                                <script  type = "text/javascript"> 
                                    alert("The source voltage must be an integer. Please fix this.");
                                </script> 
                            <%
                            LEDdrop = 0.0;
                            }
                            out.println("Ideal resistance is: " + ((Svolt - LEDdrop) / (Amperes * MA_TO_A)) + " Ohms.");
                        } catch (Exception e)
                        { 
                            out.println("Please make sure your inputs are correct."); 
                        }   
                    }

専門用語がたくさんありますが、それが最終結果です。どういうわけか、これはすべて機能しています。助けてくれたすべての人に感謝します!

4

2 に答える 2

3

まず第一に、Java コードを Java サーブレット ページに埋め込むことはお勧めしません。JSP のプレゼンテーション レイヤーのみを処理する必要があります。ビジネス ロジックは必要ありません。http 要求を受け取るにはサーブレットが必要です。ロジックを実行し、結果を返し、jsp にリダイレクトします。

一方、JSP ページによってスローされる例外タイプは org.apache.jasper.JasperException であり、NumberFormatException ではありません。Apache ジャスパー JSP エンジンは数値形式の例外をキャッチし、JasperException を Tomcat にスローします。

また、Tomcat キャッシュをクリアして、JSP が最新バージョンにデプロイされていることを確認します。これを行うには、次のフォルダーとファイル (war を含む) を削除します:
{tomcat インストール パス}\work\Catalina\localhost(your app )
{Tomcat インストール パス}\webapps(アプリ)

一般的な java.lang.Exception をキャッチすれば機能するはずです。

これも試してください:


    final double MA_TO_A = 0.001;
    int Svolt = 0;
    double Amperes = 0.0;
    double LEDdrop = 0.0;
    try {
        if (request.getParameter("Svolt") != null) {
            try {
                Svolt = Integer.parseInt(request.getParameter("Svolt"));
             } catch (Exception e) 
            {
                //Changed to avoid the message if no exception, or for some other reason it fails to execute the conditions
                out.println("<script type =\"text/javascript\">")
                out.println("alert(\"The source voltage must be an integer. Please fix this.\");") ;
                out.println("</script>")
            }
            Amperes = Double.parseDouble(request.getParameter("Amperes"));
            LEDdrop = Double.parseDouble(request.getParameter("LEDdrop"));

            out.println("Ideal resistance is: " + ((Svolt - LEDdrop) / (Amperes * MA_TO_A)) + " Ohms.");   
        }
    } catch (Exception e) {
            out.println("Please make sure your inputs are correct.");
    }
于 2012-09-10T15:46:17.363 に答える
1

これは私のコメントに基づいて回答として投稿されます:

フォーム上の Svolt 関連のコードを除くすべてを削除して試してみることをお勧めします。このファイル以外に何かが台無しになっていると思います。既存のコードのバックアップを取ります。Svolt 以外のすべてを削除してください。問題を突き止めることができます。

上記のコメントで提案されているように、try/catch ブロックがコード フローと適切に同期されていることを確認してください。

于 2012-09-10T14:54:33.650 に答える