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

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

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

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

Java

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

servlet

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

Q&A

解決済

1回答

1034閲覧

ログイン画面表示時のエラー

ZONO

総合スコア7

JSP

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

Java

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

servlet

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

0グッド

0クリップ

投稿2022/10/23 00:02

編集2022/10/23 06:13

初めてのwebアプリを作ろうとしていますが、
ログイン画面を表示する際に以下のエラーメッセージが発生しました。
エラー画面

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

HTTPステータス 500 – Internal Server Error タイプ 例外報告 メッセージ [PersistenceUnit: memo_web_app] Unable to build Hibernate SessionFactory 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 javax.persistence.PersistenceException: [PersistenceUnit: memo_web_app] Unable to build Hibernate SessionFactory org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1336) org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1262) org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) utils.DBUtil._getEntityManagerFactory(DBUtil.java:21) utils.DBUtil.createEntityManager(DBUtil.java:15) services.ServiceBase.<init>(ServiceBase.java:15) services.UserService.<init>(UserService.java:18) actions.AuthAction.process(AuthAction.java:25) controllers.FrontController.doGet(FrontController.java:41) javax.servlet.http.HttpServlet.service(HttpServlet.java:626) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) filters.LoginFilter.doFilter(LoginFilter.java:106) filters.EncodingFilter.doFilter(EncodingFilter.java:40)

該当のソースコード

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page import="constants.AttributeConst" %> <%@ page import="constants.ForwardConst" %> <c:import url="/WEB-INF/views/layout/app.jsp"> <c:param name="content"> <c:if test="${loginError}"> <div id="flush_error"> ユーザー番号かパスワードが間違っています。 </div> </c:if> <c:if test="${flush != null}"> <div id="flush_success"> <c:out value="${flush}"></c:out> </div> </c:if> <h2>ログイン</h2> <form method="POST" action="<c:url value='/login' />"> <label for="code">ユーザー番号</label><br /> <input type="text" name="code" value="${code}" /> <br /><br /> ​ <label for="password">パスワード</label><br /> <input type="password" name="password" /> <br /><br /> ​ <input type="hidden" name="_token" value="${_token}" /> <button type="submit">ログイン</button> </form> </c:param> </c:import>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page import="constants.ForwardConst" %> <%@ page import="constants.AttributeConst" %> <c:set var="actTop" value="${ForwardConst.ACT_TOP.getValue()}" /> <c:set var="actUsr" value="${ForwardConst.ACT_USR.getValue()}" /> <c:set var="actMem" value="${ForwardConst.ACT_MEM.getValue()}" /> <c:set var="actAuth" value="${ForwardConst.ACT_AUTH.getValue()}" /> <c:set var="commIdx" value="${ForwardConst.CMD_INDEX.getValue()}" /> <c:set var="commOut" value="${ForwardConst.CMD_LOGOUT.getValue()}" /> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title><c:out value="メモ帳システム" /></title> <link rel="stylesheet" href="<c:url value='/css/reset.css' />"> <link rel="stylesheet" href="<c:url value='/css/style.css' />"> </head> <body> <div id="wrapper"> <div id="header"> <div id="header_menu"> <h1><a href="<c:url value='/?action=${actTop}&command=${commIdx}' />">メモ張</a></h1>&nbsp;&nbsp;&nbsp; <c:if test="${sessionScope.login_user != null}"> <!-- <c:if test="${sessionScope.login_user.adminFlag == AttributeConst.ROLE_ADMIN.getIntegerValue()}"> <a href="<c:url value='?action=${actEmp}&command=${commIdx}' />">従業員管理</a>&nbsp; </c:if> --> <a href="<c:url value='?action=${actMem}&command=${commIdx}' />">メモ帳</a>&nbsp; </c:if> </div> <c:if test="${sessionScope.login_user != null}"> <div id="user_name"> <c:out value="${sessionScope.login_user.name}" /> &nbsp;さん&nbsp;&nbsp;&nbsp; <!-- ログアウトボタンに移行のためコメントアウト <a href="<c:url value='?action=${actAuth}&command=${commOut}' />">ログアウト</a> --> <input type="button" value="ログアウト" onclick="location.href='../logout' "> </div> </c:if> </div> <div id="content">${param.content}</div> <div id="footer">by zzzz zzzz.</div> </div> </body> </html>
package controllers.login; import java.io.IOException; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import models.User; import utils.DBUtil; import utils.EncryptUtil; /** * Servlet implementation class LoginServlet */ @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ // ログイン画面を表示 @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("_token", request.getSession().getId()); request.setAttribute("loginError", false); if(request.getSession().getAttribute("flush") != null) { request.setAttribute("flush", request.getSession().getAttribute("flush")); request.getSession().removeAttribute("flush"); } RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/login/login.jsp"); rd.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ // ログイン処理を実行 @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 認証結果を格納する変数 Boolean check_result = false; String code = request.getParameter("code"); String plain_pass = request.getParameter("password"); User u = null; if(code != null && !code.equals("") && plain_pass != null && !plain_pass.equals("")) { EntityManager em = DBUtil.createEntityManager(); String password = EncryptUtil.getPasswordEncrypt( plain_pass, (String)this.getServletContext().getAttribute("salt") ); // 社員番号とパスワードが正しいかチェックする try { u = em.createNamedQuery("checkLoginCodeAndPassword", User.class) .setParameter("code", code) .setParameter("pass", password) .getSingleResult(); } catch(NoResultException ex) {} em.close(); if(u != null) { check_result = true; } } if(!check_result) { // 認証できなかったらログイン画面に戻る request.setAttribute("_token", request.getSession().getId()); request.setAttribute("loginerror", true); request.setAttribute("code", code); RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/login/login.jsp"); rd.forward(request, response); } else { // 認証できたらログイン状態にしてトップページへリダイレクト request.getSession().setAttribute("login_user", u); request.getSession().setAttribute("flush", "ログインしました。"); response.sendRedirect(request.getContextPath() + "/"); } } }
package actions; import java.io.IOException; import javax.servlet.ServletException; import constants.AttributeConst; import constants.ForwardConst; import services.UserService; /** * 認証に関する処理を行うActionクラス * */ public class AuthAction extends ActionBase { private UserService service; /** * メソッドを実行する */ @Override public void process() throws ServletException, IOException { service = new UserService(); //メソッドを実行 invoke(); service.close(); } /** * ログイン画面を表示する * @throws ServletException * @throws IOException */ public void showLogin() throws ServletException, IOException { //CSRF対策用トークンを設定 putRequestScope(AttributeConst.TOKEN, getTokenId()); //セッションにフラッシュメッセージが登録されている場合はリクエストスコープに設定する String flush = getSessionScope(AttributeConst.FLUSH); if (flush != null) { putRequestScope(AttributeConst.FLUSH,flush); removeSessionScope(AttributeConst.FLUSH); } //ログイン画面を表示 forward(ForwardConst.FW_LOGIN); } }

試したこと

ネットに書いているHTTPステータス500の対策はあらかたしました。
例えば、hibernate.propertiesの記載、application.propertiesの記載等々

対策過去参照サイト

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

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

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

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

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

ZONO

2022/10/23 00:02

エラー画面です。 HTTPステータス 500 – Internal Server Error タイプ 例外報告 メッセージ [PersistenceUnit: memo_web_app] Unable to build Hibernate SessionFactory 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 javax.persistence.PersistenceException: [PersistenceUnit: memo_web_app] Unable to build Hibernate SessionFactory org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1336) org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1262) org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) utils.DBUtil._getEntityManagerFactory(DBUtil.java:21) utils.DBUtil.createEntityManager(DBUtil.java:15) services.ServiceBase.<init>(ServiceBase.java:15) services.UserService.<init>(UserService.java:18) actions.AuthAction.process(AuthAction.java:25) controllers.FrontController.doGet(FrontController.java:41) javax.servlet.http.HttpServlet.service(HttpServlet.java:626) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) filters.LoginFilter.doFilter(LoginFilter.java:106) filters.EncodingFilter.doFilter(EncodingFilter.java:40) 根本原因 org.hibernate.HibernateException: Errors in named queries: checkLoginCodeAndPassword failed because of: org.hibernate.QueryException: could not resolve property: delete_flag of: models.User [SELECT e FROM models.User AS e WHERE e.delete_flag = 0 AND e.code = :code AND e.password = :pass] org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:343) org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468) org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) utils.DBUtil._getEntityManagerFactory(DBUtil.java:21) utils.DBUtil.createEntityManager(DBUtil.java:15) services.ServiceBase.<init>(ServiceBase.java:15) services.UserService.<init>(UserService.java:18) actions.AuthAction.process(AuthAction.java:25) controllers.FrontController.doGet(FrontController.java:41) javax.servlet.http.HttpServlet.service(HttpServlet.java:626) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) filters.LoginFilter.doFilter(LoginFilter.java:106) filters.EncodingFilter.doFilter(EncodingFilter.java:40)
KoichiSugiyama

