Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3주차 미션 / 서버 1조 이윤정 #25

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/main/java/core/mvc/Controller.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package core.mvc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Controller {
static final String REDIRECT = "redirect:";
String execute(HttpServletRequest req, HttpServletResponse resp);
}
42 changes: 42 additions & 0 deletions src/main/java/core/mvc/DispatcherServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package core.mvc;

import javax.servlet.RequestDispatcher;
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 static core.mvc.Controller.REDIRECT;

@WebServlet(name="dispatcher", urlPatterns="/", loadOnStartup=1)
public class DispatcherServlet extends HttpServlet {
private RequestMapper requestMapper;

@Override
public void init() throws ServletException {
this.requestMapper = new RequestMapper();
}

@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Controller controller = requestMapper.getController(req);
try {
String viewName = controller.execute(req, resp);
move(viewName, req, resp);
} catch (Throwable e) {
throw new ServletException(e.getMessage());
}
}

private void move(String viewName, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if (viewName.startsWith(REDIRECT)) {
resp.sendRedirect(viewName.substring(REDIRECT.length()));
return;
}

RequestDispatcher rd = req.getRequestDispatcher(viewName);
rd.forward(req, resp);
}
}
19 changes: 19 additions & 0 deletions src/main/java/core/mvc/ForwardController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package core.mvc;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ForwardController implements Controller {
private String forwardUrl;

public ForwardController(String forwardUrl) {
this.forwardUrl = forwardUrl;
if (forwardUrl == null) {
throw new NullPointerException("forwardUrl is null. 이동할 URL을 입력하세요.");
}
}
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp){
return forwardUrl;
}
}
40 changes: 40 additions & 0 deletions src/main/java/core/mvc/RequestMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package core.mvc;

import jwp.controller.*;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

public class RequestMapper {
private Map<String , Controller> controllers = new HashMap<>();

public RequestMapper() {
initControllers();
}

private void initControllers() {
controllers.put("/", new HomeController());

controllers.put("/user/form", new ForwardController("/user/form.jsp"));
controllers.put("/user/loginForm", new ForwardController("/user/login.jsp"));
controllers.put("/user/loginFailed", new ForwardController("/user/login_failed.jsp"));
controllers.put("/qna/form", new ForwardController("/qna/form.jsp"));
controllers.put("/qna/show", new ForwardController("/qna/show.jsp"));


controllers.put("/user/userList", new ListUserController());

controllers.put("/user/login", new LoginController());
controllers.put("/user/logout", new LogoutController());

controllers.put("/user/signup", new CreateUserController());

controllers.put("/user/updateForm", new UpdateUserFormController());
controllers.put("/user/update", new UpdateUserController());
}

public Controller getController(HttpServletRequest request) {
return controllers.get(request.getRequestURI());
}
}
14 changes: 9 additions & 5 deletions src/main/java/jwp/controller/CreateUserController.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,29 @@

import core.db.MemoryUserRepository;

import core.mvc.Controller;
import jwp.model.User;
import jwp.util.UserSessionUtils;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/user/signup")
public class CreateUserController extends HttpServlet {
public class CreateUserController implements Controller {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
public String execute(HttpServletRequest req, HttpServletResponse resp) {
User user = new User(req.getParameter("userId"),
req.getParameter("password"),
req.getParameter("name"),
req.getParameter("email"));

MemoryUserRepository.getInstance().addUser(user);

resp.sendRedirect("/user/userList");
HttpSession session = req.getSession();
UserSessionUtils.login(session, user);
return REDIRECT+"/";
}
}
12 changes: 12 additions & 0 deletions src/main/java/jwp/controller/HomeController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package jwp.controller;

import core.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HomeController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) {
return "/home.jsp";
}
}
15 changes: 9 additions & 6 deletions src/main/java/jwp/controller/ListUserController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package jwp.controller;

