Skip to content

Instantly share code, notes, and snippets.

@igm
Created February 28, 2012 11:46
Show Gist options
  • Save igm/1932085 to your computer and use it in GitHub Desktop.
Save igm/1932085 to your computer and use it in GitHub Desktop.
JSP page
<%@page import="ie.cit.cloudapp.Todo"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="repo" class="ie.cit.cloudapp.TodoRepository"
scope="session"></jsp:useBean>
<html>
<head>
<link rel="stylesheet" href="styles/style.css">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>TODO application</title>
</head>
<body>
<h1>TODO application</h1>
<h2>List of current TODO items</h2>
<c:if test="${ param._method.equals(\"put\") }">
<%
String idStr = request.getParameter("todoId");
int index = Integer.parseInt(idStr);
Todo t = repo.getTodos().get(index - 1);
t.setDone(!t.isDone());
%>
</c:if>
<c:if test="${ param._method.equals(\"delete\") }">
<%
String idStr = request.getParameter("todoId");
int index = Integer.parseInt(idStr);
repo.getTodos().remove(index - 1);
%>
</c:if>
<c:if test="${! empty param.text }">
<%
Todo todo = new Todo();
todo.setText(request.getParameter("text"));
repo.addTodo(todo);
%>
</c:if>
<c:forEach items="${repo.todos}" var="todo" varStatus="row">
<c:choose>
<c:when test="${todo.done}">
<del>${todo.text}</del>
</c:when>
<c:otherwise>
${todo.text}
</c:otherwise>
</c:choose>
<form method="post">
<input name="_method" type="hidden" value="put">
<input name="todoId" type="hidden" value="${row.count}">
<input type="submit" value="Update">
</form>
<form method="post">
<input name="_method" type="hidden" value="delete">
<input name="todoId" type="hidden" value="${row.count}">
<input type="submit" value="Delete">
</form>
<br />
</c:forEach>
<h2>Create new TODO</h2>
<form method="post">
Text: <input name="text"><input type="submit">
</form>
</body>
</html>
package ie.cit.cloudapp;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class TodoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
TodoRepository repo = getRepo(req);
req.setAttribute("todos", repo.getTodos());
doForward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String method = req.getParameter("_method");
if (method != null && method.equals("put"))
doPut(req, resp);
else if (method != null && method.equals("delete"))
doDelete(req, resp);
else {
TodoRepository repo = getRepo(req);
Todo todo = new Todo();
todo.setText(req.getParameter("text"));
repo.addTodo(todo);
req.setAttribute("todos", repo.getTodos());
doForward(req, resp);
}
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Integer index = Integer.valueOf(req.getParameter("todoId"));
TodoRepository repo = getRepo(req);
Todo todo = repo.getTodos().get(index - 1);
todo.setDone(!todo.isDone());
req.setAttribute("todos", repo.getTodos());
doForward(req, resp);
}
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Integer index = Integer.valueOf(req.getParameter("todoId"));
TodoRepository repo = getRepo(req);
repo.getTodos().remove(index - 1);
req.setAttribute("todos", repo.getTodos());
doForward(req, resp);
}
private TodoRepository getRepo(HttpServletRequest req) {
HttpSession session = req.getSession(true);
TodoRepository repo = (TodoRepository) session.getAttribute("repo");
if (repo == null) {
repo = new TodoRepository();
session.setAttribute("repo", repo);
}
return repo;
}
private void doForward(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher rd = getServletContext().getRequestDispatcher(
"/todo_list.jsp");
rd.forward(req, resp);
}
}
package ie.cit.cloudapp;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class TodoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
if (req.getParameter("_method") != null)
req = new HttpServletRequestWrapper(req) {
@Override
public String getMethod() {
return getParameter("_method").toUpperCase();
}
};
super.service(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
TodoRepository repo = getRepo(req);
req.setAttribute("todos", repo.getTodos());
doForward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
TodoRepository repo = getRepo(req);
Todo todo = new Todo();
todo.setText(req.getParameter("text"));
repo.addTodo(todo);
req.setAttribute("todos", repo.getTodos());
doForward(req, resp);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Integer index = Integer.valueOf(req.getParameter("todoId"));
TodoRepository repo = getRepo(req);
Todo todo = repo.getTodos().get(index - 1);
todo.setDone(!todo.isDone());
req.setAttribute("todos", repo.getTodos());
doForward(req, resp);
}
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Integer index = Integer.valueOf(req.getParameter("todoId"));
TodoRepository repo = getRepo(req);
repo.getTodos().remove(index - 1);
req.setAttribute("todos", repo.getTodos());
doForward(req, resp);
}
private TodoRepository getRepo(HttpServletRequest req) {
HttpSession session = req.getSession(true);
TodoRepository repo = (TodoRepository) session.getAttribute("repo");
if (repo == null) {
repo = new TodoRepository();
session.setAttribute("repo", repo);
}
return repo;
}
private void doForward(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher rd = getServletContext().getRequestDispatcher(
"/todo_list.jsp");
rd.forward(req, resp);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment