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

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

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

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

Java

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

Eclipse

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

servlet

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

Tomcat

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

Q&A

解決済

1回答

5921閲覧

もう自分で考えてもわからない エラー500

kenken2525

総合スコア8

JSP

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

Java

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

Eclipse

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

servlet

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

Tomcat

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

0グッド

1クリップ

投稿2020/03/04 06:11

編集2020/03/05 03:33

前提・実現したいこと

スッキリわかる サーブレット&JSP入門 第2版にて登場した、どこつべと言うプログラムを組んでいる。
どういうプログラムかというと、ツイッターのようなものである
しかし、教科書を読みながら組んでいたがエラーが出てします。
自分のスキルでは解決できないと思い質問する。

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

lang

1メッセージ An exception occurred processing [WEB-INF/jsp/main.jsp] at line [27] 2 3説明 The server encountered an unexpected condition that prevented it from fulfilling the request. 4 5例外 6 7org.apache.jasper.JasperException: An exception occurred processing [WEB-INF/jsp/main.jsp] at line [27] 8 924: <% if(errorMsg!=null){ %> 1025: <p><%= errorMsg %></p> 1126: <% } %> 1227: <% for(Mutter mutter:mutterList){ %> 1328: <p><%= mutter.getUserName() %>:<%= mutter.getText() %></p> 1429: <% } %> 1530: </body> 16 17 18Stacktrace: 19 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:593) 20 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:482) 21 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) 22 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) 23 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 24 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 25 servlet.Main.doGet(Main.java:48) 26 javax.servlet.http.HttpServlet.service(HttpServlet.java:634) 27 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 28 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 29原因 30 31java.lang.NullPointerException 32 org.apache.jsp.WEB_002dINF.jsp.main_jsp._jspService(main_jsp.java:155) 33 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 34 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 35 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444) 36 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) 37 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) 38 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 39 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 40 servlet.Main.doGet(Main.java:48) 41 javax.servlet.http.HttpServlet.service(HttpServlet.java:634) 42 javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 43 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 44注意 原因のすべてのスタックトレースは、のログに記録されています

該当のソースコード

言語は、java,jsp,サーブレット

ソースコード
MutterDAO.java

java

1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.util.ArrayList; 9import java.util.List; 10 11import model.Mutter; 12 13public class MutterDAO { 14private final String url="jdbc:postgresql://localhost:5432/docotsubu"; 15private final String user="postgres"; 16private final String pass="password"; 17 18public List<Mutter> findAll(){ 19 List<Mutter> mutterList=new ArrayList<>(); 20 21 22 23try(Connection conn=DriverManager.getConnection(url,user,pass)){ 24 String sql="SELECT id,text FROM mutter ORDER BY id DESC"; 25 PreparedStatement pStmt=conn.prepareStatement(sql); 26 27 ResultSet rs=pStmt.executeQuery(); 28 29 while(rs.next()) { 30 int id=rs.getInt("id"); 31 String userName=rs.getString("name"); 32 String text=rs.getString("text"); 33 Mutter mutter=new Mutter(id,userName,text); 34 mutterList.add(mutter); 35 } 36 37 38}catch(SQLException e) { 39 e.printStackTrace(); 40 return null; 41} 42return mutterList; 43} 44public boolean create(Mutter mutter) { 45 46 try(Connection conn=DriverManager.getConnection(url,user,pass)){ 47 String sql="INSERT INTO mutter(name,text) VALUES(?,?)"; 48 PreparedStatement pStmt=conn.prepareStatement(sql); 49 pStmt.setString(1, mutter.getUserName()); 50 pStmt.setString(2,mutter.getText()); 51 52 53 int result=pStmt.executeUpdate(); 54 if(result!=1) { 55 return false; 56 } 57 58 }catch(SQLException e) { 59 e.printStackTrace(); 60 return false; 61 } 62 return true; 63} 64} 65

GetMutterListLogic.java

java

1package model; 2 3import java.util.List; 4 5import dao.MutterDAO; 6 7public class GetMutterListLogic { 8public List<Mutter> execute(){ 9 MutterDAO dao=new MutterDAO(); 10 List<Mutter> mutterList=dao.findAll(); 11 return mutterList; 12} 13} 14

Mutter.java

java

