diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/CookieReader.java b/javax-servlets/src/main/java/com/baeldung/servlets/CookieReader.java new file mode 100644 index 0000000000..c2d875a69f --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/CookieReader.java @@ -0,0 +1,39 @@ +package com.baeldung.servlets; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; + +/** + * Created by adam. + * + * Class which simplifies reading cookies from request. + */ +public class CookieReader { + + private HttpServletRequest request; + + /** + * The constructor. + * + * @param request request from which cookies will be read + */ + public CookieReader(HttpServletRequest request) { + this.request = request; + } + + /** + * Reads cookie by key from request. + * + * @param key the key of a cookie + * @return returns cookie value (or null if cookie with given key does not exist) + */ + public String readCookie(String key) { + return Arrays.stream(request.getCookies()) + .filter(c -> key.equals(c.getName())) + .map(Cookie::getValue) + .findFirst() + .orElse(null); + } + +} diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/LoginServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/LoginServlet.java new file mode 100644 index 0000000000..deb0e05ec4 --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/LoginServlet.java @@ -0,0 +1,48 @@ +package com.baeldung.servlets; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.*; +import java.io.IOException; + +/** + * Created by adam. + */ +@WebServlet(name = "LoginServlet", urlPatterns = "/login") +public class LoginServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + CookieReader cookieReader = new CookieReader(request); + String uiColor = cookieReader.readCookie("uiColor"); + String userName = cookieReader.readCookie("userName"); + + request.setAttribute("uiColor", uiColor != null ? uiColor : "blue"); + + if (userName == null || userName.isEmpty()) { + RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/login.jsp"); + dispatcher.forward(request, response); + } else { + response.sendRedirect("/welcome"); + } + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + HttpSession session = request.getSession(); + session.setAttribute("sampleKey", "Sample Value"); + + String uiColor = request.getParameter("color"); + String userName = request.getParameter("name"); + + Cookie uiColorCookie = new Cookie("uiColor", uiColor); + response.addCookie(uiColorCookie); + + Cookie userNameCookie = new Cookie("userName", userName); + response.addCookie(userNameCookie); + + response.sendRedirect("/welcome"); + } + +} diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/WelcomeServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/WelcomeServlet.java new file mode 100644 index 0000000000..b35be2fc93 --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/WelcomeServlet.java @@ -0,0 +1,45 @@ +package com.baeldung.servlets; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Created by adam. + */ +@WebServlet(name = "WelcomeServlet", urlPatterns = "/welcome") +public class WelcomeServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + CookieReader cookieReader = new CookieReader(request); + String uiColor = cookieReader.readCookie("uiColor"); + String userName = cookieReader.readCookie("userName"); + + if (userName == null || userName.isEmpty()) { + response.sendRedirect("/login"); + } else { + request.setAttribute("uiColor", uiColor != null ? uiColor : "blue"); + request.setAttribute("userName", userName); + request.setAttribute("sessionAttribute", request.getSession().getAttribute("sampleKey")); + + RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/welcome.jsp"); + dispatcher.forward(request, response); + } + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + Cookie userNameCookieRemove = new Cookie("userName", ""); + userNameCookieRemove.setMaxAge(0); + response.addCookie(userNameCookieRemove); + + response.sendRedirect("/login"); + } + +} diff --git a/javax-servlets/src/main/webapp/WEB-INF/jsp/login.jsp b/javax-servlets/src/main/webapp/WEB-INF/jsp/login.jsp new file mode 100644 index 0000000000..49babaadad --- /dev/null +++ b/javax-servlets/src/main/webapp/WEB-INF/jsp/login.jsp @@ -0,0 +1,17 @@ +<%@ page contentType="text/html;charset=UTF-8"%> + +
+