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

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

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

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

Eclipse

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

7281閲覧

java.lang.NullPointerExceptionが出てしまいました。よろしくお願いいたします。

yuichikubo

総合スコア12

Java

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

Eclipse

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2016/09/19 00:46

編集2016/09/19 06:28

eclispeの内部ブラウザにてログイン画面(login.jsp)より既にデータベースに格納してあるユーザ情報でログインしようとすると以下のエラーメッセージが出てしまいます。

メッセージ java.lang.NullPointerException

原因
java.lang.NullPointerException
org.apache.jsp.WEB_002dINF.jsp.list_jsp._jspService(list_jsp.java:175)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
pack.MemoServlet.doPost(MemoServlet.java:96)
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:53)

java

1MemoServlet.java 2 3package pack; 4 5import java.io.IOException; 6import java.sql.Connection; 7import java.sql.DriverManager; 8import java.sql.ResultSet; 9import java.sql.SQLException; 10import java.sql.Statement; 11import java.util.ArrayList; 12 13import javax.servlet.RequestDispatcher; 14import javax.servlet.ServletException; 15import javax.servlet.annotation.WebServlet; 16import javax.servlet.http.HttpServlet; 17import javax.servlet.http.HttpServletRequest; 18import javax.servlet.http.HttpServletResponse; 19 20@WebServlet(name = "MemoServlet", urlPatterns = { "/MemoServlet" }) 21public class MemoServlet extends HttpServlet { 22 23 private static final long serialVersionUID = 1L; 24 25 private static final String JSP_BASE = "/WEB-INF/jsp/"; 26 27 private Connection _pooledConnection; 28 29 public MemoServlet() { 30 _pooledConnection = null; 31 } 32 33 @Override 34 public void destroy() { 35 if (_pooledConnection != null) { 36 try { 37 _pooledConnection.close(); 38 } catch (SQLException e) { 39 ; 40 } 41 _pooledConnection = null; 42 } 43 44 super.destroy(); 45 } 46 47 @Override 48 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 49 throws ServletException, IOException { 50 51 String action = req.getParameter("action"); 52 53 String forward = null; 54 if("login".equals(action)) { 55 56 forward = JSP_BASE + "login.jsp"; 57 }else{ 58 59 throw new ServletException("不正なリクエストです"); 60 } 61 62 RequestDispatcher dispatcher = req.getRequestDispatcher(forward); 63 dispatcher.forward(req, resp); 64 } 65@Override 66 protected void doPost(HttpServletRequest req, HttpServletResponse resp) 67 throws ServletException, IOException { 68 69 String action = req.getParameter("action"); 70 71 String forward = null; 72 if ("login_action".equals(action)) { 73 74 forward = doLoginAction(req, resp); 75 } else { 76 77 forward = doError(req, resp, "不正なリクエストです"); 78 } 79 80 81 RequestDispatcher dispatcher = req.getRequestDispatcher(forward); 82 dispatcher.forward(req, resp); 83 } 84 85 86 private String doLoginAction(HttpServletRequest req, 87 HttpServletResponse resp) throws ServletException, IOException { 88 String userID = req.getParameter("user_id"); 89 String password = req.getParameter("password"); 90 if (userID == null || password == null) { 91 throw new ServletException("不正なパラメータです。"); 92 } 93 94 try{ 95 96 User user = getUser(userID, password); 97 if(user == null) { 98 return doError(req, resp, "不正なユーザIDもしくはパラメータです。"); 99 } 100 101 102 Memo[] memos = getMemos(); 103 104 105 req.setAttribute("memos", memos); 106 107 return JSP_BASE + "list.jsp"; 108 }catch(SQLException e) { 109 return doError(req, resp, e.getMessage()); 110 } 111 } 112 113 114 private String doError(HttpServletRequest req, HttpServletResponse resp, 115 String message) throws ServletException, IOException { 116 req.setAttribute("message", message); 117 118 return JSP_BASE + "error.jsp"; 119 } 120 private Connection getConnection() 121 throws SQLException { 122 123 if(_pooledConnection != null) { 124 return _pooledConnection; 125 } 126 try { 127 128 Class.forName( "com.mysql.jdbc.Driver" ); 129 130 131 _pooledConnection = DriverManager.getConnection( 132 "jdbc:mysql://localhost/memo", "root", "ky890703"); 133 return _pooledConnection; 134 } catch (ClassNotFoundException e) { 135 _pooledConnection = null; 136 throw new SQLException(e); 137 } catch (SQLException e) { 138 _pooledConnection = null; 139 throw e; 140 } 141 } 142 143 private User getUser(String userID, String password) 144 throws SQLException { 145 Statement statement = null; 146 try { 147 148 statement = getConnection().createStatement(); 149 ResultSet resultSet = statement 150 .executeQuery("SELECT USER_ID,USER_NAME FROM USER WHERE USER_ID='" 151 + userID + "' AND PASSWORD='" + password + "'"); 152 boolean br = resultSet.first(); 153 if (br == false) { 154 return null; 155 } 156 User user = new User(); 157 user.setId(resultSet.getString("USER_ID")); 158 user.setName(resultSet.getString("USER_NAME")); 159 160 return user; 161 }catch(SQLException e) { 162 _pooledConnection = null; 163 throw e; 164 } finally { 165 if (statement != null) { 166 statement.close(); 167 statement = null; 168 } 169 } 170 } 171 172 一部省略 173}

