Skip to content
Merged
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
10 changes: 5 additions & 5 deletions app/src/main/java/com/techcourse/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@ public class Application {

private static final int DEFAULT_PORT = 8080;

public static void main(final String[] args) throws Exception {
final int port = defaultPortIfNull(args);
final var tomcat = new TomcatStarter(port);
public static void main(String[] args) throws Exception {
int port = defaultPortIfNull(args);
TomcatStarter tomcat = new TomcatStarter(port);
log.info("configuring app with basedir: {}", TomcatStarter.WEBAPP_DIR_LOCATION);

tomcat.start();
stop(tomcat);
}

private static int defaultPortIfNull(final String[] args) {
private static int defaultPortIfNull(String[] args) {
return Stream.of(args)
.findFirst()
.map(Integer::parseInt)
.orElse(DEFAULT_PORT);
}

private static void stop(final TomcatStarter tomcat) {
private static void stop(TomcatStarter tomcat) {
try {
// make the application wait until we press any key.
System.in.read();
Expand Down
33 changes: 17 additions & 16 deletions app/src/main/java/com/techcourse/DispatcherServlet.java
Original file line number Diff line number Diff line change
@@ -1,51 +1,52 @@
package com.techcourse;

import com.interface21.webmvc.servlet.ModelAndView;
import com.interface21.webmvc.servlet.mvc.asis.Controller;
import com.interface21.webmvc.servlet.mvc.tobe.AnnotationHandlerMapping;
import com.interface21.webmvc.servlet.mvc.tobe.HandlerExecution;
import com.interface21.webmvc.servlet.view.JspView;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.interface21.webmvc.servlet.view.JspView;

public class DispatcherServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
private static final Logger log = LoggerFactory.getLogger(DispatcherServlet.class);

private ManualHandlerMapping manualHandlerMapping;
private AnnotationHandlerMapping annotationHandlerMapping;

public DispatcherServlet() {
}

@Override
public void init() {
manualHandlerMapping = new ManualHandlerMapping();
annotationHandlerMapping = new AnnotationHandlerMapping();
manualHandlerMapping.initialize();
annotationHandlerMapping.initialize();
}

@Override
protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException {
final String requestURI = request.getRequestURI();
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException {
String requestURI = request.getRequestURI();
log.debug("Method : {}, Request URI : {}", request.getMethod(), requestURI);

try {
final var controller = manualHandlerMapping.getHandler(requestURI);
final var viewName = controller.execute(request, response);
move(viewName, request, response);
Controller controller = manualHandlerMapping.getHandler(requestURI);
String viewName = controller.execute(request, response);
HandlerExecution handler = annotationHandlerMapping.findHandler(request);
ModelAndView modelAndView = handler.handle(request, response);
JspView view = new JspView(viewName);
view.render(modelAndView.getModel(), request, response);
} catch (Throwable e) {
log.error("Exception : {}", e.getMessage(), e);
throw new ServletException(e.getMessage());
}
}

private void move(final String viewName, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
if (viewName.startsWith(JspView.REDIRECT_PREFIX)) {
response.sendRedirect(viewName.substring(JspView.REDIRECT_PREFIX.length()));
return;
}

final var requestDispatcher = request.getRequestDispatcher(viewName);
requestDispatcher.forward(request, response);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.techcourse;

import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletRegistration.Dynamic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.interface21.web.WebApplicationInitializer;
Expand All @@ -16,10 +17,10 @@ public class DispatcherServletInitializer implements WebApplicationInitializer {
private static final String DEFAULT_SERVLET_NAME = "dispatcher";

@Override
public void onStartup(final ServletContext servletContext) {
final var dispatcherServlet = new DispatcherServlet();
public void onStartup(ServletContext servletContext) {
DispatcherServlet dispatcherServlet = new DispatcherServlet();

final var registration = servletContext.addServlet(DEFAULT_SERVLET_NAME, dispatcherServlet);
Dynamic registration = servletContext.addServlet(DEFAULT_SERVLET_NAME, dispatcherServlet);
if (registration == null) {
throw new IllegalStateException("Failed to register servlet with name '" + DEFAULT_SERVLET_NAME + "'. " +
"Check if there is another servlet registered under the same name.");
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/techcourse/ManualHandlerMapping.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void initialize() {
.forEach(path -> log.info("Path : {}, Controller : {}", path, controllers.get(path).getClass()));
}

public Controller getHandler(final String requestURI) {
public Controller getHandler(String requestURI) {
log.debug("Request Mapping Uri : {}", requestURI);
return controllers.get(requestURI);
}
Expand Down
18 changes: 9 additions & 9 deletions app/src/main/java/com/techcourse/TomcatStarter.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@ public class TomcatStarter {

private final Tomcat tomcat;

public TomcatStarter(final int port) {
public TomcatStarter(int port) {
this(WEBAPP_DIR_LOCATION, port);
}

public TomcatStarter(final String webappDirLocation, final int port) {
public TomcatStarter(String webappDirLocation, int port) {
this.tomcat = new Tomcat();
tomcat.setConnector(createConnector(port));

final var docBase = new File(webappDirLocation).getAbsolutePath();
final var context = (StandardContext) tomcat.addWebapp("", docBase);
String docBase = new File(webappDirLocation).getAbsolutePath();
StandardContext context = (StandardContext) tomcat.addWebapp("", docBase);
skipJarScan(context);
skipClearReferences(context);
}
Expand All @@ -46,18 +46,18 @@ public void stop() {
}
}

private Connector createConnector(final int port) {
final var connector = new Connector();
private Connector createConnector(int port) {
Connector connector = new Connector();
connector.setPort(port);
return connector;
}

private void skipJarScan(final Context context) {
final var jarScanner = (StandardJarScanner) context.getJarScanner();
private void skipJarScan(Context context) {
StandardJarScanner jarScanner = (StandardJarScanner) context.getJarScanner();
jarScanner.setScanClassPath(false);
}

private void skipClearReferences(final StandardContext context) {
private void skipClearReferences(StandardContext context) {
/**
* https://tomcat.apache.org/tomcat-10.1-doc/config/context.html
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import com.interface21.webmvc.servlet.mvc.asis.Controller;
import jakarta.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -13,7 +14,7 @@ public class LoginController implements Controller {
private static final Logger log = LoggerFactory.getLogger(LoginController.class);

@Override
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
public String execute(HttpServletRequest req, HttpServletResponse res) throws Exception {
if (UserSession.isLoggedIn(req.getSession())) {
return "redirect:/index.jsp";
}
Expand All @@ -26,9 +27,9 @@ public String execute(final HttpServletRequest req, final HttpServletResponse re
.orElse("redirect:/401.jsp");
}

private String login(final HttpServletRequest request, final User user) {
private String login(HttpServletRequest request, User user) {
if (user.checkPassword(request.getParameter("password"))) {
final var session = request.getSession();
HttpSession session = request.getSession();
session.setAttribute(UserSession.SESSION_KEY, user);
return "redirect:/index.jsp";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class LoginViewController implements Controller {
private static final Logger log = LoggerFactory.getLogger(LoginViewController.class);

@Override
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
public String execute(HttpServletRequest req, HttpServletResponse res) throws Exception {
return UserSession.getUserFrom(req.getSession())
.map(user -> {
log.info("logged in {}", user.getAccount());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import com.interface21.webmvc.servlet.mvc.asis.Controller;
import jakarta.servlet.http.HttpSession;

public class LogoutController implements Controller {

@Override
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
final var session = req.getSession();
public String execute(HttpServletRequest req, HttpServletResponse res) throws Exception {
HttpSession session = req.getSession();
session.removeAttribute(UserSession.SESSION_KEY);
return "redirect:/";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
public class RegisterController implements Controller {

@Override
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
final var user = new User(2,
public String execute(HttpServletRequest req, HttpServletResponse res) throws Exception {
User user = new User(2,
req.getParameter("account"),
req.getParameter("password"),
req.getParameter("email"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
public class RegisterViewController implements Controller {

@Override
public String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception {
public String execute(HttpServletRequest req, HttpServletResponse res) throws Exception {
return "/register.jsp";
}
}
6 changes: 3 additions & 3 deletions app/src/main/java/com/techcourse/controller/UserSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ public class UserSession {

public static final String SESSION_KEY = "user";

public static Optional<User> getUserFrom(final HttpSession session) {
final var user = (User) session.getAttribute(SESSION_KEY);
public static Optional<User> getUserFrom(HttpSession session) {
User user = (User) session.getAttribute(SESSION_KEY);
return Optional.ofNullable(user);
}

public static boolean isLoggedIn(final HttpSession session) {
public static boolean isLoggedIn(HttpSession session) {
return getUserFrom(session).isPresent();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class InMemoryUserRepository {
private static final Map<String, User> database = new ConcurrentHashMap<>();

static {
final var user = new User(1, "gugu", "password", "hkkang@woowahan.com");
User user = new User(1, "gugu", "password", "hkkang@woowahan.com");
database.put(user.getAccount(), user);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ public class CharacterEncodingFilter implements Filter {
private static final String DEFAULT_ENCODING = "UTF-8";

@Override
public void init(final FilterConfig filterConfig) throws ServletException {
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(DEFAULT_ENCODING);
response.setCharacterEncoding(DEFAULT_ENCODING);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package com.techcourse.support.web.filter;

import jakarta.servlet.*;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
Expand All @@ -32,15 +37,15 @@ public class ResourceFilter implements Filter {
private RequestDispatcher requestDispatcher;

@Override
public void init(final FilterConfig filterConfig) throws ServletException {
public void init(FilterConfig filterConfig) throws ServletException {
this.requestDispatcher = filterConfig.getServletContext().getNamedDispatcher("default");
}

@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
final var req = (HttpServletRequest) request;
final var path = req.getRequestURI().substring(req.getContextPath().length());
HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI().substring(req.getContextPath().length());
if (isResourceUrl(path)) {
log.debug("path : {}", path);
requestDispatcher.forward(request, response);
Expand All @@ -49,8 +54,8 @@ public void doFilter(final ServletRequest request, final ServletResponse respons
}
}

private boolean isResourceUrl(final String url) {
for (final var prefix : resourcePrefixs) {
private boolean isResourceUrl(String url) {
for (String prefix : resourcePrefixs) {
if (url.startsWith(prefix)) {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class SpringServletContainerInitializer implements ServletContainerInitia
@Override
public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
throws ServletException {
final List<WebApplicationInitializer> initializers = new ArrayList<>();
List<WebApplicationInitializer> initializers = new ArrayList<>();

if (webAppInitializerClasses != null) {
for (Class<?> waiClass : webAppInitializerClasses) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@ public class ModelAndView {
private final View view;
private final Map<String, Object> model;

public ModelAndView(final View view) {
public ModelAndView(View view) {
this.view = view;
this.model = new HashMap<>();
}

public ModelAndView addObject(final String attributeName, final Object attributeValue) {
public ModelAndView addObject(String attributeName, Object attributeValue) {
model.put(attributeName, attributeValue);
return this;
}

public Object getObject(final String attributeName) {
public Object getObject(String attributeName) {
return model.get(attributeName);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
import jakarta.servlet.http.HttpServletResponse;

public interface Controller {
String execute(final HttpServletRequest req, final HttpServletResponse res) throws Exception;
String execute(HttpServletRequest req, HttpServletResponse res) throws Exception;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ public class ForwardController implements Controller {

private final String path;

public ForwardController(final String path) {
public ForwardController(String path) {
this.path = Objects.requireNonNull(path);
}

@Override
public String execute(final HttpServletRequest request, final HttpServletResponse response) {
public String execute(HttpServletRequest request, HttpServletResponse response) {
return path;
}
}
Loading