[49][23.11.30][JSP/서블릿][구디아카데미 후기/국비지원 IT개발자취업/김승수 선생님]

DANA·2023년 11월 30일

KDT-구디아카데미

목록 보기
49/56

서블릿

서블릿(server + applet 합성어)

  • 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바클래스
  • 서블릿은 자바로 작성되어 있으므로 자바의 일반적인 특징을 모두 가지지만, 일반 자바프로그램과 다르게 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행된다는 점에서 차이가 있음

  • java api -> 웹 혁명을 예상하면서 웹 동작하는 서비스를 생각, 이 서비스를 위해 기존의 자바(java.awt.Applet-JFrame과 비슷)가 브라우저에서 호출할 수 있는 유일한 클래스였다
  • 동작 처리하는 주체는 서버
  • 자바보다 서블릿이 더 작다. 서블릿이 되기 위한 조건은 HttpServelt을 상속 받는 것이다. (자바는 Object 상속 받는다)
  • 서블릿 라이프 사이클을 갖는다. 이 사이클을 관리하는 것이 톰캣이다(Web Application Server - jsp - api.jar, servlet - api.jar.)
  • init() - service() - destroy()

package com.ch5;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
/*
 * 서블릿(server + applet 합성어)
 * 자바>서블릿>JSP(html+css+js+java+oracle) - 관리,유지보수,생산성 별로
 * 
 */
// 단 클래스 앞에 온다
// 서블릿은 화면을 처리하지 않고(할 수 있지만 불편해서) 컨트롤 계층의 역할을 한다
// JSP는 화면을 담당한다(View 계층)-JSP는 서블릿이다
@WebServlet("/hello") // 스프링으로 따지면 @Controller + RequestMapping (스프링은 메소드 앞에 온다. -> 메소드마다 URL을 갖는다.)
public class HelloServlet extends HttpServlet{ // 싱글톤 패턴으로 관리받고있다. - 하나다. - 공유(스레드)
	// HelloServlet 노란줄 신경 안써도 된다. -> serialVersionUID 추가
	private static final long serialVersionUID = 1L;
	
	@Override
	public void init() throws ServletException {
		System.out.println("init 호출");
		super.init();
	} 

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		System.out.println("service 호출");
		super.service(arg0, arg1);
	}

	@Override
	public void destroy() {
		System.out.println("destroy 호출");
		super.destroy();
	}

}

스프링

  • 스프링 다운로드
    https://spring.io/tools

  • 강의계획
    : POJO 프레임워크 직접 만들어보기(mvc 패턴-디자인패턴,VO,DTO) - 스프링 모방하기

  • 공동목표
    : 화면과 로직 분리하자
    : 프론트엔드와 백엔드를 완전히 분리할 수 있는 구조 설계

  • maven방식: xml 문법으로 환경을 설정 - 에러가 잦고 따로 문법을 공부해야 함.

  • gradle방식: 최신 방식 - 인텔리제이에서 gradle 방식으로 안드로이트 프로젝트를 지원해왔는데 구글에서 코틀린(함수형 프로그래밍 유행 - 자바에서는 람다식, js에서는 화살표 함수) 지지 공식 선언하면서 gradle 떠오름

TestDao.java

package com.example.demo.dao;

import java.io.Reader;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class TestDao extends JFrame {
	//
	SqlSessionFactory sqlMap = null;
	SqlSession session = null;
	public void currentTime() {
		System.out.println("CurrentTime 호출");
		String time = null;
		try {
			String resourse = "com/mybatis/MapperConfig.xml";
			Reader reader = null;
			reader = Resources.getResourceAsReader(resourse);
			sqlMap = new SqlSessionFactoryBuilder().build(reader);
			session = sqlMap.openSession();
			time = session.selectOne("currentTime");
			System.out.println(time);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void procEmpcursor() {
		Map<String, Object> pMap = new HashMap<>();
		try {
			String resourse = "com/mybatis/MapperConfig.xml";
			Reader reader = null;
			reader = Resources.getResourceAsReader(resourse);
			sqlMap = new SqlSessionFactoryBuilder().build(reader);
			session = sqlMap.openSession();
			session.selectOne("proc_empcursor", pMap);
			System.out.println(pMap);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void procLogin1() {
		Map<String, Object> pMap = new HashMap<>();
		try {
			pMap.put("m_id", "kiwi123");
			pMap.put("m_pw", "123");
			String resourse = "com/mybatis/MapperConfig.xml";
			Reader reader = null;
			reader = Resources.getResourceAsReader(resourse);
			sqlMap = new SqlSessionFactoryBuilder().build(reader);
			session = sqlMap.openSession();
			session.selectOne("proc_login1", pMap);
			System.out.println(pMap);
			Object keys[] = pMap.keySet().toArray();
			for(int i = 0; i<keys.length; i++) {
				if("r_msg".equals(keys[i])) {
					JOptionPane.showMessageDialog(this, pMap.get("r_msg"));
				}	
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		TestDao td = new TestDao();
		//td.currentTime();
		//td.procEmpcursor();
		td.procLogin1();
		
	}

}

0개의 댓글