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

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

ただいまの
回答率

87.77%

jspファイルで500が出た時の対処

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 11K+

score 11

前提・実現したいこと

jsp、サーブレットを用い、カレンダーを表示しようとしているところです。
一時はちゃんと動作したのですが、しばらくして更新してみたら500が出てしまい、原因がわかりません。
どなたかわかるかたはいらっしゃいますでしょうか。

発生している問題・エラーメッセージ

エラーメッセージ

type 例外レポート

メッセージ 

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外 
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: 

JSPファイル: /jsp/sample.jsp の中の61行目でエラーが発生しました
Syntax error on token "<", delete this token
58: 
59: <div class="head"></div>
60: <%//追記【A】%>
61: <a href="sample.jsp?year=<%=intYear%>&month=<%=intMonth-1%>">前月</a>
62: <!--現在の年月を表示-->
63: <span class="title"><%=intYear%>年<%=intMonth%>月</span>
64: <%//追記【B】%>

JSPファイル: /jsp/muridesu.jsp の中の94行目でエラーが発生しました
Syntax error on tokens, delete these tokens
91: <td class="saturday">
92: <%}else{%>
93: <td class="weekday">
94: <%}//■終了■各曜日のクラス決定%>
95: 
96: <%
97: //もしkが0()=日曜)でなければkから1を引く


Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    jp.co.sss.web.filter.EncodingFilter.doFilter(EncodingFilter.java:38)

また、更新するとたまにこのようなメッセージも出ます

HTTPステータス 500 - 


type 例外レポート

メッセージ 

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外 
org.apache.jasper.JasperException: org.apache.jasper.JasperException: JSPのクラスをロードできません
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:161)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    jp.co.sss.web.filter.EncodingFilter.doFilter(EncodingFilter.java:38)



原因 
org.apache.jasper.JasperException: JSPのクラスをロードできません
    org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:630)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:149)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    jp.co.sss.web.filter.EncodingFilter.doFilter(EncodingFilter.java:38)



原因 
java.lang.ClassNotFoundException: org.apache.jsp.jsp.muridesu_jsp
    java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    java.security.AccessController.doPrivileged(Native Method)
    java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:134)
    org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
    org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:628)
    org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:149)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    jp.co.sss.web.filter.EncodingFilter.doFilter(EncodingFilter.java:38)

注意 原因のすべてのスタックトレースは、Apache Tomcat/6.0.35のログに記録されています

該当のソースコード

<%
Calendar cal = Calendar.getInstance();


//getParameter:引数にパラメータ名を指定
//この場合、下の【A】もしくは【B】で渡しているパラメータから
//年、月の値をatrYear strMonthに代入
//存在しなければnullを返す
String strYear=request.getParameter("year");
String strMonth=request.getParameter("month");

int intYear;
int intMonth;
//パラメータ無しならばShowCalendar1と同様の処理。
//パラメータあった場合は下記if文内の処理実施
if(strYear!=null && strMonth!=null){
//一旦intMonthTempに代入
int intMonthTemp=Integer.parseInt(strMonth);
//12で割ったあまりを代入:
// 0の場合は0を代入(12月)
//13の場合は1を代入( 1月)
intMonth=intMonthTemp%12;
//13の場合、1を足した年を代入、その他は年のまま
intYear=Integer.parseInt(strYear)+intMonthTemp/12;
//12月の場合はintMonthが0となるため、これを12月に変更し、年を一年減少
//ゼロオリジンの回避
if(intMonth==0){
intMonth=12;
intYear--;
}
//上記結果のintYearとintMonth-1で初期化
cal.set(Calendar.YEAR,intYear);
cal.set(Calendar.MONTH,intMonth-1);
}
//追記

intYear=cal.get(Calendar.YEAR);
intMonth=cal.get(Calendar.MONTH)+1;
cal.set(Calendar.DATE,1);
int k =cal.get(Calendar.DAY_OF_WEEK)-1;
%>


<h1>CALENDAR</h1>

<div class="head"></div>
<%//追記【A】%>
<a href="sample.jsp?year=<%=intYear%>&month=<%=intMonth-1%>">前月</a>
<!--現在の年月を表示-->
<span class="title"><%=intYear%><%=intMonth%></span>
<%//追記【B】%>
<a href="sample.jsp?year=<%=intYear%>&month=<%=intMonth+1%>">翌月</a>
</div>

<table>
<tr>
<!--TH : Table Header-->
<th class="holiday"></th>
<th class="weekday"></th>
<th class="weekday"></th>
<th class="weekday"></th>
<th class="weekday"></th>
<th class="weekday"></th>
<th class="saturday"></th>
</tr>
<%int d=1;
//月内の間はループ
while(cal.get(Calendar.MONTH)==intMonth-1){%>
<tr>
<!--必ず日曜~土曜の一週間分は処理をするループ-->
<%for(int j=0;j<7;j++){%>
<%

//各曜日のクラス決定
if(j==0){%>
<td class="holiday">
<%}else if(j==6){%>
<td class="saturday">
<%}else{%>
<td class="weekday">
<%}//■終了■各曜日のクラス決定%>

<%
//もしkが0()=日曜)でなければkから1を引く
//【k】: 日曜が0、土曜が6
//はじめの1日目を書き込む曜日の確定用
//=前月分の空枠
if(k!=0){
k--;
//もしkが0(=日曜)なら、もし月内の間なら
//月が不一致の場合は空白出力
}else if (cal.get(Calendar.MONTH)==intMonth-1){%>
<!--変数dを1増やして日付表示-->
<%=d++%>
<!--一日先の日付にする-->
<%cal.add(Calendar.DATE,1);%>
<%}%><!--/***if(k!=0)-->
</td><!--/***td(holiday,saturday,weekday)-->
<%}%><!--/***for-->
</tr><!--/***tr(外側-->
<%}%><!--/***while-->

試したこと

タグの打ち間違いかとも思って打ち直したのですが、それでもうまくいきませんでした

補足情報(言語/FW/ツール等のバージョンなど)

Eclipse Tomcat6.0

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • uuranos

    2016/06/17 09:34

    おはようございます。コメントをすべて<!-- -->に修正したところ、500エラーは出なくなりましたが文字化けが発生してしまいました。
    元に戻すと500エラーが出てしまい、やはり内容としましては、61行目の
    <a href="sample.jsp?year=<%=intYear%>&month=<%=intMonth-1%>">が原因の模様です。スペルミスも確認しましたが、自分ではわかりませんでした。

    キャンセル

  • matobaa

    2016/06/17 11:01 編集

    お、いい感じですね。たぶん61行目のエラーは、その直前の行の誤り (文字コードに起因した解釈ミス)の影響を喰らっているのだと思います。そこで、[1] コメントはすべて <!-- --> にする [2] 保存するときの文字コードを utf-8 にする [3] @page タグでJSPの文字コードを content-type で charset=utf-8 と明示する [4] @pageタグでJSPの文字コードを pageEncoding で utf-8 と明示する をすることで文字化けしなくなるかと思います。参考: http://www.javaroad.jp/servletjsp/sj_servlet13.htm#section3

    キャンセル

  • uuranos

    2016/06/20 18:33

    お返事遅くなりました、文字コードをutf-8に変更することで文字化けなく表示することができました!ありがとうございます!

    キャンセル

回答 1

0

まとめときます。

  1. 保存するときの文字コードを utf-8 にするべし
  2. @pageタグで文字コードを content-type で charset=utf-8 と明示するべし
  3. @pageタグで文字コードを pageEncoding で utf-8 と明示するべし

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る