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

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

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

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

Java

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

servlet

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

Q&A

解決済

1回答

7242閲覧

requestスコープにつぶやきを入れるのですが、空文字がつぶやかれた時は、errorMsgを入れたいのですができません。

edoooooo

総合スコア476

JSP

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

Java

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

servlet

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

0グッド

0クリップ

投稿2016/04/23 16:53

編集2016/04/23 16:57

リクエストパラメータの送信元で、表示も行うmain.jspと、postでパラメータを受け取り、リクエストパラメータに、textをセットし、空文字の場合は、errorMsgをセットする、Main.java(servlet)を記載しました。
わからない点としては、なぜif文で、空文字であるかによってのコードをかいているにもかかわらず、nullpintとなってしまうのかがわかりません。
空文字でないものをjspで打ち込んで、送信した際は、エラーにはならず、コメント欄に、なにも入力しないで、パラメータをpost送信したときにえらーとなります
申し訳ありませんが、どうぞよろしくお願いします。

//エラーメッセージです。

java

1HTTP Status 500 - java.lang.NullPointerException 2 3type Exception report 4 5message java.lang.NullPointerException 6 7description The server encountered an internal error that prevented it from fulfilling this request. 8 9exception 10 11org.apache.jasper.JasperException: java.lang.NullPointerException 12 org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556) 13 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477) 14 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 15 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 16 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 17 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 18 servlet.Main.doPost(Main.java:82) 19 javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 20 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 21 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 22root cause 23 24java.lang.NullPointerException 25 org.apache.jsp.WEB_002dINF.jsp.main_jsp._jspService(main_jsp.java:122) 26 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 27 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 28 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 29 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 30 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 31 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 32 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 33 servlet.Main.doPost(Main.java:82) 34 javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 35 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 36 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 37note The full stack trace of the root cause is available in the Apache Tomcat/7.0.65 logs. 38 39Apache Tomcat/7.0.65

//Main.java(servlet)です。

java

1package servlet; 2 3import java.io.IOException; 4import java.util.List; 5 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13import javax.servlet.http.HttpSession; 14 15import model.GetMutterListLogic; 16import model.Mutter; 17import model.User; 18import model.PostMutterLogic; 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 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 29 */ 30 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 32 //つぶやきリストを取得して、リクエストスコープに保存 33 GetMutterListLogic getMutterListLogic=new GetMutterListLogic(); 34 List<Mutter>mutterList=getMutterListLogic.execute(); 35 request.setAttribute("mutterList", mutterList); 36 37 //ログインしているか確認するため 38 //セッションスコープからユーザー情報おを取得 39 HttpSession session=request.getSession(); 40 User loginUser=(User)session.getAttribute("loginUser"); 41 42 if(loginUser==null){//路グインしていない場合 43 //リダイレクト 44 response.sendRedirect("/example23/"); 45 }else{//ログイン済みの場合 46 //フォワード 47 RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); 48 dispatcher.forward(request, response); 49 } 50 // TODO Auto-generated method stub 51 response.getWriter().append("Served at: ").append(request.getContextPath()); 52 } 53 54 protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ 55 56 //リクエストパラメータを取得 57 request.setCharacterEncoding("UTF-8"); 58 String text=request.getParameter("text"); 59 60 //入力値チェック 61 if(text!=null && text.length()!=0){ 62 63 //セッションスコープに保存されたユーザー情報おを取得 64 HttpSession session=request.getSession(); 65 User loginUser=(User)session.getAttribute("loginUser"); 66 67 //つぶやきをつぶやきリストに追加 68 Mutter mutter=new Mutter(loginUser.getName(),text); 69 PostMutterLogic postMutterLogic=new PostMutterLogic(); 70 postMutterLogic.execute(mutter); 71 72 //つぶやきリスとを取得して、リクエストスコープに保存 73 GetMutterListLogic getMutterListLogic=new GetMutterListLogic(); 74 List<Mutter>mutterList=getMutterListLogic.execute(); 75 request.setAttribute("mutterList", mutterList); 76 }else{ 77 //エラーメッセージ 78 request.setAttribute("errorMsg","つぶやきが入力されていません"); 79 } 80 //メイン画面にフォワード 81 RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); 82 dispatcher.forward(request, response); 83 } 84 } 85 86 87

//main.jspです。

java

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 <% 5 //セッションスコープに保存されたユーザー情報を取得 6 User loginUser=(User)session.getAttribute("loginUser"); 7 //リクエストスコープに保存されたつぶやきリストを取得 8 List<Mutter>mutterList=(List<Mutter>)request.getAttribute("mutterList"); 9 //リクエストスコープに保存されたエラーメッセージを取得 10 String errorMsg=(String)request.getAttribute("errorMsg"); 11 %> 12<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 13<html> 14<head> 15<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 16<title>つぶやきアプリ</title> 17</head> 18<body> 19<h1>つぶやきアプリ</h1> 20<p> 21<%=loginUser.getName() %>さん、ログイン中 22<a href="/example23/Logout">ログアウト</a> 23</p> 24<p><a href="/example23/Main">更新</a></p> 25<form action="/example23/Main" method="post"> 26<input type="text"name="text"> 27<input type="submit" value="つぶやく"> 28</form> 29<% if(errorMsg !=null){ %> 30<p><%=errorMsg %></p> 31<%} %> 32<% for(Mutter mutter:mutterList){ %> 33<p><%=mutter.getUserName() %>:<%=mutter.getText() %></p> 34<%} %> 35</body> 36</html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

JSPでは

JSP

1<% for(Mutter mutter:mutterList){ %> 2<p><%=mutter.getUserName() %>:<%=mutter.getText() %></p> 3<%} %>

と、mutterListを取得してループをする処理になっていますが、テキストを受け取るServletでは

java

1//入力値チェック 2if(text!=null && text.length()!=0){ 3 //つぶやきリスとを取得して、リクエストスコープに保存 4 request.setAttribute("mutterList", mutterList); 5} else { 6 //エラーメッセージ 7}

このように、入力値チェックの結果がtrueのときはリクエストスコープにmutterListを格納していますが、テキスト入力がない時にはmutterListは格納していません。
そのため、JSPでは例外が出ます。

textに値がないときでも mutterListの内容をリクエストスコープへ格納するのが正しいでしょうか。

投稿2016/04/23 18:00

A-pZ

総合スコア12011

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

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

edoooooo

2016/04/24 02:29

ありがとうございます。 <% if(errorMsg !=null){ %> <p><%=errorMsg %></p> このような処理を、してエラーを表示できたとしても、 そのあとの、<% for(Mutter mutter:mutterList){ %> <p><%=mutter.getUserName() %>:<%=mutter.getText() %></p> がnullとってしまってエラーとなるのですね、  textにあたいがないときでもmutterListの内容をリクエストスコープに保存する方法ではないのですが、   <% if(errorMsg !=null){ %> <p><%=errorMsg %></p> <%}else{ %> <% for(Mutter mutter:mutterList){ %> <p><%=mutter.getUserName() %>:<%=mutter.getText() %></p> <%} }%> このようなelseをつけることで、しっかり動かすことができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問