import core.db.MemoryUserRepository;
import core.mvc.Controller;
import jwp.util.UserSessionUtils;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
Expand All @@ -10,12 +12,13 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/user/userList")
public class ListUserController extends HttpServlet {
public class ListUserController implements Controller {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("users", MemoryUserRepository.getInstance().findAll());
RequestDispatcher rd = req.getRequestDispatcher("/user/list.jsp");
rd.forward(req,resp);
public String execute(HttpServletRequest req, HttpServletResponse resp) {
if(UserSessionUtils.isLogined(req.getSession())){
req.setAttribute("users", MemoryUserRepository.getInstance().findAll());
return "/user/list.jsp";
}
return REDIRECT + "/user/login";
}
}
29 changes: 29 additions & 0 deletions src/main/java/jwp/controller/LoginController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package jwp.controller;

import core.db.MemoryUserRepository;
import core.mvc.Controller;
import jwp.model.User;
import jwp.util.UserSessionUtils;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

public class LoginController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) {
HttpSession session = req.getSession();
String userId = req.getParameter("userId");
String password = req.getParameter("password");
User user = MemoryUserRepository.getInstance().findUserById(userId);
if (user != null && user.matchPassword(password)) {
UserSessionUtils.login(session, user);
return REDIRECT + "/";
}
return REDIRECT + "/user/loginFailed";
}
}
20 changes: 20 additions & 0 deletions src/main/java/jwp/controller/LogoutController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package jwp.controller;

import core.mvc.Controller;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

public class LogoutController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) {
HttpSession session = req.getSession();
session.removeAttribute("user");
return REDIRECT + "/";
}
}
20 changes: 20 additions & 0 deletions src/main/java/jwp/controller/UpdateUserController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package jwp.controller;

import core.db.MemoryUserRepository;
import core.mvc.Controller;
import jwp.model.User;

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;
public class UpdateUserController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) {
User user = new User(req.getParameter("userId"), req.getParameter("password"), req.getParameter("name"), req.getParameter("email"));
MemoryUserRepository.getInstance().changeUserInfo(user);
return REDIRECT + "/user/userList";
}
}
28 changes: 28 additions & 0 deletions src/main/java/jwp/controller/UpdateUserFormController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package jwp.controller;

import core.db.MemoryUserRepository;

import core.mvc.Controller;
import jwp.model.User;

import javax.servlet.RequestDispatcher;
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;

public class UpdateUserFormController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) {
String userId = req.getParameter("userId");
User user = MemoryUserRepository.getInstance().findUserById(userId);
if (user != null) {
req.setAttribute("user", user);
return "/user/updateForm.jsp";
}
return REDIRECT + "/";
}

}
22 changes: 22 additions & 0 deletions src/main/java/jwp/util/UserSessionUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package jwp.util;

import jwp.model.User;

import javax.servlet.http.HttpSession;

public class UserSessionUtils {
public static final String USER_SESSION_KEY = "user";
public static User getUserFromSession(HttpSession session) {
Object user = session.getAttribute(USER_SESSION_KEY);
if (user == null) return null;
return (User) user;
}

public static boolean isLogined(HttpSession session) {
return getUserFromSession(session) != null;
}

public static void login(HttpSession session, User user) {
session.setAttribute("user", user);
}
}
76 changes: 76 additions & 0 deletions webapp/home.jsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!doctype html>
<html lang="ko">
<%@ include file="include/header.jspf"%>
<body>
<%@ include file="include/navigation.jspf" %>
<div class="container" id="main">
<h2>Q&A</h2>
<div class="qna-list">
<ul class="list">
<li>
<div class="wrap">
<div class="main">
<strong class="subject">
<a href="qna/show"> 객체지향에서 가장 중요하다고 생각하는 것이 무엇인가요? </a>
</strong>
<div class="auth-info">
<i class="icon-add-comment"></i>
<span class="time">2024-03-24 02:10</span>
<span clas="author">강지윤</span>
</div>
<div class="reply" title="댓글">
<i class="icon-reply"></i>
<span class="point">12</span>
</div>
</div>
</div>
</li>
<li>
<div class="wrap">
<div class="main">
<strong class="subject">
<a href="qna/show"> 동아리에 시간 얼마나 투자할 수 있는지? </a>
</strong>
<div class="auth-info">
<i class="icon-add-comment"></i>
<span class="time">2024-03-24 02:13</span>
<span class="author">강지윤</span>
</div>
<div class="reply" title="댓글">
<i class="icon-reply"></i>
<span class="point">8</span>
</div>
</div>
</div>
</li>
</ul>
<div class="row">
<div class="col-md-5"></div>
<div class="col-md-5">
<ul class="pagination" style="display:align-items-center;">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1" aria-disabled="true">Previous</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active" aria-current="page">
<a class="page-link" href="#">2</a>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</div>
<div class="col-md-2 qna-write">
<a href="qna/form" class="btn btn-primary pull-right" role="button">질문하기</a>
</div>
</div>
</div>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
<script src="js/scripts.js"></script>
</body>
</html>
Loading