Skip to content
Draft
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
11 changes: 5 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<org.springframework.version>4.2.5.RELEASE</org.springframework.version>
<tomcat.version>8.0.15</tomcat.version>
</properties>

<dependencies>
Expand Down Expand Up @@ -39,7 +38,7 @@
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
<version>29.0-jre</version>
</dependency>

<dependency>
Expand Down Expand Up @@ -83,27 +82,27 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.4</version>
<version>2.11.0</version>
</dependency>


<!-- tomcat -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
<version>8.5.57</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
<version>8.0.30</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
<version>8.5.57</version>
<scope>provided</scope>
</dependency>
</dependencies>
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/core/jdbc/DataAccessException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package core.jdbc;

public class DataAccessException extends RuntimeException {
private static final long serialVersionUID = 1L;

public DataAccessException() {
super();
}

public DataAccessException(final String message, final Throwable cause, final boolean enableSuppression, final boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}

public DataAccessException(final String message, final Throwable cause) {
super(message, cause);
}

public DataAccessException(final String message) {
super(message);
}

public DataAccessException(final Throwable cause) {
super(cause);
}
}
68 changes: 68 additions & 0 deletions src/main/java/core/jdbc/JdbcTemplate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package core.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class JdbcTemplate {

public void update(String sql, PreparedStatementSetter pss) throws DataAccessException {
try (Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)) {
pss.setValues(pstmt);
pstmt.executeUpdate();
} catch (SQLException e) {
throw new DataAccessException(e);
}
}

public void update(String sql, Object... parameters) throws DataAccessException {
try (Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)) {
for (int i = 0; i < parameters.length; i++) {
pstmt.setObject(i + 1, parameters[i]);
}
pstmt.executeUpdate();
} catch (SQLException e) {
throw new DataAccessException(e);
}
}

public <T> List<T> query(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper) throws SQLException {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(sql);
pss.setValues(pstmt);
rs = pstmt.executeQuery();
List<T> result = new ArrayList<T>();
while (rs.next()) {
result.add(rowMapper.mapRow(rs));
}
return result;
} finally {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (con != null) {
con.close();
}
}
}

public <T> T queryForObject(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper) throws SQLException {
List<T> result = query(sql, pss, rowMapper);
if (result.isEmpty()) {
return null;
}
return result.get(0);
}
}
12 changes: 12 additions & 0 deletions src/main/java/core/jdbc/PreparedStatementSetter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package core.jdbc;

import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
* callback interface
*/
public interface PreparedStatementSetter {

void setValues(final PreparedStatement pstmt) throws SQLException;
}
13 changes: 13 additions & 0 deletions src/main/java/core/jdbc/RowMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package core.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;

/**
* callback interface
*/
@FunctionalInterface
public interface RowMapper<T> {

T mapRow(final ResultSet rs) throws SQLException;
}
21 changes: 13 additions & 8 deletions src/main/java/next/controller/CreateUserController.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package next.controller;

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

import core.jdbc.DataAccessException;
import core.mvc.Controller;
import next.dao.UserDao;
import next.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import core.db.DataBase;
import core.mvc.Controller;
import next.model.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CreateUserController implements Controller {
private static final Logger log = LoggerFactory.getLogger(CreateUserController.class);
Expand All @@ -17,9 +17,14 @@ public class CreateUserController implements Controller {
public String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
User user = new User(req.getParameter("userId"), req.getParameter("password"), req.getParameter("name"),
req.getParameter("email"));
log.debug("User : {}", user);

DataBase.addUser(user);
UserDao userDao = new UserDao();
try {
userDao.insert(user);
} catch (DataAccessException e) {
log.error(e.getMessage());
}

return "redirect:/";
}
}
9 changes: 5 additions & 4 deletions src/main/java/next/controller/HomeController.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package next.controller;

import core.mvc.Controller;
import next.dao.UserDao;

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

import core.db.DataBase;
import core.mvc.Controller;

public class HomeController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
req.setAttribute("users", DataBase.findAll());
UserDao userDao = new UserDao();
req.setAttribute("users", userDao.findAll());
return "home.jsp";
}
}
9 changes: 5 additions & 4 deletions src/main/java/next/controller/ListUserController.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package next.controller;

import core.mvc.Controller;
import next.dao.UserDao;

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

import core.db.DataBase;
import core.mvc.Controller;

public class ListUserController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
if (!UserSessionUtils.isLogined(req.getSession())) {
return "redirect:/users/loginForm";
}

req.setAttribute("users", DataBase.findAll());
UserDao userDao = new UserDao();
req.setAttribute("users", userDao.findAll());
return "/user/list.jsp";
}
}
11 changes: 6 additions & 5 deletions src/main/java/next/controller/LoginController.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
package next.controller;

import core.mvc.Controller;
import next.dao.UserDao;
import next.model.User;

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

import core.db.DataBase;
import core.mvc.Controller;
import next.model.User;

public class LoginController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
String userId = req.getParameter("userId");
String password = req.getParameter("password");
User user = DataBase.findUserById(userId);
UserDao userDao = new UserDao();
User user = userDao.findByUserId(userId);
if (user == null) {
req.setAttribute("loginFailed", true);
return "/user/login.jsp";
Expand Down
11 changes: 6 additions & 5 deletions src/main/java/next/controller/ProfileController.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package next.controller;

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

import core.db.DataBase;
import core.mvc.Controller;
import next.dao.UserDao;
import next.model.User;

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

public class ProfileController implements Controller {
@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
String userId = req.getParameter("userId");
User user = DataBase.findUserById(userId);
UserDao userDao = new UserDao();
User user = userDao.findByUserId(userId);
if (user == null) {
throw new NullPointerException("사용자를 찾을 수 없습니다.");
}
Expand Down
11 changes: 6 additions & 5 deletions src/main/java/next/controller/UpdateFormUserController.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
package next.controller;

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

import core.db.DataBase;
import core.mvc.Controller;
import next.dao.UserDao;
import next.model.User;

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

public class UpdateFormUserController implements Controller {

@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
String userId = req.getParameter("userId");
User user = DataBase.findUserById(userId);
UserDao userDao = new UserDao();
User user = userDao.findByUserId(userId);
if (!UserSessionUtils.isSameUser(req.getSession(), user)) {
throw new IllegalStateException("다른 사용자의 정보를 수정할 수 없습니다.");
}
Expand Down
15 changes: 8 additions & 7 deletions src/main/java/next/controller/UpdateUserController.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package next.controller;

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

import core.mvc.Controller;
import next.dao.UserDao;
import next.model.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import core.db.DataBase;
import core.mvc.Controller;
import next.model.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UpdateUserController implements Controller {
private static final Logger log = LoggerFactory.getLogger(UpdateUserController.class);

@Override
public String execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
User user = DataBase.findUserById(req.getParameter("userId"));
String userId = req.getParameter("userId");
UserDao userDao = new UserDao();
User user = userDao.findByUserId(userId);
if (!UserSessionUtils.isSameUser(req.getSession(), user)) {
throw new IllegalStateException("다른 사용자의 정보를 수정할 수 없습니다.");
}
Expand Down
Loading