package ru.geekbrains.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.geekbrains.persist.ToDo;
import ru.geekbrains.persist.ToDoRepository;
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 java.io.IOException;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.format.DateTimeParseException;
import static ru.geekbrains.listner.ContextListener.TODO_REPO;
@WebServlet(name = "ToDoServlet", urlPatterns = {"", "/"})
public class ToDoServlet extends HttpServlet {
private static final Logger logger = LoggerFactory.getLogger(ToDoServlet.class);
private ToDoRepository repository;
@Override
public void init() throws ServletException {
this.repository = (ToDoRepository) getServletContext().getAttribute(TODO_REPO);
if (this.repository == null) {
throw new ServletException("TodoRepository is not initialized");
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("PathInfo: {}", req.getPathInfo());
logger.info("ServletPath: {}", req.getServletPath());
logger.info("ResourceURL: {}", getServletContext().getResource("/WEB-INF/templates/index.jsp"));
if (req.getServletPath().equals("/")) {
showAllTodos(req, resp);
} else if (req.getServletPath().equals("/new")) {
showNewTodoPage(req, resp);
} else if (req.getServletPath().equals("/edit")) {
showEditTodoPage(req, resp);
} else if (req.getServletPath().equals("/delete")) {
deleteTodo(req, resp);
} else {
resp.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("Date {}", req.getParameter("targetDate"));
if (req.getServletPath().equals("/update")) {
updateTodo(req, resp);
} else if (req.getServletPath().equals("/create")) {
createTodo(req, resp);
} else {
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
}
}
private void showAllTodos(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
try {
req.setAttribute("todos", repository.findAll());
} catch (SQLException ex) {
logger.error("", ex);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}
getServletContext().getRequestDispatcher("/WEB-INF/templates/index.jsp").forward(req, resp);
}
private void showNewTodoPage(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
req.setAttribute("todo", new ToDo());
req.setAttribute("action", "create");
getServletContext().getRequestDispatcher("/WEB-INF/templates/todo.jsp").forward(req, resp);
}
private void showEditTodoPage(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
long id;
try {
id = Long.parseLong(req.getParameter("id"));
} catch (Exception ex) {
logger.error("", ex);
resp.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
ToDo toDo;
try {
toDo = repository.findById(id);
} catch (SQLException ex) {
logger.error("", ex);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}
req.setAttribute("todo", toDo);
req.setAttribute("action", "update");
getServletContext().getRequestDispatcher("/WEB-INF/templates/todo.jsp").forward(req, resp);
}
private void deleteTodo(HttpServletRequest req, HttpServletResponse resp) throws IOException {
long id;
try {
id = Long.parseLong(req.getParameter("id"));
} catch (Exception ex) {
logger.error("", ex);
resp.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.getMessage());
return;
}
try {
repository.delete(id);
resp.sendRedirect(getServletContext().getContextPath() + "/todos");
} catch (SQLException ex) {
logger.error("", ex);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
private void updateTodo(HttpServletRequest req, HttpServletResponse resp) throws IOException {
try {
repository.update(new ToDo(
Long.parseLong(req.getParameter("id")),
req.getParameter("description"),
LocalDate.parse(req.getParameter("targetDate"))));
resp.sendRedirect(getServletContext().getContextPath());
} catch (SQLException ex) {
logger.error("", ex);
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} catch (NumberFormatException|DateTimeParseException ex) {
logger.error("", ex);
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
}
private void createTodo(HttpServletRequest req, HttpServletResponse resp) throws IOException {
try {
repository.insert(new ToDo(
-1L,
req.getParameter("description"),
LocalDate.parse(req.getParameter("targetDate"))));
resp.sendRedirect(getServletContext().getContextPath());
} catch (SQLException ex) {
logger.error("", ex);
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} catch (NumberFormatException|DateTimeParseException ex) {
logger.error("", ex);
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
JavaEE lessons for Geekbrains.zip (53个子文件)
145
pom.xml 588B
todo-jsf
datasource.cli 568B
pom.xml 5KB
src
main
resources
META-INF
persistence.xml 1KB
java
ru
geekbrains
controller
ToDoBean.java 2KB
persist
ToDo.java 996B
ToDoRepository.java 1KB
webapp
WEB-INF
web.xml 2KB
error.jsp 504B
todo.xhtml 3KB
index.xhtml 4KB
todo-jsf.iml 4KB
mysql-module.cli 654B
java-ee-lessons.iml 635B
.idea
$PRODUCT_WORKSPACE_FILE$ 2KB
$CACHE_FILE$ 465B
artifacts
jpa_examples_war.xml 488B
jpa_examples_war_exploded.xml 905B
todo_jsf_war_exploded.xml 1KB
todo_jsf_war.xml 455B
vcs.xml 167B
misc.xml 709B
inspectionProfiles
Project_Default.xml 155B
compiler.xml 881B
modules.xml 597B
encodings.xml 305B
html-templates
todo.html 3KB
index.html 3KB
todo
pom.xml 4KB
src
main
java
ru
geekbrains
controller
ToDoServlet.java 6KB
listner
ContextListener.java 2KB
persist
ToDo.java 834B
ToDoRepository.java 3KB
webapp
WEB-INF
web.xml 1KB
error.jsp 504B
templates
index.jsp 2KB
footer_scripts.jsp 787B
header.jsp 754B
head.jsp 607B
todo.jsp 1KB
static.html 25B
todo.iml 2KB
webapp
pom.xml 3KB
src
main
java
ru
geekbrains
servlet
RedirectServlet.java 578B
ForwardServlet.java 615B
FirstHttpServlet.java 1KB
FirstServlet.java 1KB
filter
FirstFilter.java 763B
listener
ContextListener.java 1KB
webapp
WEB-INF
web.xml 1KB
index.jsp 52B
webapp.iml 2KB
.gitignore 2KB
共 53 条
- 1
资源评论
zero2100
- 粉丝: 160
- 资源: 2417
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功