質問編集履歴

1 詳細の追加

edoooooo

edoooooo score 164

2016/04/24 01:57  投稿

requestスコープにつぶやきを入れるのですが、空文字がつぶやかれた時は、errorMsgを入れたいのですができません。
リクエストパラメータの送信元で、表示も行うmain.jspと、postでパラメータを受け取り、リクエストパラメータに、textをセットし、空文字の場合は、errorMsgをセットする、Main.java(servlet)を記載しました。
リクエストパラメータの送信元で、表示も行うmain.jspと、postでパラメータを受け取り、リクエストパラメータに、textをセットし、空文字の場合は、errorMsgをセットする、Main.java(servlet)を記載しました。 
わからない点としては、なぜif文で、空文字であるかによってのコードをかいているにもかかわらず、nullpintとなってしまうのかがわかりません。
空文字でないものをjspで打ち込んで、送信した際は、エラーにはならず、コメント欄に、なにも入力しないで、パラメータをpost送信したときにえらーとなります
申し訳ありませんが、どうぞよろしくお願いします。
//エラーメッセージです。
```java
HTTP Status 500 - java.lang.NullPointerException
type Exception report
message java.lang.NullPointerException
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: java.lang.NullPointerException
   org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:556)
   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
   org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
   servlet.Main.doPost(Main.java:82)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
   org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.NullPointerException
   org.apache.jsp.WEB_002dINF.jsp.main_jsp._jspService(main_jsp.java:122)
   org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
   org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
   servlet.Main.doPost(Main.java:82)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
   org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.65 logs.
Apache Tomcat/7.0.65
```
//Main.java(servlet)です。
```java
package servlet;
import java.io.IOException;
import java.util.List;
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 model.GetMutterListLogic;
import model.Mutter;
import model.User;
import model.PostMutterLogic;
/**
* Servlet implementation class Main
*/
@WebServlet("/Main")
public class Main extends HttpServlet {
   private static final long serialVersionUID = 1L;
   /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       
       //つぶやきリストを取得して、リクエストスコープに保存
       GetMutterListLogic getMutterListLogic=new GetMutterListLogic();
       List<Mutter>mutterList=getMutterListLogic.execute();
       request.setAttribute("mutterList", mutterList);
       
       //ログインしているか確認するため
       //セッションスコープからユーザー情報おを取得
       HttpSession session=request.getSession();
       User loginUser=(User)session.getAttribute("loginUser");
       
       if(loginUser==null){//路グインしていない場合
           //リダイレクト
           response.sendRedirect("/example23/");
       }else{//ログイン済みの場合
           //フォワード
           RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");
           dispatcher.forward(request, response);
       }
       // TODO Auto-generated method stub
       response.getWriter().append("Served at: ").append(request.getContextPath());
   }
   
   protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
       
       //リクエストパラメータを取得
       request.setCharacterEncoding("UTF-8");
       String text=request.getParameter("text");
       
       //入力値チェック
       if(text!=null && text.length()!=0){
           
           //セッションスコープに保存されたユーザー情報おを取得
           HttpSession session=request.getSession();
           User loginUser=(User)session.getAttribute("loginUser");
           
           //つぶやきをつぶやきリストに追加
           Mutter mutter=new Mutter(loginUser.getName(),text);
       PostMutterLogic postMutterLogic=new PostMutterLogic();
       postMutterLogic.execute(mutter);
       
       //つぶやきリスとを取得して、リクエストスコープに保存
       GetMutterListLogic getMutterListLogic=new GetMutterListLogic();
       List<Mutter>mutterList=getMutterListLogic.execute();
       request.setAttribute("mutterList", mutterList);
       }else{
           //エラーメッセージ
           request.setAttribute("errorMsg","つぶやきが入力されていません");
       }
       //メイン画面にフォワード
       RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/main.jsp");
       dispatcher.forward(request, response);
       }
   }
```
//main.jspです。
```java
<%@ page language="java" contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
   <%@page import="model.User,model.Mutter,java.util.List" %>
   <%
   //セッションスコープに保存されたユーザー情報を取得
   User loginUser=(User)session.getAttribute("loginUser");
   //リクエストスコープに保存されたつぶやきリストを取得
   List<Mutter>mutterList=(List<Mutter>)request.getAttribute("mutterList");
   //リクエストスコープに保存されたエラーメッセージを取得
   String errorMsg=(String)request.getAttribute("errorMsg");
   %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>つぶやきアプリ</title>
</head>
<body>
<h1>つぶやきアプリ</h1>
<p>
<%=loginUser.getName() %>さん、ログイン中
<a href="/example23/Logout">ログアウト</a>
</p>
<p><a href="/example23/Main">更新</a></p>
<form action="/example23/Main" method="post">
<input type="text"name="text">
<input type="submit" value="つぶやく">
</form>
<% if(errorMsg !=null){ %>
<p><%=errorMsg %></p>
<%} %>
<% for(Mutter mutter:mutterList){ %>
<p><%=mutter.getUserName() %>:<%=mutter.getText() %></p>
<%} %>
</body>
</html>
```
  • Java

    23450 questions

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

  • JSP

    1599 questions

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

  • servlet

    826 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る