前提・実現したいこと
ここに質問の内容を詳しく書いてください。
プログラム経験のない新卒一年目SEです。
在宅勤務中の成果物でJava Servlet/JSPを使用し、簡単なWebアプリケーションを作成しています。
ユーザー登録が完了した後に、ユーザーIDとパスワードを用いてログインをしようとしている時に以下のエラーがでました。
謎が多いです。やれることはやったのですが、解決できません。
お願いします、助けてください。
発生している問題・エラーメッセージ
HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error that prevented it from fulfilling this request. 例外 java.lang.NullPointerException MainPage.User_MainPageServlet.doPost(User_MainPageServlet.java:36) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 注意 原因のすべてのスタックトレースは、Apache Tomcat/8.0.36のログに記録されています Apache Tomcat/8.0.36
###1.UserBean.java
package User; import java.io.Serializable; public class UserBean implements Serializable{ private String name; private String sex; private String age; private String birth; private String height; private String weight; private String userid; private String password; public UserBean() { } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getSex() { return this.sex; } public void setSex(String sex) { this.sex = sex; } public String getAge() { return this.age; } public void setAge(String age) { this.age = age; } public String getBirth() { return this.birth; } public void setBirth(String birth) { this.birth= birth; } public String getHeight() { return this.height; } public void setHeight(String height) { this.height = height; } public String getWeight() { return this.weight; } public void setWeight(String weight) { this.weight = weight; } public String getUserid() { return this.userid; } public void setUserid(String userid) { this.userid = userid; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } }
###2.User_RegisterServlet.java(サーブレットクラス)
package MainPage; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; 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 javax.servlet.http.HttpSession; import User.UserAuthBean; import User.UserBean; @WebServlet("/MainPage/User_RegisterServlet") public class User_RegisterServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*文字コードエンコーディング*/ request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); /*遷移先*/ String url = null; /*User情報取得*/ UserBean ub = new User.UserBean(); /*パラメータの取得*/ String name= request.getParameter("name"); String sex = request.getParameter("sex"); String age = request.getParameter("age"); String year = request.getParameter("year"); String month = request.getParameter("month"); String day = request.getParameter("day"); String height = request.getParameter("tall"); String weight = request.getParameter("weight"); String userid = request.getParameter("userid"); String password = request.getParameter("password"); String birth = year+"年"+month+"月"+day+"日"; ub.setName(name); ub.setSex(sex); ub.setAge(age); ub.setBirth(birth); ub.setHeight(height); ub.setWeight(weight); ub.setUserid(userid); ub.setPassword(password); /*パラメータを取得で来ているかどうかの確認*/ System.out.println(ub.getName()); System.out.println(ub.getSex()); System.out.println(ub.getAge()); System.out.println(ub.getBirth()); System.out.println(ub.getHeight()); System.out.println(ub.getWeight()); System.out.println(ub.getUserid()); System.out.println(ub.getPassword()); HttpSession session = request.getSession(); session.setAttribute("userbeanses", ub); UserBean ub_test = (UserBean) session.getAttribute("userbeanses"); /*セッションスコープに保存されているかの確認*/ ☆System.out.println(ub_test.getName()); System.out.println(ub_test.getSex()); System.out.println(ub_test.getAge()); System.out.println(ub_test.getBirth()); System.out.println(ub_test.getHeight()); System.out.println(ub_test.getWeight()); System.out.println(ub_test.getUserid()); System.out.println(ub_test.getPassword()); //ログイン判定 UserAuthBean uab = new User.UserAuthBean(); if(uab.execute(ub) == true) { /*認証に成功*/ url = "/WEB-INF/Login_Register/register_end.jsp"; }else{ /*認証に失敗*/ url = "/WEB-INF/Login_Register/register_error.jsp"; } /*画面遷移*/ ServletContext servletContext = getServletContext(); RequestDispatcher rd = servletContext.getRequestDispatcher(url); rd.forward(request, response); } }
###3.login.jsp(JSPファイル)
<login.jsp(jspファイル(ログイン画面)) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ヘルスケア-ログイン </title> </head> <body> <h1> <center> ログイン </center> </h1> <form method="POST" action="/成果物/MainPage/User_MainPageServlet"> <center> ユーザーID:<input type="text" name="userid_login"><br><br> パスワード : <input type="password" name="password_login"><br><br> <input type="submit" value="送信"> <input type="reset" value="リセット"> </center> </form> </body> </html>
###4.User_MainPageServlet.java(サーブレットクラス)
package MainPage; import java.io.IOException; 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 javax.servlet.http.HttpSession; import User.UserBean; @WebServlet("/MainPage/User_MainPageServlet") public class User_MainPageServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*文字コードエンコーディング*/ request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); /*遷移先*/ String url = null; /*ログイン-ユーザーID_パスワード情報取得*/ String userid_login = request.getParameter("userid_login"); String password_login = request.getParameter("password_login"); HttpSession session = request.getSession(); UserBean ub = (UserBean) session.getAttribute("userbeanses"); 〇if(userid_login.equals(ub.getUserid()) && password_login.equals(ub.getPassword())) { url = "/WEB-INF/Menu/mainmenu.jsp"; }else{ url = "WEB-INF/Login_Register/login_error"; } /*画面遷移*/ RequestDispatcher rd = request.getRequestDispatcher(url); rd.forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*文字コードエンコーディング*/ request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); /*遷移先*/ String url = null; /*ログイン-ユーザーID_パスワード情報取得*/ String userid_login = request.getParameter("userid_login"); String password_login = request.getParameter("password_login"); HttpSession session = request.getSession(); UserBean ub = (UserBean) session.getAttribute("userbeanses"); 〇if(userid_login.equals(ub.getUserid()) && password_login.equals(ub.getPassword())) { url = "/WEB-INF/Menu/mainmenu.jsp"; }else{ url = "WEB-INF/Login_Register/login_error"; } /*画面遷移*/ RequestDispatcher rd = request.getRequestDispatcher(url); rd.forward(request, response); } }
試したこと
試したことというよりかは、ちゃんとセッションスコープに保存ができているかどうかの確認なのですが、User_Registerervlet.javaの☆部分にてSystem.out.println(ub_test.~)という形でセッションスコープに値がしっかり保存されているかどうかの確認をしたところ、しっかりコンソールにて値が出力されていました。
ですが、その後ログインを試みたところ、エラーメッセージの通りなのですが、User_MainPageServlet.javaの〇部分にてエラーが発生しました。NullPointerと出ているので対象の値がNullになっているかと思ったのですが、セッションに保存されており、セッションを呼び出していると思ってますので謎が深まっております。ちなみにlogin.jspにて入力したユーザーIDとパスワードをSystem.out.println(~)にてちゃんと値が格納されているか確認をしたところ、しっかりコンソールにて出力されていました。
session.setAttribute("userbeanses", ub)で値を設定後、別のサーブレットでUserBean ub = (UserBean) session.getAttribute("userbeanses");するとnullになってしまう理由が理解できません....(get/setしているはずなのに)
多数の長いソースコードを張り付けて申し訳ありませんがご協力本当によろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
サーバー:Tomcat8.0vサーバー