1package model; 2 3public class Mutter { 4private String userName; 5private String text; 6private int id; 7 8public Mutter() {} 9public Mutter(String userName,String text) { 10 this.userName=userName; 11 this.text=text; 12 13} 14public Mutter(int id,String userName,String text) { 15 this.id=id; 16 this.userName=userName; 17 this.text=text; 18} 19public int getId() {return id;} 20public String getUserName() {return userName;} 21public String getText() {return text;} 22} 23

PostMutterLogic.java

java

1package model; 2 3import dao.MutterDAO;; 4 5public class PostMutterLogic { 6public void execute(Mutter mutter) { 7 MutterDAO dao=new MutterDAO(); 8 dao.create(mutter); 9} 10}

Main.java

java

1package servlet; 2 3import java.io.IOException; 4import java.util.ArrayList; 5import java.util.List; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletContext; 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14import javax.servlet.http.HttpSession; 15import model.PostMutterLogic; 16import model.Mutter; 17import model.User; 18import model.GetMutterListLogic; 19 20/** 21 * Servlet implementation class Main 22 */ 23@WebServlet("/Main") 24public class Main extends HttpServlet { 25 private static final long serialVersionUID = 1L; 26 27 28 public Main() { 29 super(); 30 31 } 32 33 34 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 35 GetMutterListLogic gMLL=new GetMutterListLogic(); 36 List<Mutter> mutterList=gMLL.execute(); 37 request.setAttribute("mutterList", mutterList); 38 39 40 HttpSession session=request.getSession(); 41 User loginUser=(User)session.getAttribute("loginUser"); 42 43 if(loginUser==null) { 44 45 response.sendRedirect("/docoTsubu/"); 46 }else { 47 RequestDispatcher dis=request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); 48 dis.forward(request, response); 49 } 50 } 51 52 /** 53 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 54 */ 55 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 56 request.setCharacterEncoding("UTF-8"); 57 String text=request.getParameter("text"); 58 59 60 if(text!=null&&text.length()!=0) { 61 62 HttpSession session=request.getSession(); 63 User loginUser=(User) session.getAttribute("loginUser"); 64 65 66 Mutter mutter=new Mutter(loginUser.getName(),text); 67 PostMutterLogic pML=new PostMutterLogic(); 68 pML.execute(mutter); 69 70 71 }else { 72 request.setAttribute("errorMsg", "つぶやきが入力されていません"); 73 } 74 GetMutterListLogic gMLL=new GetMutterListLogic(); 75 List<Mutter> mutterList=gMLL.execute(); 76 request.setAttribute("mutterList", mutterList); 77 RequestDispatcher dis=request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); 78 dis.forward(request, response); 79 } 80 81}

main.jsp

jsp

1%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="model.User,model.Mutter,java.util.List" %> 4 <% User loginUser=(User) session.getAttribute("loginUser"); 5 List<Mutter> mutterList=(List<Mutter>)request.getAttribute("mutterList"); 6 String errorMsg=(String)request.getAttribute("errorMsg");%> 7<!DOCTYPE html> 8<html> 9<head> 10<meta charset="UTF-8"> 11<title>どこつぶ</title> 12</head> 13<body> 14<h1>どこつぶメイン</h1> 15<p> 16<%= loginUser.getName() %>さん、ログイン中 17<a href="/docoTsubu/Logout">ログアウト</a> 18</p> 19<p><a href="/docoTsubu/Main">更新</a></p> 20<form action="/docoTsubu/Main" method="post"> 21<input type="text" name="text"> 22<input type="submit" value="つぶやく"> 23</form> 24<% if(errorMsg!=null){ %> 25<p><%= errorMsg %></p> 26<% } %> 27<% for(Mutter mutter:mutterList){ %> 28<p><%= mutter.getUserName() %>:<%= mutter.getText() %></p> 29<% } %> 30</body> 31</html> 32

試したこと

色々調べた所、tomcatの中にJDBCのドライバーを入れるということだったので、入れたぐらいです

補足情報(FW/ツールのバージョンなど)

eclipce Photon Release (4.8.0)
tomcat 9.0.10
postgresql-42.2.10

他に必要な情報ございましたら教えてください。

###追記
現在実行してみたら/docoTubu/Loginにたどり着けなくなってしまいました。
ファイルがあるのですがどうしてでしょうか

java

1Type ステータスレポート 2 3メッセージ /docoTsubu/Login 4 5説明 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. 6 7

イメージ説明

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

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

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

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

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

storm3

2020/03/04 06:22

findAll()でSQLエラーがおきて、mutterListがnullになっているということはないでしょうか?
kenken2525

