#22 mvc: create user

This commit is contained in:
haerong22
2022-10-11 01:27:34 +09:00
parent 6744d9ab7a
commit 1c0ea3230e
8 changed files with 122 additions and 4 deletions

View File

@@ -12,7 +12,8 @@ public class RequestMappingHandlerMapping {
void init() {
mappings.put(new HandlerKey(RequestMethod.GET, "/"), new HomeController());
mappings.put(new HandlerKey(RequestMethod.GET, "/users"), new UserListController());
mappings.put(new HandlerKey(RequestMethod.POST, "/users"), new UserListController());
mappings.put(new HandlerKey(RequestMethod.POST, "/users"), new UserCreateController());
mappings.put(new HandlerKey(RequestMethod.GET, "/user/form"), new ForwardController("/user/form"));
}
public Controller findHandler(HandlerKey handlerKey) {

View File

@@ -0,0 +1,17 @@
package org.example.mvc.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ForwardController implements Controller {
private final String forwardUriPath;
public ForwardController(String forwardUriPath) {
this.forwardUriPath = forwardUriPath;
}
@Override
public String handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return forwardUriPath;
}
}

View File

@@ -0,0 +1,16 @@
package org.example.mvc.controller;
import org.example.mvc.model.User;
import org.example.mvc.repository.UserRepository;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserCreateController implements Controller {
@Override
public String handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// user 추가
UserRepository.save(new User(request.getParameter("userId"), request.getParameter("name")));
return "redirect:/users";
}
}

View File

@@ -1,13 +1,14 @@
package org.example.mvc.controller;
import org.example.mvc.repository.UserRepository;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public class UserListController implements Controller {
@Override
public String handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setAttribute("users", List.of());
return "/user/list.jsp";
request.setAttribute("users", UserRepository.findAll());
return "/user/list";
}
}

View File

@@ -0,0 +1,19 @@
package org.example.mvc.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
private static final String DEFAULT_CHARACTER_ENCODING = "UTF-8";
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(DEFAULT_CHARACTER_ENCODING);
response.setCharacterEncoding(DEFAULT_CHARACTER_ENCODING);
chain.doFilter(request, response);
}
}

View File

@@ -0,0 +1,20 @@
package org.example.mvc.model;
public class User {
private final String userId;
private final String name;
public User(String userId, String name) {
this.userId = userId;
this.name = name;
}
public String getUserId() {
return this.userId;
}
public String getName() {
return name;
}
}

View File

@@ -0,0 +1,21 @@
package org.example.mvc.repository;
import org.example.mvc.model.User;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserRepository {
private final static Map<String, User> users = new HashMap<>();
public static void save(User user) {
users.put(user.getUserId(), user);
}
public static Collection<User> findAll() {
return users.values();
}
}

View File

@@ -0,0 +1,23 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="kr">
<head>
<meta charset="UTF-8">
<title>form</title>
</head>
<body>
<form method="post" action="/users">
<div>
<label for="userId">사용자 아이디</label>
<input class="form-control" id="userId" name="userId" placeholder="User ID">
</div>
<div>
<label for="name">이름</label>
<input class="form-control" id="name" name="name" placeholder="Name">
</div>
<button type="submit">회원가입</button>
</form>
</body>
</html>