html

1★list.jsp 2 3<%@ page language="java" contentType="text/html; charset=utf-8" %> 4<%@ page import="pack.User" %> 5<%@ page import="pack.Memo" %> 6<%@ page import="java.util.Calendar" %> 7<% 8 User currentUser = (User) request.getSession().getAttribute("currentUser"); 9%> 10<html> 11 <head> 12 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 13 <title>検索一覧</title> 14 <link rel="STYLESHEET" href="todo.css" type="text/css"> 15 </head> 16 <body> 17 <!-- 作業登録・検索 --> 18 <table border="0" width="90%" class="toolbar"> 19 <tr> 20 <form action="todo" method="post"> 21 <input type="hidden" name="action" value="add"> 22 <td> 23 <input type="submit" value="作業登録"> 24 </td> 25 </form> 26 <td align="left"> 27 <table border="0"> 28 <tr> 29 <td> 30 タイトル 31 </td> 32 <form action="todo" method="post"> 33 <input type="hidden" name="action" value="search"> 34 <td> 35 <input type="text" name="title" value="" size="24"> 36 </td> 37 </form> 38 </tr> 39 <tr> 40 <td> 41 更新日 42 </td> 43 <form action="todo" method="post"> 44 <input type="hidden" name="action" value="search"> 45 <td> 46 <input type="text" name="update_datetime" value="" size="24"> 47 </td> 48 </form> 49 </tr> 50 <tr> 51 <td> 52 <input type="submit" value="検索"> 53 </td> 54 </tr> 55 </table> 56 </td> 57 </tr> 58 </table> 59 <% 60 Memo[] memos = (Memo[]) request.getAttribute("items"); 61 if(memos.length == 0) { 62 // アイテムが存在しない場合 63 %> 64 <div align="center">検索項目はありません。</div> 65 <% 66 }else{ 67 %> 68 <table border="0" width="90%" class="list"> 69 <tr> 70 <th> 71 ID 72 </th> 73 <th> 74 タイトル 75 </th> 76 <th> 77 登録日 78 </th> 79 <th> 80 更新日 81 </th> 82 </tr> 83 一部省略 84 // メモを出力 85 for(int i = 0; i < memos.length; i ++) { 86 Memo memo = memos[i]; 87 String styleAttr = ""; 88 %> 89 <tr> 90 <td <%= styleAttr %>> 91 <%= memo.getId() %> 92 </td> 93 <td <%= styleAttr %>> 94 <%= memo.getTitle() %> 95 </td> 96 <td <%= styleAttr %>> 97 <%= memo.getInsertDate() %> 98 </td> 99 <td <%= styleAttr %>> 100 <%= memo.getUpdateDate() %> 101 </td> 102 </tr> 103 <% 104 } 105 %> 106 </table> 107 <% 108 } 109 %> 110 </body> 111</html>

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

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

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

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

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

kgtkr

2016/09/19 02:54

「```ここに言語を入力 」を「```java」にしたらどうですか?整形しないと見にくいです
kgtkr

2016/09/19 03:07

```の閉じタグは?JSPは```htmlで整形したら?
yuichikubo

2016/09/19 03:11

ありがとうございます。使い方をいまいち理解できておりませんでした。
A-pZ

2016/09/19 06:09

JSP内でNullPointerExceptionが出ていますが、記載していただいたJSPでは発生しません。問題が発生しているのは別のJSPではないでしょうか?
yuichikubo

2016/09/19 06:29

すいません。別のjspを追加いたしました。
退会済みユーザー

退会済みユーザー

2016/09/19 07:00

workspace 以下でプロジェクト以外のディレクトリの下に「list_jsp.java」というファイルが作成されているはずなのでそれを探してみてもらえますか。
yuichikubo

2016/09/19 07:09

すいません。ひととおり探しましたが、見つけることができませんでした。 とりあえずはエラーが出なくなったので、進めてみようと思います。 コメントありがとうございました。
guest

回答1

0

ベストアンサー

getMemos()の実装がないので予想でしかありませんが、サーブレットの中で呼び出している getMemos() メソッドがnullだった場合に、JSPでNullPointerExceptionが発生します。

具体的には

<% Memo[] memos = (Memo[]) request.getAttribute("items"); if(memos.length == 0) { // アイテムが存在しない場合 %>

次のように記述すれば回避はできますが、Memo[]の内容がnullにならないよう、サーブレット側でnullのMemo[]にならないよう制御するのが一番良いでしょう。

html

1<% 2 Memo[] memos = (Memo[]) request.getAttribute("items"); 3 if (memos == null || memos.length == 0) { 4 // アイテムが存在しない場合 5%>

投稿2016/09/19 06:54

A-pZ

総合スコア12011

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

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

yuichikubo

2016/09/19 07:02

ありがとうございます。 おっしゃるとおりの記述にしましたところNullPointerExceptionは解消されました。 >Memo[]の内容がnullにならないよう、サーブレット側でnullのMemo[]にならないよう制御するのが一番良いでしょう。 につきましては引き続き調べながらやっていきます。
A-pZ

2016/09/19 11:09

d(・ω・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問