
๐ ์ด์ ๋ถํฐ ๋บ์ด์น cookie๋ก ๋ง๋ ์๊ณ ์์ ํ๋ก์ ํธ๋ฅผ ํด๊ฒฐํด์ ๊ธฐ๋ถ์ข์ ๊ธฐ๋ ์ผ๋ก ํ๋ฒ ๋ ์ฌ๋ฆฐ๋ค. ์ ์ ๊ฐ๋ฐ ์ค๋ฅ์ ๋ํ ์ต์ํจ์ด ์ฆ๊ฐํ๋์ค.
//ex1) ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์๋
String uid = req.getParameter("uid"); //ํ๋ผ๋ฏธํฐ๊ฐ์ String์ ํ ๋นํด์
Cookie userInfoCookie = new Cookie("userInfo", uid); //์ฟ ํค ๊ฐ ๋ถ๋ถ์ ๋ฃ์ด์ค
-----------------------------------------------------------------------
//ex2) ๋ฐฐ์ด๋ก ๋ฐ์๋
cart = new Cookie("cart", String.join("&", items));
๐ ์ฌ๊ธฐ์ ์ค์ํ์ ์ ์ฟ ํค๋ ํค์ ๊ฐ์ ํํ๋ก ์ง์ด๋ฃ๋๋ฐ, ๋๋ค ๋ฌธ์์ด์ด์ฌ์ผํจ.
๐ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด๋ก ๋ฐ์๋ ๋ด๋ถ์ ๊ฐ์ ๋ฌธ์์ด๋ก ์ด์ด์ง๋๋ก ๋ฐ์์ค์ผํจ.
userInfoCookie.setPath("/"); //์ ํจ๋ฒ์ ์ค์
userInfoCookie.setMaxAge(60 * 60 * 24); //์ ํจ๊ธฐ๊ฐ ์ค์
resp.addCookie(userInfoCookie); // ์ฟ ํค ์ ์ฅ
๐ ์ฟ ํค ์์ฑ ๋ฐ๋ก ๋ฐ์ ํด๋น ์ปจํธ๋กค๋ฌ์์ ์์ฑ๋ ์ฟ ํค๋ฅผ ์ด๋์์๋ ์ฌ์ฉ๊ฐ๋ฅํ์ง ์ค์ ํ๋ setPath, ์ ํจ๋ฒ์๋ฅผ ์ค์ ํ๋ค
๐ ์ฟ ํค๋ฅผ ์์ฑํด๋๋ฉด ๋ช์๊ฐ๋์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง setMaxAge, ์ ํจ๊ธฐ๊ฐ์ ์ค์ ํ๋ค
๐ ์ค์ ํ ์ฟ ํค๋ฅผ addCookie ์ ์ฅํ๋ค.
Cookie cks = CookieUtil.getCookie(req, "userInfo"); //CookieUtil์ ํตํด
//userInfo๋ผ๋ ์ฟ ํค๊ฐ ์๋์ง ํ์ธํ๊ณ ์์ผ๋ฉด cks๋ผ๋ ๋ณ์์ ๋ด๊ธฐ.
String cksvalue = cks.getValue(); //cksvalue๋ผ๋ ๋ฌธ์์ด์ cks์ฟ ํค์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํ
req.setAttribute("cksvalue", cksvalue); //jsp์์ cksvalue๋ผ๋ ์ด๋ฆ์ผ๋ก cksvalue๋ฅผ ์ฌ์ฉ๊ฐ๋ฅ
๐ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ์ปจํธ๋กค๋ฌ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ jsp์์ ํญ์ํ๋ setAttribute๋ฅผ ์ด์ฉํ์ฌ ${cksvalue}๋ฅผ ์ฌ์ฉํ๋ฉด๋จ.
<div>
<c:set var="cartItems" value="${fn:split(cartValue, '&')}" />
<c:forEach items="${cartItems}" var="cart">
<img src="/img/${cart}">${cart}
</c:forEach>
</div>
๐ cartItems๋ผ๋ ์ด๋ฆ์ผ๋ก ์ปจํธ๋กค๋ฌ์์ setAttribute ๋ฅผ ํ์์. &๋ก ์ฎ์ฌ์๋ ๋ฌธ์์ด๋ค์ split์ ํตํด์ ํ์ด์ค
๐ ์ฌ๊ธฐ์ fn์ด ์ฌ์ฉ๋๋๋ฐ fn ์ฌ์ฉํ๋ ค๋ฉด ์๋ ์ฝ๋๋ฅผ ์์์ import๋ฅผ ํด์ค์ผํจ
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
@WebServlet(value="/signin")
@Log4j2
public class SigninController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("signin doGet");
req.getRequestDispatcher("/WEB-INF/signin.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("signin doPost");
String uid = req.getParameter("uid");
// uid๋ผ๋ ํ๋ผ๋ฏธํฐ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
Cookie userInfoCookie = new Cookie("userInfo", uid);
//uid๋ผ๋ ๊ฐ์ userInfo๋ผ๋ ์ด๋ฆ์ผ๋ก cookie๋ฅผ ์์ฑ
userInfoCookie.setPath("/");
//์ด ์ฝ๋๋ /signin์์ ์์ฑ๋ ์ฟ ํค์ด๋ฏ๋ก /signin ๋ฐ ๊ทธ ํ์ ๊ฒฝ๋ก์์๋ง ์ ํจํ๋ฐ
// ํ์ฌ์ฒ๋ผ / ์ด๋ ๊ฒ๋ง ๋์ด์๋ค๋ฉด ์น ์ดํ๋ฆฌ์ผ์ด์
๋ชจ๋ ๊ฒฝ๋ก์์ ์ด ์ฟ ํค๋ฅผ ์ ๊ทผ ํ ์์๋ค.
userInfoCookie.setMaxAge(60 * 60 * 24);
// 1์ผ๋์ ์ฟ ํค๋ฅผ ์์ฑ
resp.addCookie(userInfoCookie);
//์ฟ ํค์ ์ฅ
resp.sendRedirect("/movies");
}
}
@WebServlet(value="/movies")
@Log4j2
public class MoviesController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("movies doGet");
Cookie cks = CookieUtil.getCookie(req, "userInfo"); //userInfo๋ผ๋ cookie์๋์ง ๊ฒ์ฌ
if(cks == null){
log.info("cookies is empty");
resp.sendRedirect("/signin");
return; //userInfo ์์ผ๋ฉด ์ข
๋ฃ
}
ArrayList<String> movies = new ArrayList<>();
movies.add("movie1.jpg");
movies.add("movie2.jpg");
movies.add("movie3.jpg");
movies.add("movie4.jpg");
movies.add("movie5.jpg");
req.setAttribute("movies", movies); movies๋ผ๋ ์ด๋ฆ์ผ๋ก jsp์์ ์ฌ์ฉ๊ฐ๋ฅ.
req.getRequestDispatcher("/WEB-INF/movies.jsp").forward(req, resp);
}
}
@WebServlet("/buy")
@Log4j2
public class BuyController extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("buy doPost");
String[] items = req.getParameterValues("item"); //jsp์ ํ๋ผ๋ฏธํฐ๊ฐ์ ๋ฐฐ์ด๋ก ๋ฐ๊ธฐ
if (items != null && items.length > 0) { //์ฅ๋ฐ๊ตฌ๋์ ๋ด์ item์ด ์๋ค๋ฉด
Cookie cart = CookieUtil.getCookie(req, "cart"); //CookieUtil์ getCookie ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ cart๋ผ๋ ์ฟ ํค๋ฅผ ๊ฐ์ ธ์ด.
// ๊ธฐ์กด์ Cookie๊ฐ ์์์ผ๋๊น cart๋ null๊ฐ์ด ๋ฐํ๋ ๊ฒ์ด๊ณ ์๋์์ null์ผ๋๋ cart์ฟ ํค๋ฅผ ์์ฑํด์ค.
if (cart == null) { //๋ง์ฝ์ ์นดํธ๋ผ๋ ์ฟ ํค๊ฐ ์๋ค๋ฉด
cart = new Cookie("cart", String.join("&", items)); //cart๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฟ ํค๋ฅผ ์์ฑํด์ค, items ๋ฐฐ์ด์ ์์๋ฅผ ๋ฌธ์์ด๋ก ๊ฒฐํฉ์์ผ์ค.
} else {
cart.setValue(cart.getValue() + "&" + String.join("&", items)); //์นดํธ์ฟ ํค๊ฐ ์ด๋ฏธ ์๋ค๋ฉด, ์์ดํ
๋ง ์ถ๊ฐํด์ค๋ค.
//๊ทผ๋ฐ ์ฟ ํค๋ ("๋ฌธ์์ด","๋ฌธ์์ด")์ ํํ๋ก ๋ง๋ค์ด์ค์ผํด์ & ๋ฅผ ํตํด ๋ฌธ์์ด์ ์ด์ด์ค๊ฒ.
}
cart.setPath("/");
//์ด๋ ๊ฒฝ๋ก์์๋ ์ฌ์ฉ๊ฐ๋ฅ.
resp.addCookie(cart);
//์ฟ ํค์ ์ฅ
resp.sendRedirect("/mypage");
}
}
}
@WebServlet(value="/mypage")
@Log4j2
public class MypageController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("mypage doGet");
Cookie cks = CookieUtil.getCookie(req,"userInfo");
// CookieUtil์ ์ด์ฉํด์ userInfo๋ผ๋ ์ฟ ํค๊ฐ ์๋์ง ํ์ธ
// ๋ง์ฝ userInfo ์ฟ ํค๊ฐ ์๋ค๋ฉด cks๋ null๋ก ๋ฐํ๋ ๊ฒ์.
if(cks == null){
log.info("userInfo is null");
resp.sendRedirect("/signin");
return;
// userInfo์ฟ ํค๊ฐ ์๋ค๋ฉด ๋ก๊ทธ์ธํ๋ฉด์ผ๋ก ์ด๋
}
Cookie cart = CookieUtil.getCookie(req,"cart");
// ๋๊ฐ์ด cart์ฟ ํค๊ฐ ์๋์ง ํ์ธํ๊ธฐ
if(cart == null){
log.info("cart is null");
resp.sendRedirect("/movies");
return;
}else{ //๋ง์ฝ cart์ฟ ํค๊ฐ ์๋ค๋ฉด
String cartValue = cart.getValue();
// getValue๋ฉ์๋๋ ์ฟ ํค์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐํ
req.setAttribute("cartValue", cartValue);
// cartValue๋ฅผ cartvalue๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ
}
req.getRequestDispatcher("/WEB-INF/mypage.jsp").forward(req, resp);
}
}
public class CookieUtil {
public static Cookie getCookie(final HttpServletRequest request, final String name) {
Cookie[] cookies = request.getCookies();
//request.getCookies๋ฅผ ํตํด http์ ์์ฒญํ ์ฟ ํค๋ฅผ ์ฟ ํค ๋ฐฐ์ด์ ๋ฃ๊ณ
if (cookies == null || cookies.length == 0) {
//์ฟ ํค๋ฐฐ์ด์ด ์์ผ๋ฉด null๋ก ๋ฐํ
return null;
}
for (Cookie cookie : cookies) {
// Cookie๋ฐฐ์ด๋ด์ cookie๋ฅผ ํ๋์ฉ ๊บผ๋์๋
if (cookie.getName().equals(name)) {
//๋งค๊ฐ๋ณ์๋ก ๋ฃ์๋(์ํ๋ ์ฟ ํค์ด๋ฆ)๊ณผ ๊ฐ๋ค๋ฉด cookie๋ฅผ ๋ฆฌํดํด์ค.
return cookie;
}
}
return null;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>signin Page ์
๋๋ค.</h1>
<form action = "/signin" method="post">
<div>
<label>ID</label>
<input type="text" name="uid">
</div>
<div>
<label>PW</label>
<input type="password" name="upw">
</div>
<button>SIGNIN</button>
</form>
</body>
</html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<style>
.pic{
width: 12rem;
margin : 2rem;
}
</style>
<form action="/buy" method="post">
<ul>
<c:forEach items="${movies}" var="movie">
<li>
<img class="pic" src="/img/${movie}">
<input type="checkbox" name="item" value="${movie}">${movie}
</li>
</c:forEach>
</ul>
<button>๋ด๊ธฐ</button>
</form>
</body>
</html>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>My Page ์ฟ ํค์๋ค?</h1>
<style>
img{
width: 12rem;
}
</style>
<ul>
<div>
<c:set var="cartItems" value="${fn:split(cartValue, '&')}" />
<c:forEach items="${cartItems}" var="cart">
<img src="/img/${cart}">${cart}
</c:forEach>
</div>
</ul>
</body>
</html>
@WebServlet(value="/logout")
@Log4j2
public class LogoutController extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("logout post");
Cookie logoutCookie = CookieUtil.getCookie(req,"signin");
// ๋งจ์ฒ์ signin ์ฟ ํค๊ฐ ์๋์ง ํ์ธ
if(logoutCookie != null) {
logoutCookie.setMaxAge(0);
resp.addCookie(logoutCookie);
log.info("yes logout");
resp.sendRedirect("/movie/signin");
}
}
}
@WebFilter (urlPatterns = {"/movie/movies","/movie/mypage"})
@Log4j2
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
Cookie cks = CookieUtil.getCookie(request,"signin"); //signin ์ฟ ํค๊ฐ ์๋์ง ํ์ธ
if(cks == null || cks.getValue() == null){ //๋ก๊ทธ์ธ ์ฟ ํค๊ฐ ์๋ค๋ฉด ๋ชจ๋ jspํ์ด์ง์์ url๋ก ์ด๋๋ถ๊ฐ๋ฅ
response.sendRedirect("/signin");
log.info("no fisrt cookie");
return;
}
filterChain.doFilter(servletRequest, servletResponse);
}
}
public enum MovieDAO {
INSTANCE;
public Integer register(MovieVO movie) throws Exception {
String sql = "insert into tbl_movies (uid,upw,name) values (?,?,?)";
@Cleanup Connection con = ConnectionUtil.INSTANCE.getDs().getConnection();
@Cleanup PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, movie.getUid());
ps.setString(2, movie.getUpw());
ps.setString(3, movie.getName());
int count = ps.executeUpdate();
if(count != 1){
throw new Exception();
}
Integer mno = movie.getMno();
return mno;
}
}
๐ register์ return๊ฐ์ ๋ช๋ฒ์ด ๋ฑ๋ก๋์์ต๋๋ค. ๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋์ค๊ธฐ์ํด Intger
๐ register์ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ ๊ฐ์ jsp๋ก๊ทธ์ธ์ฐฝ์ ๋ค์ด๊ฐ uid,upw์ด๋ฏ๋ก MovieVO ๋ฐ์ดํฐํ์
์ ์ฌ์ฉํ๊ธฐ
@WebServlet(value="/movie/register")
@Log4j2
public class RegisterController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("register get");
req.getRequestDispatcher("/WEB-INF/movie/register.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
log.info("register post");
String uid = req.getParameter("uid");
String upw = req.getParameter("upw");
String name = req.getParameter("name");
MovieVO movievo = MovieVO.builder()
.uid(uid)
.upw(upw)
.name(name)
.build();
try {
MovieDAO.INSTANCE.register(movievo);
log.info("yes login");
resp.sendRedirect("/movie/signin");
} catch (Exception e) {
resp.sendRedirect("/movie/signin?error=input");
throw new RuntimeException(e);
}
}
}
๐ MovieVO์ฑ๋ก ๋ฃ์ด์ค์ผํ๋๊น builder ์ด์ฉํ๊ธฐ
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>register</h1>
<form action="/movie/register" method="post">
<div>
<label>ID</label>
<input type="text" name="uid">
</div>
<div>
<label>PW</label>
<input type="password" name="upw">
</div>
<div>
<label>NAME</label>
<input type="text" name="name">
</div>
<button>Register</button>
</form>
</body>
</html>