자바 리스트 객체에서 꺼내온 Date 타입 값을 jsp에서 원하는 포맷으로 변경해서 사용할 수 있다. Standard Tag Library (JSTL)를 사용하면 된다. fmt 태그 라이브러리를 파일 상단에 추가해 사용한다. 속성 Attribute Description Required Default Value Date value to display Yes None type DATE, TIME, or BOTH No date dateStyle FULL, LONG, MEDIUM, SHORT, or DEFAULT No default timeStyle FULL, LONG, MEDIUM, SHORT, or DEFAULT No default pattern Custom formatting pattern No None ..
상태코드 404는 기본적으로 요청 url이 없을 때 발생한다. 그런데 메서드명을 잘못 명시했을 때도 404가 발생한다. 메서드에 문제가 생겼을 경우 서버가 프로젝트를 사용할 수 없도록 조치하기 때문이다. Ex) index.jsp 파일을 시행하자 "하나 이상의 리스너들이 시작하지 못했습니다" "이전 오류들로 인해 컨텍스트 [/jpaex]의 시작이 실패했습니다" 등과 같은 오류 메시지가 콘솔창에 찍혔다. 상태코드는 404가 발생했다. 납득이 가지 않았다. 방금 전까지는 잘 작동했고 바꾼 것이라고는 dao 클래스에 메서드를 추가하고 view를 만들었을 뿐이었다. 적어도 index 페이지 정도는 잘 나와야 하지 않나? 하는 생각이었다. 알고 보니 메서드에 문제가 있으면 서버가 프로젝트를 아예 실행하지 않기 때문..
@RequestMapping을 선언한 메서드는 으로 받은 파라미터 값을 원하는 타입으로 선언해서 사용할 수 있다. 파라미터가 기본 타입과 래퍼 클래스라면 알아서 캐스팅(Casting) 해주기 때문이다. 단 문제가 발생하는 경우가 있는데, 캐스팅이 불가능한 경우다. 예를 들어 파라미터로 "abc"라는 값을 받았는데 long 타입으로 선언하면 에러가 발생하고 상태코드 400을 반환한다. Ex) jsp(view) 사원번호 연봉 인상률 : Controller @RequestMapping("/raiseEmpSal") public String updateSal(long empno, double increseRate) { // String 타입인 empno와 increseRate을 long과 double 타입으로 캐..
자바스크립트에서 변수 키워드에 var을 쓸지 let을 쓸지에 대한 고민이 존재한다. 둘은 기본적으론 별 차이 없이 변수를 선언하지만 가능하면 var 대신 let을 쓰도록 권고되기 때문이다. 왜 일까. let을 사용함으로써 개발자는 좀더 통제 가능한 코드를 작성할 수 있어서다. let은 ECMAScript6부터 추가됐다. var는 그 이전부터 쓰였다. 즉 let은 var보다 늦게 등장한 변수 선언 키워드다. 필요에 따라 let이 추가됐다는 의미다. var · let 차이 let은 재선언되지 않는다. Ex) function run(){ var varTest = 10; var varTest = 20; console.log(varTest) // 20 } run(); var로 선언한 변수는 같은 이름으로 재선언하..
HTTP(Hypertext Transfer Protocol)는 HTML 같은 문서를 전송하기 위한 응용 프로그램 계층 프로토콜이다. 웹 브라우저와 서버 간 통신을 위해 만들어졌다. 클라이언트가 요청(request) 하면 서버는 응답(response)하는 구조를 가진 클라이언트-서버 모델을 따른다. HTTP 요청 프로토콜 구조 HTTP 요청 프로토콜 구조는 start line, HTTP headers, body로 구분된다. start line에는 요청타입 / URI / HTTP버전 이 차례로 나열된다. Ex) GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1 요청 타입은 일반적으로 GET, POST 중 하나가 온다. GET vs ..
엑셀 파일 다운로드를 구현하기 위해서는 직접 커스텀 View Class를 구현해야 한다. 스프링에서 제공하는 AbstractXlsView 클래스를 사용하면 된다. Apache POI 라이브러리를 pom.xml에 추가해서 사용해야 한다. 이 라이브러리는 MS 오피스 파일 포맷을 자바 언어로 읽고 쓰는 기능을 제공한다. org.apache.poi poi 5.0.0 Controller 클래스에선 리스트 객체를 만들고 엑셀을 구성하는 값을 저장해 ModelAndView 객체로 return 한다. PageRanksController.java @Controller public class PageRanksController { @RequestMapping("요청url") public ModelAndView handl..
파일 다운로드를 구현하기 위해서는 직접 커스텀 View Class를 구현해야 한다. 스프링의 ApplicationContextAware 인터페이스와 AbstractView 클래스를 이용하면 파일 다운로드 기능을 구현할 수 있다. Controller에서는 요청에 맞는 메서드를 수행한다. 다운로드 받을 파일을 File 객체로 저장하고 ModelAndView 객체로 return한다. DownloadController.java @Controller public class DownloadController implements ApplicationContextAware { private WebApplicationContext context = null; // WebApplicationContext 객체는 서버 시작..
스프링 Web MVC 프로젝트는 클라이언트(사용자)의 모든 요청을 Dispatcher Servlet이 받아서 순서에 맞게 작업을 할당한다. 이때 Handler Mapping, Controller, viewResolver, view 등이 Dispatcher Servlet의 요구사항을 확인 및 수행하고 그 결과를 return 한다. 각각의 리소스는 Dispatcher Servlet 외에는 직접 소통하지 않는다. 스프링 MVC 작동 순서 서버 스타트(Server Start) Dispatcher Servlet 객체 생성 서버가 스타트하면 web.xml에 코딩된 내용에 따라 객체가 생성된다. 이때 Dispatcher Servlet 객체도 생성된다. 이처럼 코딩이 돼 있기 때문이다. DispatcherServlet..
스프링 프레임워크는 어노테이션을 이용해서 객체를 생성할 수 있습니다. @Component @Controller @Service @Repository 중 하나를 class 명 앞에 붙여주면 됩니다. 네 개의 어노테이션 모두 객체를 만들어주는 기능을 수행합니다. 다만 조금씩 기능의 차이가 있습니다. 각 어노테이션의 특징을 간단히 정리해보겠습니다. @Component 객체를 만드는 가장 기본적인 어노테이션입니다. 이 어노테이션에서 세부적인 기능이 추가되고 특화된 형태가 @Controller @Service @Repository라고 보면 됩니다. @Controller 이름에서도 알 수 있듯 MVC 패턴에서 컨트롤러 역할을 하는 클래스에 붙여 줍니다. @RequestMapping를 사용할 수 있다는 특징이 있습니..
관점지향 프로그래밍 AOP(Aspect Oriented Programming)는 관점을 기준으로 하는 프로그래밍을 의미합니다. 정의를 읽는 것만으로는 이해하기가 어려울 것입니다. AOP를 이해하기에 앞서 프로그래밍의 발전 과정을 간단하게 짚어보면 도움이 됩니다. 프로그래밍은 절차지향 → 객체지향 → 관점지향 순으로 발전했습니다. 절차지향 PP(Procedural Programming)는 코드를 작성한 순서대로, 즉 위에서부터 아래로 한 줄 한 줄 수행합니다. 절차지향적으로만 구성된 프로그램은 코드 중복이 많을 수밖에 없습니다. 윗 줄에서 구현한 코드를 아랫 줄에서 또 사용하는 경우가 많을 테니까요. 이런 단점을 보완하는 게 객체지향 프로그래밍 OOP(Object Oriented Programming)입니..