初めての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> <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> </c:if> --> <a href="<c:url value='?action=${actMem}&command=${commIdx}' />">メモ帳</a> </c:if> </div> <c:if test="${sessionScope.login_user != null}"> <div id="user_name"> <c:out value="${sessionScope.login_user.name}" /> さん <!-- ログアウトボタンに移行のためコメントアウト <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の記載等々

回答1件
あなたの回答
tips
プレビュー