2020/03/04 06:35

回答ありがとうございます。 MutterDAOのfindAllメソッドのことでしょうか? SQLエラーとはログイン失敗ということでしょうか?
m.ts10806

2020/03/04 06:41

エラー、コードはマークダウンのcode機能を利用してご提示ください。 また、デバッグ実行でどこまで通っているか確認してください。
storm3

2020/03/04 06:43

>MutterDAOのfindAllメソッドのことでしょうか? >SQLエラーとはログイン失敗ということでしょうか? そうです。 JSPのfor文でmutterListがnullだから落ちているように見えたので、 MutterDAOのfindAllにあるcatchに入ってreturn null;を通ってないかをまず確認してほしいとおもいました。
kenken2525

2020/03/04 07:32

大変お待たせしました。 デバックで確認したところ、PreparedStatement pStmt=conn.prepareStatement(sql)このコードの時点でcatchされnullを返していました。
m.ts10806

2020/03/04 08:29

エラー、コードはマークダウンのcode機能を利用してご提示ください。(2回目) 質問は編集できます。 平で提示されても読みにくいしワンクリックでコピーできないのです。 (コードのマークダウン対応されてないだけで引き返す回答者は多いですし、私も読む気はしないので今回のコードも読んでません)
storm3

2020/03/04 08:36

そうでしたか。そこまで分かったならあとは e.printStackTrace();で出力されたエラー内容から推測できると思います。 ちなみにですが、下記のコードはselectしていないカラムを取得しようとするとエラーになるのでselect文にnameを追加したほうがよいです。 String userName=rs.getString("name");
kenken2525

2020/03/04 10:58

すいません、m.ts10806さんマークダウンは入れれたのですが使い方が一切見当つきません。 使い方などの説明があるサイトなどはありますか?
m.ts10806

2020/03/04 11:42

>使い方などの説明があるサイトなどはありますか? 大抵のサイトには「ヘルプ」ページがあります。 説明書がわりになるものです。 プログラミングをやっていく上ではルールの確認も含めて ガイドライン、ドキュメントの類は必ず一読する癖をつけておいてください。 書いたようにしか動かないので。思ったようには動きませんので。
kenken2525

2020/03/04 11:49

大変申し訳ありません。 ありがとうございます!!!
退会済みユーザー

退会済みユーザー

2020/03/04 11:57

そもそも、null返す実装したならnullチェックは当然。
kenken2525

2020/03/04 12:00

asahina1979さん、申し訳ございません。 教科書を丸写ししたので、そんなことにも気づかず聞いてしまいました。 最近始めたばかりで覚えることだらけですので、優しく教えてくれると助かります。
kenken2525

2020/03/04 12:58

これはひどいですね。 失敗しました、焚火の燃料にします。 何かほかにいい教科書はありますか?
kenken2525

2020/03/05 01:50

storm3さん、スタットレースを読んでいても解決方法が見当つかないのですがどうすればいいですか?
退会済みユーザー

退会済みユーザー

2020/03/05 04:17

> 何かほかにいい教科書はありますか? サンプルコードの何がおかしいかを理解しないのであれば、どの書籍もあまり変わらないですよ。 > スタットレースを読んでいても解決方法が見当つかないのですが NullPointerExceptionではないですよね? 質問に追記しましょう。
storm3

2020/03/05 14:25

当初の質問であった500エラーは解決したようなので、いったん自己解決で解決理由を記載してこの質問を終了しましょう。 次にでたエラーですが、コードがないので何ともいえません。現在でているエラーは遷移先のURLが見つからないといっています。 /docoTsubu/Login で呼び出そうとしているサーブレットのクラスに以下アノテーションはついてますか? @WebServlet("/Login") もし解決しないようなら、別の質問として、エラーメッセージとLoginに関するコードを提示したほうが回答してもらえると思います。
kenken2525

2020/03/06 01:17

わかりました!上げなおします。 質問などが上手くなくイライラさせて申し訳ありません。
m.ts10806

2020/03/06 01:49

イライラしてる人はいないと思います。文字だけのやり取りなので感情までは読み取りづらいところはあるかとは思いますけど。
guest

回答1

0

ベストアンサー

おそらくその教科書のそのページの問題は回答がついてベストアンサーだなw

ログインだけのアプリケーションを作ったのですが、nullpointとなってしまいます。どうぞよろしくお願いします。

投稿2020/03/04 12:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問