## Files List ### pom.xml ``` 4.0.0 com.in28minutes in28Minutes-first-webapp 0.0.1-SNAPSHOT war javax javaee-web-api 6.0 provided javax.servlet jstl 1.2 org.webjars bootstrap 3.3.6 org.webjars jquery 1.9.1 org.apache.maven.plugins maven-compiler-plugin 3.2 true 1.7 1.7 true org.apache.tomcat.maven tomcat7-maven-plugin 2.2 / true ``` ### src/main/java/com/in28minutes/filter/LoginRequiredFilter.java ``` package com.in28minutes.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; @WebFilter(urlPatterns = "*.do") public class LoginRequiredFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; if (request.getSession().getAttribute("name") != null) { chain.doFilter(servletRequest, servletResponse); } else { request.getRequestDispatcher("/login.do").forward(servletRequest, servletResponse); } } @Override public void init(FilterConfig arg0) throws ServletException { } } ``` ### src/main/java/com/in28minutes/login/LoginService.java ``` package com.in28minutes.login; public class LoginService { public boolean isUserValid(String user, String password) { if (user.equals("in28Minutes") && password.equals("dummy")) return true; return false; } } ``` ### src/main/java/com/in28minutes/login/LoginServlet.java ``` package com.in28minutes.login; import java.io.IOException; 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 com.in28minutes.todo.TodoService; @WebServlet(urlPatterns = "/login.do") public class LoginServlet extends HttpServlet { private LoginService userValidationService = new LoginService(); private TodoService todoService = new TodoService(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward( request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String password = request.getParameter("password"); boolean isUserValid = userValidationService.isUserValid(name, password); if (isUserValid) { request.getSession().setAttribute("name", name); response.sendRedirect("/list-todos.do"); } else { request.setAttribute("errorMessage", "Invalid Credentials!"); request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward( request, response); } } } ``` ### src/main/java/com/in28minutes/logout/LogoutServlet.java ``` package com.in28minutes.logout; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns = "/logout.do") public class LogoutServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getSession().invalidate(); request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward( request, response); } } ``` ### src/main/java/com/in28minutes/todo/AddTodoServlet.java ``` package com.in28minutes.todo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns = "/add-todo.do") public class AddTodoServlet extends HttpServlet { private TodoService todoService = new TodoService(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/views/add-todo.jsp").forward( request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String newTodo = request.getParameter("todo"); String category = request.getParameter("category"); todoService.addTodo(new Todo(newTodo, category)); response.sendRedirect("/list-todos.do"); } } ``` ### src/main/java/com/in28minutes/todo/DeleteTodoServlet.java ``` package com.in28minutes.todo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns = "/delete-todo.do") public class DeleteTodoServlet extends HttpServlet { private TodoService todoService = new TodoService(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { todoService.deleteTodo(new Todo(request.getParameter("todo"), request .getParameter("category"))); response.sendRedirect("/list-todos.do"); } } ``` ### src/main/java/com/in28minutes/todo/ListTodoServlet.java ``` package com.in28minutes.todo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns = "/list-todos.do") public class ListTodoServlet extends HttpServlet { private TodoService todoService = new TodoService(); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("todos", todoService.retrieveTodos()); request.getRequestDispatcher("/WEB-INF/views/list-todos.jsp").forward( request, response); } } ``` ### src/main/java/com/in28minutes/todo/Todo.java ``` package com.in28minutes.todo; public class Todo { private String name; private String category; public Todo(String name, String category) { super(); this.name = name; this.category = category; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } @Override public String toString() { return String.format("Todo [name=%s, category=%s]", name, category); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Todo other = (Todo) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } ``` ### src/main/java/com/in28minutes/todo/TodoService.java ``` package com.in28minutes.todo; import java.util.ArrayList; import java.util.List; public class TodoService { private static List todos = new ArrayList(); static { todos.add(new Todo("Learn Web Application Development", "Study")); todos.add(new Todo("Learn Spring MVC", "Study")); todos.add(new Todo("Learn Spring Rest Services", "Study")); } public List retrieveTodos() { return todos; } public void addTodo(Todo todo) { todos.add(todo); } public void deleteTodo(Todo todo) { todos.remove(todo); } } ``` ### src/main/webapp/WEB-INF/common/footer.jspf ```
footer content
``` ### src/main/webapp/WEB-INF/common/header.jspf ``` <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Todos ``` ### src/main/webapp/WEB-INF/common/navigation.jspf ``` ``` ### src/main/webapp/WEB-INF/views/add-todo.jsp ``` <%@ include file="../common/header.jspf"%> <%@ include file="../common/navigation.jspf"%>
Your New Action Item:


<%@ include file="../common/footer.jspf"%> ``` ### src/main/webapp/WEB-INF/views/list-todos.jsp ``` <%@ include file="../common/header.jspf"%> <%@ include file="../common/navigation.jspf"%>

Welcome ${name}

Your Todos are
Description Category Actions
${todo.name} ${todo.category}   Delete

${errorMessage}

Add New Todo
<%@ include file="../common/footer.jspf"%> ``` ### src/main/webapp/WEB-INF/views/login.jsp ``` <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Todos

${errorMessage}

Name: Password:
footer content
``` ### src/main/webapp/WEB-INF/web.xml ``` To do List login.do ```