Java Spring/책공부 1 (JSP와 스프링)

    25. JAX-RS로 REST API 서버 구현

    25. JAX-RS로 REST API 서버 구현

    1️⃣ JAX-RS 설치 pom.xml에 즉 의존성 설정을 아래처럼 해주자. org.glassfish.jersey.containers jersey-container-servlet 2.33 org.glassfish.jersey.inject jersey-hk2 2.33 org.glassfish.jersey.media jersey-media-json-jackson 2.33 2️⃣ 서비스 구현 설정 클래스 생성 JAX-RS 서비스가 톰캣 jwbook의 웹 웹 어플리케이션에서 동작한다. 따라서 JAX-RS 서버 모듈을 톰켓에 등록해줄것이다. src/main/java 에 ch12 패키지를 생성 한후 RestConfig 클래스를 생성해주자. 코드는 아래와 같다. package ch12; import javax.ws...

    24. 한글 처리 필터 구현

    24. 한글 처리 필터 구현

    지금까지 서블릿에서 해왔던 한글 인코딩 처리 부분을 필터로 구현해볼것이다. 필터의 활용분얀은 매우 다양하며 잘설계해서 구현하면 여러 환경에서 코드 수정없이 추가기능을 부여하거나 제어하는 구조를 만들수있다. 우선 필터 동작 확인을 해볼것이다. ch10의 NewsController 서블릿에서 service()의 request.setCharacterEncoding()을 주석처리해주자. 1️⃣ 필터 클래스 생성 src/main/java 폴더에서 EncodingFilter 클래스를 만든후 아래처럼 코딩해주자. import javax.servlet.Filter; import javax.servlet.annotation.WebFilter; @WebFilter("*.nhn") public class EncodingFi..

    23. 리스너 종합

    23. 리스너 종합

    진행에 앞서 pom.xml과 web.xml을 수정해야한다. pom.xml은 아래의 의존성을 추가해주자. javax.servlet javax.servlet-api 4.0.1 provided web.xml은 아래처럼 코딩해주자. Archetype Created Web Application ch11.ListenerTestServlet 1️⃣ 리스너 클래스 생성 예제 생성 src/main/java에서 ListenerExam 으로 클래스를 생성해주자. 2️⃣ ServletContext 이벤트 구현 위에서 만든 ListenerExam을 아래와 같이 코딩해주자. import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextA..

    22. 필터

    22. 필터

    1️⃣ 필터란? 개요 필터는 서블릿 필터라고 하며 웹 어플리케이션을 지원하기 위한 특수한 서블릿이다. 클라이언트 요청에 따라 서블릿이나 JSP가 실행되기전에 request, response객체를 조작이나 추가 처리가 가능하다. 기본적으로 특정 요청에만 작동하며, 여러개의 필터가 정해진 순서에 따라 배치될수 있다. 이때 클라이언트 요청 처리 이전에 먼저 실행된다. 리스너와 마찬가지로 단순히 기능만 구현하는 웹 프로그램의 경우 필터를 만들지 않아도 된다. 하지만 어플리케이션 설계 관점에서 유연하고 효과적인 어플리케이션 구현 및 운영이 필요하다면 필터에 대해 알아둬야한다. 필터는 기존 코드 변경없이 어플리케이션에서 공통적으로 사용할수있는 구현에 사용된다. 활용 분야 인증 : 로그인같은 공통기능을 개별 컨트롤러..

    21. 리스너

    21. 리스너

    1️⃣ 리스너란? 개요 리스너란 컨테이너에서 발생하는 이벤트를 중 특정 이벤트가 발생하면 실행되는 특수한 서블릿이다. 이를 이벤트 리스너라고한다. 웹 어플리케이션 실행에 필요한 정보를 제공하거나 톰캣 시작종료와 같은 특정 상황에 자동으로 동작하는 프로그램을 구현할때 사용한다. 이때 리스너는 서블릿과 마찬가지로 애너테이션 기반 코드로 작성할수있다. 먼저 리스너가 동작하기 위한 이벤트 종류와 프로그램API를 알아야한다. 리스너는 일반적인 형태의 서블릿이 아니다. 특정 이벤트에 따라 동작하는 인터페이스를 구현한 클래스라고 보면 되겠다. 리스너는 생명 주기 변화와 Scope Object에서 관리하는 속성의 변화를 감지하고 해당 이벤트가 발생되면 실행되는구조다. 클라이언트의 요청에 따라 서블릿을 통해 Sessio..

    20. 뷰 구현

    20. 뷰 구현

    시작 페이지 화면에서 뉴스 목록을 보여주고 뉴스를 선택해 세부내용 보기/삭제를 할수있게 구성할것이다. 뉴스 등록 부분은 별도 페이지로 구성이 가능하나 뉴스 목록 아래에 등록 버튼을 두고 눌렀을때 입력 양식을 보여주고 등록하도록 구성하겠다. 디자인은 부트스트랩을 사용하고 분제 발생시 에러 메시지를 출력하는 부분이 포함되어있다. 데이터 출력은 EL과 JSTL을 사용할것이다. 1️⃣ newList.jsp 기본구조 메인화면으로 뉴스 목록을 보여주는 화면이다. [webapp]에 ch10 폴더 생성후 newsList.jsp를 만들어주자. 그후 부트스트랩에 접속하자. 그리고 CSS와 JS를 복사해주자. 복사한 내용은 뉴스 목록 [${status.count}] ${news.title}, ${news.date} × 에러..

    19. 컨트롤러 구현

    19. 컨트롤러 구현

    1️⃣ Init() 메소드 구현 NewsController 서블릿 클래스를 생성해주자. package ch10; import javax.servlet.*; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; @WebServlet("/news.nhn") @MultipartConfig(maxFileSize=1024*1024*2, location="c:/Temp/img") public class NewsController extends HttpServlet { private static final..

    18. 모델 구현

    18. 모델 구현

    1️⃣ DB 생성 테이블 생성 제목, 이미지, 내용, 등록 날짜와 시간으로 구성되는 뉴스 기사를 구분하기 위해 기본키로 aid 칼럼을 둘것이다. DB는 MariaDB이다. CREATE DATABASE `spring`; CREATE TABLE news ( aid INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, title VARCHAR(50) NOT NULL, img VARCHAR(50) NOT NULL, date TIMESTAMP, content VARCHAR(50) NOT NULL ); 만든 결과는 아래와 같다. 2️⃣ News 클래스 구현 뉴스 데이터 구조를 표현하기 위한 DO 클래스이다. 테이블 구조와 일치해야한다! 하지만 화면에 보이는 날짜와 시간정보를 처리하기 위해..