【JSP/Servlet】リクエストスコープのエラー
Posted: 2015年5月05日(火) 17:00
こんにちは。Nectと申します。
添付したソースコードで発生しているNullPointerExceptionを解消しようとしています。
スタックトレースにat jp.request.servlet.FowardServlet.doPost(FowardServlet.java:52)があります。そのスタックトレースを元に、
FowardServlet#53行目にブレークポイントを設置しました。そして、request、response、beans、disが生成されていることを
確認しました。FowardServlet#52行目に渡せるrequest、responseがあるためNullPointerExceptionが発生している根本的な原因を
特定できませんでした。at org.apache.jsp.WebContent.WEB_002dINF.jsp.After_jsp._jspService(After_jsp.java:75)発生個所も
確認しましたが、原因を特定できませんでした。そのため、NullPointerExceptionを解消できていません。
NullPointerExceptionを解消する方法を教えてください。宜しくお願い致します。
エラー内容は以下の通りです。
重大: サーブレット jsp のServlet.service()が例外を投げました
java.lang.NullPointerException
at org.apache.jsp.WebContent.WEB_002dINF.jsp.After_jsp._jspService(After_jsp.java:75)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at jp.request.servlet.FowardServlet.doPost(FowardServlet.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
5 05, 2015 3:45:27 午後 org.apache.catalina.core.StandardWrapperValve invoke
重大: サーブレット Foward2 のServlet.service()が例外を投げました
java.lang.NullPointerException
at org.apache.jsp.WebContent.WEB_002dINF.jsp.After_jsp._jspService(After_jsp.java:75)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at jp.request.servlet.FowardServlet.doPost(FowardServlet.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
【Before.jsp】
【FowardServlet.java】
【Beans.java】
【After.java】
[codejsp]
<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import ="model.Beans" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
</head>
<body>
<p>
<!-- 以下のメソッドでエラーが発生している可能性あり -->
データ1<%=beans.getData1()%><br>
</p>
</body>
</html>
[/code]
【web.xml】
添付したソースコードで発生しているNullPointerExceptionを解消しようとしています。
スタックトレースにat jp.request.servlet.FowardServlet.doPost(FowardServlet.java:52)があります。そのスタックトレースを元に、
FowardServlet#53行目にブレークポイントを設置しました。そして、request、response、beans、disが生成されていることを
確認しました。FowardServlet#52行目に渡せるrequest、responseがあるためNullPointerExceptionが発生している根本的な原因を
特定できませんでした。at org.apache.jsp.WebContent.WEB_002dINF.jsp.After_jsp._jspService(After_jsp.java:75)発生個所も
確認しましたが、原因を特定できませんでした。そのため、NullPointerExceptionを解消できていません。
NullPointerExceptionを解消する方法を教えてください。宜しくお願い致します。
エラー内容は以下の通りです。
重大: サーブレット jsp のServlet.service()が例外を投げました
java.lang.NullPointerException
at org.apache.jsp.WebContent.WEB_002dINF.jsp.After_jsp._jspService(After_jsp.java:75)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at jp.request.servlet.FowardServlet.doPost(FowardServlet.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
5 05, 2015 3:45:27 午後 org.apache.catalina.core.StandardWrapperValve invoke
重大: サーブレット Foward2 のServlet.service()が例外を投げました
java.lang.NullPointerException
at org.apache.jsp.WebContent.WEB_002dINF.jsp.After_jsp._jspService(After_jsp.java:75)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at jp.request.servlet.FowardServlet.doPost(FowardServlet.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
【Before.jsp】
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>MVCモデル</title>
</head>
<body>
<h1>MVCモデル</h1>
<!-- 送信先の指定 -->
<form action="/tomcat_test/foward2" method="post">
データ1:<input type="text" name="data1"><br>
データ2:<input type="text" name="data2"><br>
<input type="submit" value="送信">
</form>
</body>
</html>
【FowardServlet.java】
package jp.request.servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Beans;
public class FowardServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
String URL="/WebContent/WEB-INF/jsp/Before.jsp";
RequestDispatcher dis =
request.getRequestDispatcher(URL);
dis.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
String URL2="/WebContent/WEB-INF/jsp/After.jsp";
String data1 = request.getParameter("data1");
String data2 = request.getParameter("data2");
//通常のjavaファイルなのでインスタンスを生成
//プロパティの更新
Beans beans = new Beans();
beans.setData1(Double.parseDouble(data1));
beans.setData2(Double.parseDouble(data2));
//リクエストスコープに格納
request.setAttribute("Beans",beans);
RequestDispatcher dis =
request.getRequestDispatcher(URL2);
//指定したパスにリクエスト、レスポンス情報を引き継いでもらう
dis.forward(request, response);
}
}
package model;
import java.io.Serializable;
public class Beans implements Serializable{
private double data1,data2;
public double getData1() {
return data1;
}
public void setData1(double data1) {
this.data1 = data1;
}
public double getData2() {
return data2;
}
public void setData2(double data2) {
this.data2 = data2;
}
}
【After.java】
[codejsp]
<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import ="model.Beans" %>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
</head>
<body>
<p>
<!-- 以下のメソッドでエラーが発生している可能性あり -->
データ1<%=beans.getData1()%><br>
</p>
</body>
</html>
[/code]
【web.xml】
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>Foward2</servlet-name>
<servlet-class>jp.request.servlet.FowardServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Foward2</servlet-name>
<url-pattern>/foward2</url-pattern>
</servlet-mapping>
</web-app>