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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

JSP

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

Java

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

Q&A

1回答

1842閲覧

JSPでjavax.jdo.JDOFatalUserExceptionが出てしまう

gotenyama

総合スコア10

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

JSP

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

Java

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

0グッド

0クリップ

投稿2019/01/17 01:01

編集2019/01/22 04:30

実現したいこと

初心者なのですが、GAEをつかって、Javaの基本的なCRUDをつくろうと
下記のサイトを参考に実装しました。
が、NOT Foundが出てしまい、JSPが表示されません。
コンソールにはとくにエラーメッセージも出ていないので原因がわからず。。
どなたか教えていただけますでしょうか。

https://www.ipl.co.jp/item/gaej03.html

【1/18日追記】
PersistenceManagerでエラーになっているようで、こちらにどう対応すればよいのか、
調べてもよくわからず。教えていただけたら幸いです。
※エラー内容は後述

ソースコード

src\main\webapp\WEB-INF\index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="com.google.appengine.api.users.User" %> <%@ page import="com.google.appengine.api.users.UserService" %> <%@ page import="com.google.appengine.api.users.UserServiceFactory" %> <%@ page import="javax.jdo.PersistenceManager" %> <%@ page import="java.util.List" %> <%@ page import="com.google.appengine.*" %> <%@ page import="com.google.appengine.dao.*" %> <%@ page import="com.google.appengine.data.*" %> <%@ page import="com.google.appengine.util.*" %> <!DOCTYPE> <html> <head> <title>簡易ブログ</title> </head> <body style="background: #DDDDFF;"> <form action="/sv" method="post"> <input type="hidden" name="action" value="insert" /> <textarea name="text" style="width: 300px; height: 150px;"></textarea> <br> <input type="submit" value="投稿" /> </form> <% PersistenceManager pm = PMF.get().getPersistenceManager(); try{ //全件取得 String query = "select from " + Article.class.getName(); Object execute = pm.newQuery(query).execute(); List<Article> obj = (List<Article>) execute; for (Article g : obj) { %> <div class="post" style="width: 300px; border: solid 1px #FFFFFF;"> <div class="post-header"> <div align="right"><a href="/sv?action=delete&id=<%=g.getKeyStr()%> ">del</a> <a href="/edit.jsp?id=<%=g.getKeyStr()%>">edit</a></div> <div style="margin: 10px;"><!-- text --> <pre><%=g.getText()%></pre> </div><!-- text --> </div><!-- post-header --> <div class="comments" style="border: dotted 3px #FFFFFF; font-size: 80%;"> <p>コメント</p> <ul> <% for (Comment comment : g.getComments()) { %> <li><%=comment.getText()%> <a href="/sv?action=deletecomment&id=<%=comment.getKeyStr()%> ">x</a> </li> <% } %> </ul> <div align="center"><!-- コメントフォーム --> <form action="/sv" method="post"> <input type="hidden" name="action" value="addcomment" /> <input type="hidden" name="id" value="<%=g.getKeyStr()%>" /> <input type="text" name="text" /> <input type="submit" value="コメント追加" /> </form> </div><!-- コメントフォーム --> </div><!-- comments --> </div><!-- post --> <% } pm.close(); }catch(Exception e){ e.printStackTrace(); } %> </body> </html>

実現したいこと

JSPを参照する
【1/18追記】「」

src\main\webapp\index.jsp

JSP

1<%@ page contentType="text/html;charset=UTF-8" language="java" %> 2<%@ page import="com.google.appengine.api.users.User" %> 3<%@ page import="com.google.appengine.api.users.UserService" %> 4<%@ page import="com.google.appengine.api.users.UserServiceFactory" %> 5<%@ page import="javax.jdo.PersistenceManager" %> 6<%@ page import="java.util.List" %> 7 8<%@ page import="com.google.appengine.*" %> 9<%@ page import="com.google.appengine.dao.*" %> 10<%@ page import="com.google.appengine.data.*" %> 11<%@ page import="com.google.appengine.util.*" %> 12 13 14 15<!DOCTYPE> 16<html> 17<head> 18<title>簡易ブログ</title> 19</head> 20<body style="background: #DDDDFF;"> 21<form action="/sv" method="post"> 22 <input type="hidden" name="action" value="insert" /> 23 <textarea name="text" style="width: 300px; height: 150px;"></textarea> 24 <br> 25 <input type="submit" value="投稿" /> 26</form> 27 28<% 29PersistenceManager pm = PMF.get().getPersistenceManager(); 30try{ 31 //全件取得 32 String query = "select from " + Article.class.getName(); 33 Object execute = pm.newQuery(query).execute(); 34 List<Article> obj = (List<Article>) execute; 35 36for (Article g : obj) { 37%> 38 39 40<div class="post" style="width: 300px; border: solid 1px #FFFFFF;"> 41<div class="post-header"> 42 <div align="right"><a href="/sv?action=delete&id=<%=g.getKeyStr()%> ">del</a> 43 <a href="/edit.jsp?id=<%=g.getKeyStr()%>">edit</a></div> 44 <div style="margin: 10px;"><!-- text --> 45 <pre><%=g.getText()%></pre> 46 </div><!-- text --> 47</div><!-- post-header --> 48 49<div class="comments" style="border: dotted 3px #FFFFFF; font-size: 80%;"> 50<p>コメント</p> 51<ul> 52 <% for (Comment comment : g.getComments()) { %> 53 <li><%=comment.getText()%> 54 <a href="/sv?action=deletecomment&id=<%=comment.getKeyStr()%> ">x</a> 55 </li> 56 <% } %> 57</ul> 58<div align="center"><!-- コメントフォーム --> 59<form action="/sv" method="post"> 60 <input type="hidden" name="action" value="addcomment" /> 61 <input type="hidden" name="id" value="<%=g.getKeyStr()%>" /> 62 <input type="text" name="text" /> 63 <input type="submit" value="コメント追加" /> 64</form> 65</div><!-- コメントフォーム --> 66</div><!-- comments --> 67</div><!-- post --> 68 69 70 71 72<% 73} 74 pm.close(); 75}catch(Exception e){ 76 e.printStackTrace(); 77} 78%> 79 </body> 80</html> 81

src\main\webapp\WEB-INF\web.xml

XML

1<?xml version="1.0" encoding="utf-8"?> 2<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 5 version="3.1"> 6 <servlet> 7 <servlet-name>BigTable</servlet-name> 8 <servlet-class>com.google.appengine.BigTableServlet</servlet-class> 9 </servlet> 10 <servlet-mapping> 11 <servlet-name>BigTable</servlet-name> 12 <url-pattern>/sv</url-pattern> 13 </servlet-mapping> 14 <welcome-file-list> 15 <welcome-file>index.jsp</welcome-file> 16 </welcome-file-list> 17</web-app> 18

1/18追記 JSPファイルをWebapp直下に置いたところ、JSPは参照できるようになりました

  • 新たに出ているエラー
HTTP ERROR 500 Problem accessing /. Reason: Server Error Caused by: org.apache.jasper.JasperException: An exception occurred processing JSP page [/index.jsp] at line [29] 26: </form> 27: 28: <% 29: PersistenceManager pm = PMF.get().getPersistenceManager(); 30: try{ 31: //???????? 32: String query = "select from " + Article.class.getName(); Stacktrace: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) .....

コンソールに表示されているエラー

原因: javax.servlet.ServletException: java.lang.ExceptionInInitializerError ... 原因: javax.jdo.JDOFatalUserException: A property named javax.jdo.PersistenceManagerFactoryClass must be specified, or a jar file with a META-INF/services/javax.jdo.PersistenceManagerFactory entry must be in the classpath, or a property named javax.jdo.option.PersistenceUnitName must be specified.

ファイル構成

│ .classpath │ .project │ pom.xml │ ├─.settings │ .jsdtscope │ com.google.cloud.tools.eclipse.appengine.deploy.prefs │ org.eclipse.core.resources.prefs │ org.eclipse.jdt.core.prefs │ org.eclipse.m2e.core.prefs │ org.eclipse.wst.common.component │ org.eclipse.wst.common.project.facet.core.xml │ org.eclipse.wst.jsdt.ui.superType.container │ org.eclipse.wst.jsdt.ui.superType.name │ org.eclipse.wst.validation.prefs │ ├─src │ │ .project │ │ │ └─main │ ├─java │ │ └─com │ │ └─google │ │ └─appengine │ │ │ BigTableServlet.java │ │ │ │ │ ├─dao │ │ │ ArticleDao.java │ │ │ CommentDao.java │ │ │ │ │ ├─data │ │ │ Article.java │ │ │ Comment.java │ │ │ │ │ └─util │ │ PMF.java │ │ │ └─webapp │ │ favicon.ico │ │ index.jsp │ │ │ ├─META-INF │ │ MANIFEST.MF │ │ │ └─WEB-INF │ │ .project │ │ appengine-web.xml │ │ edit.jsp │ │ index.html │ │ logging.properties │ │ web.xml │ │ │ └─lib └─target ├─appengine-maven-plugin-0.1.0-SNAPSHOT │ └─WEB-INF │ └─classes │ └─com │ └─google │ └─appengine │ │ BigTableServlet.class │ │ │ ├─dao │ │ ArticleDao.class │ │ CommentDao.class │ │ │ ├─data │ │ Article.class │ │ Comment.class │ │ │ └─util │ PMF.class │ ├─m2e-wtp │ └─web-resources │ └─META-INF │ │ MANIFEST.MF │ │ │ └─maven │ └─com.google.appengine │ └─appengine-maven-plugin │ pom.properties │ pom.xml │ └─test-classes └─com └─google └─appengine MockHttpServletResponse.class

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

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

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

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

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

guest

回答1

0

直感的に思っただけですが
index.jspをwebapp直下に置いてみて下さい
もしかしたら動くかも
https://cloud.google.com/appengine/docs/standard/java/building-app/static-content?hl=ja

【1/20追記】
原因を解決するためにプロジェクトルート配下すべてのファイル構成を記載して下さい

投稿2019/01/17 15:48

編集2019/01/19 15:34
teikoku-penguin

総合スコア314

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

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

gotenyama

2019/01/18 01:47

ご回答ありがとうございます。 webapp直下に置いて実行してみたところ、JSPは参照できるようになりました。 ただ、以下のエラーが出ています。。 ``` HTTP ERROR 500 Problem accessing /. Reason: Server Error Caused by: org.apache.jasper.JasperException: An exception occurred processing JSP page [/index.jsp] at line [29] 26: </form> 27: 28: <% 29: PersistenceManager pm = PMF.get().getPersistenceManager(); 30: try{ 31: //???????? 32: String query = "select from " + Article.class.getName(); Stacktrace: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:584) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) ..... ``` コンソールに表示されているエラー ``` 原因: javax.servlet.ServletException: java.lang.ExceptionInInitializerError ... 原因: javax.jdo.JDOFatalUserException: A property named javax.jdo.PersistenceManagerFactoryClass must be specified, or a jar file with a META-INF/services/javax.jdo.PersistenceManagerFactory entry must be in the classpath, or a property named javax.jdo.option.PersistenceUnitName must be specified. ```
teikoku-penguin

2019/01/18 07:39

とりあえずエラーになってるのはindex.jsp 29行目です
gotenyama

2019/01/22 04:30

ファイル構成、記載しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問