2022/10/23 00:59 編集

[根本原因]以降にある org.hibernate.HibernateException: Errors in named queries: checkLoginCodeAndPassword failed because of: org.hibernate.QueryException: could not resolve property: delete_flag of: models.User [SELECT e FROM models.User AS e WHERE e.delete_flag = 0 AND e.code = :code AND e.password = :pass] については何か確認されましたでしょうか。
ZONO

2022/10/23 01:24

すみません、一応全文を追って確認したのですが、エラー原因を見つけるに至っていません。
jimbe

2022/10/23 04:57 編集

>could not resolve property: delete_flag と言われてますけど。 そして、エラー画面というリンクで teratail の質問テンプレート画面のスクリーンショットが表示されるのですが、何かの間違いでしょうか。
m.ts10806

2022/10/23 05:06

質問は編集できますので、適宜調整してください。 また、テーブル定義(可能ならCREATE TABLE文)と実際のデータ(可能ならINSERT文)も提示されたほうが良いと思います。
guest

回答1

0

自己解決

queryの部分を一部修正(スペルミス)しましたらコードが通りました。
初めての質問投稿で足りない部分等ご指摘いただきました。
次質問する時は、もっと良い質問ができるように気をつけます。
あとスペルチェックは厳格にするように気をつけます。
ありがとうございました。

投稿2022/10/23 07:09

ZONO

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問