Javaのリクエストセッションについてです。
サーブレットからjspに値を渡すため、リクエストセッションを用いているのですが、うまくいかないため質問させていただきます。
画像では、関数の結果(H2 Databaseより値を取得)を配列に渡し、その結果をリクエストセッションに設定しているのですが、
Nullで設定されjspでNullPointerExceptionとなります。
Nullになる理由はなぜでしょうか。
開発環境:Eclipse
コードは以下となります。
Java
1・サーブレット 2@WebServlet("/Main") 3public class Main extends HttpServlet { 4 private static final long serialVersionUID = 1L; 5 6 /** 7 * @see HttpServlet#HttpServlet() 8 */ 9 public Main() { 10 super(); 11 // TODO Auto-generated constructor stub 12 } 13 14 /** 15 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 16 */ 17 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 18 // TODO Auto-generated method stub 19 GetMutterListLogic getMutterListLogic = new GetMutterListLogic(); 20 List<Mutter> mutterList = getMutterListLogic.execute(); 21 request.setAttribute("mutterList", mutterList); 22 23 24 HttpSession session = request.getSession(); 25 User loginUser = (User) session.getAttribute("loginUser"); 26 27 if(loginUser == null) { 28 response.sendRedirect("/docoTsubu/"); 29 }else { 30 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); 31 dispatcher.forward(request, response); 32 } 33 } 34 /** 35 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 36 */ 37 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 38 // TODO Auto-generated method stub 39 request.setCharacterEncoding("UTF-8"); 40 String text = request.getParameter("text"); 41 42 if(text !=null && text.length() !=0) { 43 44 HttpSession session = request.getSession(); 45 User loginUser = (User)session.getAttribute("loginUser"); 46 47 Mutter mutter = new Mutter(loginUser.getName(),text); 48 PostMutterLogic postMutterLogic = new PostMutterLogic(); 49 postMutterLogic.execute(mutter); 50 51 } else { 52 request.setAttribute("errorMsg", "入力されていません"); 53 } 54 GetMutterListLogic getMutterListLogic = new GetMutterListLogic(); 55 List<Mutter> mutterList = getMutterListLogic.execute(); 56 request.setAttribute("mutterList", mutterList); 57 58 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/main.jsp"); 59 dispatcher.forward(request, response); 60 61 } 62} 63 64・JSP 65<%@ page language="java" contentType="text/html; charset=UTF-8" 66 pageEncoding="UTF-8"%> 67<%@ page import="model.User,model.Mutter,java.util.List" %> 68<% 69User loginUser = (User) session.getAttribute("loginUser"); 70List<Mutter>mutterList = (List<Mutter>) application.getAttribute("mutterList"); 71%> 72<!DOCTYPE html> 73<html> 74<head> 75<meta charset="UTF-8"> 76<title>test</title> 77</head> 78<body> 79<h1>どこつぶメイン</h1> 80<p> 81<%= loginUser.getName() %>さん、ログイン中 82<a href = "/docoTsubu/Logout">ログアウト</a> 83</p> 84<p><a href= "/docoTsubu/Main">更新</a></p> 85<form action = "/docoTsubu/Main" method="post"> 86<input type="text" name = "text"> 87<input type="submit" value= "つぶやく"> 88</form> 89<% for(Mutter mutter : mutterList) {%> 90 <p><%= mutter.getName() %>:<%= mutter.getText() %></p> 91 <%} %> 92</body> 93</html> 94 95・クラス 96public class Mutter implements Serializable{ 97 98 private String userName; 99 private String text; 100 private int id; 101 102 public Mutter() {} 103 public Mutter(String userName,String text) { 104 this.userName = userName; 105 this.text = text; 106 } 107 public Mutter(int id,String userName,String text) { 108 this.id = id; 109 this.userName = userName; 110 this.text = text; 111 } 112 public int getId() {return id;} 113 public String getName() {return userName;} 114 public String getText() {return text;} 115 }
サーブレットからjspへはどうやって切り替えさせていますか?
ソースをスクショでなくテキストでご提示ください。
また、少なくとも私はスクショのソースだけで【Nullになる理由】には辿り着けません。
redirectなら、request変数のスコープ切れで値が取れないのは当然ですし、
forwardなら別の要因がありそうです。
コードは一部ではなく全体がわかる状態で、テキストでご提示ください
失礼しました
質問本文に記載しました
質問は編集できます。
こちらのコメント欄ではマークダウンが使えませんので原則本文に追記を。コードもマークダウン使ってくださいね。
ファイル毎に分けてくれた方が見やすいかなぁ。
```Java
@WebServlet("/Main")
以下略
```
```JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
以下略
```
って感じで
回答2件
あなたの回答
tips
プレビュー