--- title: Javaでいいね機能の実装 tags: Java servlet JSP author: parapore slide: false --- ![iineko.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/290f2b85-4b6b-7484-e3dc-f9db743d30fc.png) アウトプットはどんどんした方がいいらしいので、初めて作ったいいねアプリの公開をします。 MVCモデルで作りました。 ##概要 画像をクリックするといいねこ!が増えます。 値はアプリケーションスコープに保存しています。 https://iineko.herokuapp.com ##苦労したところ 1、HTMLから画面遷移せずに値を送る方法がわからずに四苦八苦しました。 [画面遷移せずにHTMLで値を送る方法](https://qiita.com/parapore/items/227782c252af6ab5aa03) 2、いいねを押しても1以上にならない。 いいねされる度に毎回newしていたので初回起動判定を入れた。 3、クラスをまたいでインスタンスを渡す方法がわからなかった。 YoineServelet.javaで`Yoine y = new Yoine();`して YoineLogic.javaで`Yoine y`にいいねを1加算して Yoine.javaにsetしたかったが YoineServeletでnewしてYoineLogicでもnewしたら別のインスタンスになっちゃうしどうするんだと悩んでしまった。 ↓ YoineLogicでYoine型を引数として受け取るようにした。 ##ソースコード ###model ```java:Yoine.java package model; import java.io.Serializable; public class Yoine implements Serializable { private int yoineCount = 0; public void setYoineCount(int yoineCount) { this.yoineCount = yoineCount; } public int getYoineCount() { return yoineCount; } } ``` ```java:YoineLogic.java package model; public class YoineLogic { public void yoinePlus(Yoine y) { int count = y.getYoineCount(); count++; y.setYoineCount(count); } } ``` ###View ```html:yoineView.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> いいねこ!!!

いいね! いいね!

いいねこ!:${yoine.yoineCount}

``` ###Controller ```java:YoineServlet.java package servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; 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 model.Yoine; import model.YoineLogic; /** * Servlet implementation class YoineServlet */ @WebServlet("/YoineServlet") public class YoineServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public YoineServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 初回起動を判定するための処理 // アプリケーションスコープから値を取得 ServletContext sc = this.getServletContext(); Yoine y = (Yoine) sc.getAttribute("yoine"); // 初回起動判定の続き // アプリケーションスコープに値がなければnewする if(y == null) { y = new Yoine(); sc.setAttribute("yoine", y); } // リクエストパラメーターの取得 request.setCharacterEncoding("UTF-8"); String yoine = request.getParameter("action"); // いいねボタン押されたら if (yoine != null) { // YoineLogicでいいねを加算 YoineLogic yl = new YoineLogic(); yl.yoinePlus(y); // いいねの数をアプリケーションスコープに保存 sc.setAttribute("yoine", y); } // フォワード RequestDispatcher rd = request.getRequestDispatcher("/yoineView.jsp"); rd.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } ```