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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

1回答

16843閲覧

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

uuranos

総合スコア11

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2016/06/16 09:13

###前提・実現したいこと
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のログに記録されています

###該当のソースコード

java

1<% 2Calendar cal = Calendar.getInstance(); 3 4 5//getParameter:引数にパラメータ名を指定 6//この場合、下の【A】もしくは【B】で渡しているパラメータから 7//年、月の値をatrYear strMonthに代入 8//存在しなければnullを返す 9String strYear=request.getParameter("year"); 10String strMonth=request.getParameter("month"); 11 12int intYear; 13int intMonth; 14//パラメータ無しならばShowCalendar1と同様の処理。 15//パラメータあった場合は下記if文内の処理実施 16if(strYear!=null && strMonth!=null){ 17//一旦intMonthTempに代入 18int intMonthTemp=Integer.parseInt(strMonth); 19//12で割ったあまりを代入: 20// 0の場合は0を代入(12月) 21//13の場合は1を代入( 1月) 22intMonth=intMonthTemp%12; 23//13の場合、1を足した年を代入、その他は年のまま 24intYear=Integer.parseInt(strYear)+intMonthTemp/12; 25//12月の場合はintMonthが0となるため、これを12月に変更し、年を一年減少 26//ゼロオリジンの回避 27if(intMonth==0){ 28intMonth=12; 29intYear--; 30} 31//上記結果のintYearとintMonth-1で初期化 32cal.set(Calendar.YEAR,intYear); 33cal.set(Calendar.MONTH,intMonth-1); 34} 35//追記 36 37intYear=cal.get(Calendar.YEAR); 38intMonth=cal.get(Calendar.MONTH)+1; 39cal.set(Calendar.DATE,1); 40int k =cal.get(Calendar.DAY_OF_WEEK)-1; 41%> 42 43 44<h1>CALENDAR</h1> 45 46<div class="head"></div> 47<%//追記【A】%> 48<a href="sample.jsp?year=<%=intYear%>&month=<%=intMonth-1%>">前月</a> 49<!--現在の年月を表示--> 50<span class="title"><%=intYear%><%=intMonth%></span> 51<%//追記【B】%> 52<a href="sample.jsp?year=<%=intYear%>&month=<%=intMonth+1%>">翌月</a> 53</div> 54 55<table> 56<tr> 57<!--TH : Table Header--> 58<th class="holiday"></th> 59<th class="weekday"></th> 60<th class="weekday"></th> 61<th class="weekday"></th> 62<th class="weekday"></th> 63<th class="weekday"></th> 64<th class="saturday"></th> 65</tr> 66<%int d=1; 67//月内の間はループ 68while(cal.get(Calendar.MONTH)==intMonth-1){%> 69<tr> 70<!--必ず日曜~土曜の一週間分は処理をするループ--> 71<%for(int j=0;j<7;j++){%> 72<% 73 74//各曜日のクラス決定 75if(j==0){%> 76<td class="holiday"> 77<%}else if(j==6){%> 78<td class="saturday"> 79<%}else{%> 80<td class="weekday"> 81<%}//■終了■各曜日のクラス決定%> 82 83<% 84//もしkが0()=日曜)でなければkから1を引く 85//【k】: 日曜が0、土曜が6 86//はじめの1日目を書き込む曜日の確定用 87//=前月分の空枠 88if(k!=0){ 89k--; 90//もしkが0(=日曜)なら、もし月内の間なら 91//月が不一致の場合は空白出力 92}else if (cal.get(Calendar.MONTH)==intMonth-1){%> 93<!--変数dを1増やして日付表示--> 94<%=d++%> 95<!--一日先の日付にする--> 96<%cal.add(Calendar.DATE,1);%> 97<%}%><!--/***if(k!=0)--> 98</td><!--/***td(holiday,saturday,weekday)--> 99<%}%><!--/***for--> 100</tr><!--/***tr(外側--> 101<%}%><!--/***while-->

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matobaa

2016/06/16 11:00

jetty でやってみてますが、再現しないですね……。 念のための確認ですが、<%@ page contentType="text/html;charset=UTF-8" %> のように指定してますよね?
uuranos

2016/06/16 11:43

回答ありがとうございます。文字コードの指定は記入してくださった通りです。
matobaa

2016/06/16 12:00

500が出るときって再現性どれくらいですか? 100%再現するなら原因は書き方にありますが、出たり出なかったりするなら環境周りに原因がある可能性が高いです。例えばTomcatを停止→起動したら解決するとかだと十中八九は環境周りです。
uuranos

2016/06/16 12:02

毎回500が出ている状態です。すると書き方に問題があるということでしょうか。
matobaa

2016/06/16 12:05 編集

ついでなんですが、calに2016/13を食わせると2017/01、2017/00を食わせると2016/12、のように解釈してくれるので便利ですよ。
matobaa

2016/06/16 12:24 編集

これは原因かどうかはわからないのですが、コメントは !-- -- に統一した方がいいです。<%// ってなんだか危なっかしいです。 Webブラウザで「ソースを表示」したときに見えるかどうかという違いがありますが、いまは気にしなくていいでしょう。
uuranos

2016/06/17 00:34

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

2016/06/17 02:04 編集

お、いい感じですね。たぶん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 09:33

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

回答1

0

まとめときます。

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

投稿2016/06/21 15:44

matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問