myPage.jsp
java
1<!-- メイン画面を出力する --> 2<%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>どこつぶ</title> 10<link rel="stylesheet" type="text/css" 11 href="${pageContext.request.contextPath}/css/style.css"> 12</head> 13<body> 14 <header> 15 <h1>どこつぶ</h1> 16 </header> 17 <div id="namebar"> 18 <p class="name"> 19 <a href="${pageContext.request.contextPath}/Main" class=koshin>更新</a> 20 <c:out value="${loginUser.userName}" /> 21 <a href="${pageContext.request.contextPath}/Logout" class="Logout_button">ログアウト</a> 22 <form action="${pageContext.request.contextPath}/Main" method="post"> 23 <textarea name="text" rows="10" cols="30" class="tweetform" placeholder="つぶやく内容を入力してください。"></textarea> 24 <br> 25 <input type="submit" value="つぶやく" class="tweet_button"> 26 </form> 27 <c:if test="${not empty errorMsg}"> 28 <p>${errorMsg}</p> 29 </c:if> 30 </div> 31 <div id="tweetbar"> 32 <c:forEach var="mutter" items="${mutterList}"> 33 <p class="tweet"> 34 <c:out value="${mutter.userName}" /> 35 : 36 <c:out value="${mutter.text}" /> 37 </p> 38 </c:forEach> 39 </div> 40</body> 41</html>
MutterDAO.java
java
1package dao; 2 3import java.sql.Connection; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.util.ArrayList; 7import java.util.List; 8 9import model.Mutter; 10import util.JDBCUtils; 11 12public class MutterDAO { 13 14 //全レコードを取得 15 public List<Mutter> findAll() { 16 List<Mutter> mutterList = new ArrayList<Mutter>(); 17 18 try(Connection conn = JDBCUtils.getConnection()){ 19 20 21 22 // 並び替え; SELECT 列名 FROM テーブル名 ORDER BY 列名 並び順 (検索結果をTWEET_IDの大きい順DESCに並び替える) 23 String sql = "SELECT " 24 + "TWEET_ID AS TWEET_ID," 25 + "USER_NAME AS USER_NAME," 26 + "TWEET.TEXT AS TEXT " // AS は別名的な 27 + "FROM TWEET INNER JOIN USER ON TWEET.USER_ID = USER.USER_ID " //結合;選択列リスト FROM テーブルA JOIN テーブルB ON 両テーブルの結合条件 28 + "ORDER BY TWEET_ID DESC"; 29 30 try(PreparedStatement pStmt = conn.prepareStatement(sql)){ 31 // SELECTを実行 32 try(ResultSet rs = pStmt.executeQuery()){ 33 // SELECT文の結果をArrayListに格納 34 while (rs.next()) { 35 int tweetId = rs.getInt("TWEET_ID"); 36 String userName = rs.getString("USER_NAME"); 37 String text = rs.getString("TEXT"); 38 Mutter mutter = new Mutter(tweetId, userName, text); 39 mutterList.add(mutter); 40 } 41 } 42 } 43 } catch (Exception e) { 44 throw new RuntimeException(e); 45 } 46 return mutterList; 47 } 48 49 50 51//つぶやきを追加 52 public boolean create(Mutter mutter) { 53 try(Connection conn = JDBCUtils.getConnection()){ 54 55 // INSERT文の準備(idは自動連番なので指定しなくてよい) 56 String sql = "INSERT INTO TWEET (USER_ID,TEXT) VALUES(?, ?)"; 57 try(PreparedStatement pStmt = conn.prepareStatement(sql)){ 58 // INSERT文中の「?」に使用する値を設定しSQLを完成 59 pStmt.setString(1, mutter.getUserId()); 60 pStmt.setString(2, mutter.getText()); 61 // INSERT文を実行 62 int result = pStmt.executeUpdate(); 63 if (result != 1) { 64 return false; 65 } 66 } 67 } catch (Exception e) { 68 throw new RuntimeException(e); 69 } 70 return true; 71 } 72 73 74}
GetMutterListLogic.java
java
1//MutterDAOを使用してMUTTERテーブルの全レコードを取得し、それを返す 2 3package model; 4 5import java.util.List; 6 7import dao.MutterDAO; 8 9 10public class GetMutterListLogic { 11 12 public List<Mutter> execute(){ 13 MutterDAO dao = new MutterDAO(); 14 List<Mutter> mutterList = dao.findAll(); 15 return mutterList; 16 } 17} 18
LoginLogic.java
java
1//ログインに関する処理を行うモデル 2 3package model; 4 5import dao.UserDAO; 6 7public class LoginLogic { 8 public User execute (String userName, String pass){ //excute() 実行 9 UserDAO dao = new UserDAO(); 10 return dao.getUser(userName, pass); 11 //if(user.getUserName().equals("1234")){return true;} 12 //return false; 13 } 14} 15
Mutter.java
java
1//つぶやきに関する情報 2 3package model; 4import java.io.Serializable; 5 6public class Mutter implements Serializable { 7 private int tweetId; 8 private String userId; 9 private String userName; 10 private String text; 11 12 public Mutter(){} 13 public Mutter(String userId, String text){ 14 this.userId = userId; 15 this.text = text; 16 } 17 public Mutter(int tweetId, String userName, String text){ 18 this.tweetId = tweetId; 19 this.userName = userName; 20 this.text = text; 21 } 22 public int getTweetId() {return tweetId;} 23 public String getUserId() {return userId;} 24 public String getUserName() {return userName;} 25 public String getText(){return text;} 26} 27
User.java
java
1 2package model; 3 4import java.io.Serializable; 5 6public class User implements Serializable { 7 private String userId; 8 private String nickName; 9 private String eMail; 10 private String pass; 11 private String userName; 12 13 public User(String nickName, String eMail, String pass, String userName){ 14 this.nickName = nickName; 15 this.eMail = eMail; 16 this.pass = pass; 17 this.userName = userName; 18 } 19 20 public User(String userId, String nickName, String eMail, String pass, String userName){ 21 this.userId = userId; 22 this.nickName = nickName; 23 this.eMail = eMail; 24 this.pass = pass; 25 this.userName = userName; 26 } 27 28 public String getUserId(){return userId;} 29 public String getNickName(){return nickName;} 30 public String getEMail(){return eMail;} 31 public String getPass(){return pass;} 32 public String getUserName(){return userName;} 33 34}
Main.java
java
1 2//つぶやきに関するリクエストを処理するコントローラ 3 4package servlet; 5 6import java.io.IOException; 7import java.util.List; 8 9import javax.servlet.RequestDispatcher; 10import javax.servlet.ServletException; 11import javax.servlet.annotation.WebServlet; 12import javax.servlet.http.HttpServlet; 13import javax.servlet.http.HttpServletRequest; 14import javax.servlet.http.HttpServletResponse; 15import javax.servlet.http.HttpSession; 16 17import model.GetMutterListLogic; 18import model.Mutter; 19import model.PostMutterLogic; 20import model.User; 21 22@WebServlet("/Main") 23public class Main extends HttpServlet { 24 private static final long serialVersionUID = 1L; 25 26 protected void doGet(HttpServletRequest request, HttpServletResponse response) 27 throws ServletException, IOException { 28 29 // ログインしているか確認するため、セッションスコープからユーザー情報を取得 30 HttpSession session = request.getSession(); 31 User loginUser = (User) session.getAttribute("loginUser"); 32 33 if (loginUser == null) { // ログインしていない場合 34 // リダイレクト 35 response.sendRedirect(request.getServletContext().getContextPath()); // トップ画面へ 36 } else { // ログイン済みの場合 37 38 // つぶやきリストを取得して、リクエストスコープに保存 39 GetMutterListLogic getMutterListLogic = new GetMutterListLogic(); 40 List<Mutter> mutterList = getMutterListLogic.execute(); 41 request.setAttribute("mutterList", mutterList); 42 43 // フォワード 44 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/jsp/myPage.jsp"); 45 dispatcher.forward(request, response); 46 } 47 48 } 49 50 protected void doPost(HttpServletRequest request, HttpServletResponse response) 51 throws ServletException, IOException { 52 53 // ログインしているか確認するため、セッションスコープからユーザー情報を取得 54 HttpSession session = request.getSession(); 55 User loginUser = (User) session.getAttribute("loginUser"); 56 57 if (loginUser == null) { // ログインしていない場合 58 // リダイレクト 59 response.sendRedirect(request.getServletContext().getContextPath()); // トップ画面へ 60 } else { 61 62 // リクエストパラメータの取得 63 request.setCharacterEncoding("UTF-8"); 64 String text = request.getParameter("text"); 65 66 // 入力値チェック 67 if (text != null && text.length() != 0) { 68 69 // つぶやきをつぶやきリストに追加 70 Mutter mutter = new Mutter(loginUser.getUserId(), text); 71 PostMutterLogic postMutterLogic = new PostMutterLogic(); 72 postMutterLogic.execute(mutter); 73 74 } else { 75 // エラーメッセージをリクエストスコープに保存 76 request.setAttribute("errorMsg", "つぶやきが入力されていません。"); 77 } 78 79 // つぶやきリストを取得して、リクエストスコープに保存 80 GetMutterListLogic getMutterListLogic = new GetMutterListLogic(); 81 List<Mutter> mutterList = getMutterListLogic.execute(); 82 request.setAttribute("mutterList", mutterList); 83 84 // メイン画像にフォワード 85 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/jsp/myPage.jsp"); 86 dispatcher.forward(request, response); 87 } 88 } 89}
教えてください!!
省略しているものもありますが、
いまのままだと
ログインしていないつぶやきも
表示されてしまいます
ログインしたユーザーが自分のツイートだけ表示させたい場合は
どのような手順を踏めばよいのでしょうか???
あなたの回答
tips
プレビュー