본문 바로가기

전체 글434

26. 요청 매개변수의 한글 깨짐 처리 웹 브라우저에서 보낸 한글 데이터를 서블릿에서 꺼낼 때 한글이 깨지는 경우가 있다. 그 이유와 해결책을 알아본다. 회원등록 입력폼의 이름 입력단에 한글 이름을 입력 후 추가버튼을 클릭한다(그림 1). 회원 목록 조회 결과를 확인한다(그림 2). 한글로 '가각간'이라고 입력한 이름부분이 깨진 것을 확인할 수 있다. DB의 MEMBERS 테이블 조회문을 실행하니 한글이 깨져서 데이터가 저장된 것 또한 확인할 수 있다(그림 3). 한글이 깨진 이유를 살펴보기 위해 웹 브라우저의 기본 문자집합을 확인한다(그림 4). 현재 사용하는 크롬의 기본 문자집합이 유니코드(UTF-8)로 설정되어 있는 것을 확인할 수 있다. (크롬은 따로 기본 문자집합을 확인할 수 있는 방법이 없어서 Set Character Encodin.. 2022. 1. 22.
25. HttpServlet으로 POST 요청 다루기 HttpServlet 클래스의 doPost()를 이용하여 POST 요청을 다루는 방법과 JDBC를 이용하여 회원 정보를 DB에 저장하는 방법을 알아본다. MemberAddServlet 클래스에서 doPost()를 오버라이딩 한다. 이 메소드는 클라이언트에서 POST 요청을 보낼 때 호출된다. @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //JDBC 객체를 보관할 참조 변수 선언 Connection conn = null; PreparedStatement stmt = null; //PreparedStatement : 반복적인.. 2022. 1. 20.
24. HttpServlet으로 GET 요청 다루기 HttpServlet 클래스를 사용하여 서블릿을 만드는 방법을 알아본다. 지금까지 서블릿 클래스를 만들 때 service() 메소드를 정의하였지만 HttpServlet 클래스를 상속받으면 service() 대신 doGet()이나 doPost()를 정의한다. 먼저 doGet()의 사용법을 알아본다. 기존의 작업한 회원 목록 서블릿을 실행한 화면에 신규 회원 링크를 추가한다. ... //HTML 태그 출력 PrintWriter out = response.getWriter(); out.println(""); out.println("회원목록"); //신규 회원 링크 - a태그의 링크 URL은 add다. out.println("신규 회원"); //a태그의 href에서 URL이 '/'로 시작하면 절대 경로, '/'.. 2022. 1. 19.
23. 데이터베이스에서 데이터 가져오기 (2) 데이터베이스로부터 전체 회원 정보를 가져와서 출력하는 서블릿을 만들어본다. web04 프로젝트의 spms.servlets 패키지의 MemberListServlet 클래스를 생성한다. package spms.servlets; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.Servlet.. 2022. 1. 18.
22. 데이터베이스에서 데이터 가져오기 (1) 교재에서 사용하는 DBMS : MySQL 서블릿이 하는 주된 일은 클라이언트가 요청한 데이터를 다루는 일이다. 데이터를 가져오거나 입력, 변경, 삭제 등을 처리하려면 데이터베이스의 도움을 받아야 한다. 데이터베이스는 개발자들이 쉽게 데이터를 저장하고 꺼낼 수 있도록 도와주는 프로그램이다. 데이터베이스를 사용하려면 2가지가 필요한데, 첫 번째는 데이터베이스에 요청을 전달하고 결과를 받을 때 사용할 도구이다. 자바에서는 데이터베이스와의 통신을 위해 JDBC 기술을 제공한다. 두 번째는 데이터베이스에 명령을 내릴 때 사용할 SQL(Structured Query Language)이라는 데이터를 정의하고 조작할 때 사용하는 데이터베이스를 위한 표준 명령어다. 개발자는 SQL로 데이터베이스가 할 일을 작성하고, J.. 2022. 1. 17.
21. JDBC와 데이터베이스 자바에서는 데이터베이스로부터 데이터를 가져오거나 입력, 수정, 삭제 등을 할 때 JDBC를 사용한다. 이런 JDBC가 없던 시절에 데이터를 어떻게 다루었는지, JDBC API와 JDBC 드라이버는 무엇인지, 또 이 둘의 차이점과 JDBC 드라이버의 4가지 종류는 무엇인지 알아본다. 1. 데이터베이스가 없던 시절(그림1) - 파일 입·출력 API를 사용하여 데이터 입·출력 프로그래밍 검색, 삭제, 변경을 고려한 데이터 구조를 세밀하게 정의하고, 그 구조에 따라 데이터를 읽고 써야하기 때문에 번거롭고 힘들다. - 애플리케이션의 데이터가 분리되어 통합 조회 어려움 데이터 파일이 애플리케이션 별로 분리되고 격리되어 있기 때문에 서로 관련된 데이터를 하나로 묶어서 처리하려면 매우 복잡해진다. - 데이터의 중복 발.. 2022. 1. 15.
20. GenericServlet의 사용 (2) CalculatorServlet 클래스를 배치 및 테스트하기 위해 web.xml에 배치 정보를 추가한다. web03 Hello lesson03.servlets.HelloWorld Calculator lesson03.servlets.CalculatorServlet Hello /Hello Calculator /calc index.html index.jsp index.htm default.html default.jsp default.htm 이후 톰캣 서버를 실행시키고, 만약 서버가 켜져 있었다면 재시작 한다. web.xml의 변경사항을 적용하려면 웹 애플리케이션을 다시 시작해야 한다. 이후 웹 브라우저를 띄워 주소창에 http://localhost:9999/web03/calc?a=20&b=30를 입력한다. 서.. 2022. 1. 14.
19. GenericServlet의 사용 (1) GenericServlet 추상 클래스를 사용하여 서블릿을 만들고, 웹 브라우저에서 서블릿으로 데이터를 보내는 방법과 서블릿에서 이 데이터를 꺼내는 방법을 알아보고, 서블릿에서 작업한 결과를 웹 브라우저로 보내는 방법을 알아본다. GenericServlet 추상 클래스가 없던 시절 Servlet 인터페이스를 구현하여 서블릿 클래스를 만들 때 5개의 모든 메서드를 구현해야 했기 때문에 사용하지 않는 메소드라도 빈 메소드로 구현해야 했다. 이런 불편한 점을 해소하기 위해 Servlet 인터페이스를 구현받아 init(), destroy(), getServletConfig(), getServletInfo() 메소드를 미리 구현한 추상 클래스가 GenericServlet 추상 클래스이다. GenericServle.. 2022. 1. 13.
18. 웹 애플리케이션 배치 (2) - 운영 서버에 배치 실제 운영하는 서버에 배치할 때, 배치할 파일들을 하나의 웹 아카이브 파일(.war)로 만들어 배치 폴더에 복사한다. web03 프로젝트 폴더를 선택 후 Eclipse 메뉴바에서 File - Export..을 클릭한다(1~2). 이후 내보내기(Export)의 종류를 고르는 창이 뜨면 Web - WAR file을 선택 후 Next 버튼을 클릭한다(3). war 파일을 생성할 대상의 프로젝트와 저장할 경로의 폴더와 파일명을 설정하는 창이 뜬다(4). web03 프로젝트를 선택한 뒤 저장할 경로의 폴더와 파일명을 설정한 뒤 Finish 버튼을 클릭한다. 이렇게 해당 경로의 폴더에 web03.war 파일이 생성된 것을 볼 수 있다(5). WARWeb ARchive 파일이 준비되었으면 운영 .. 2022. 1. 12.