본문 바로가기
Kosta DevOps 과정 280기/Java

서블릿과 jsp

by 롯슈83 2024. 7. 12.

서블릿으로 웹 문서 만들기

  • 이클립스는 따로 서블릿 위저드를 제공한다. (저 항목에 없다면 other 에 가서 web에 가면 있다)

Superclass

  • 해당 클래스를 상속받는다는 뜻. 즉 HttpServlet를 상속받음
  • 오버라이딩 필수 요소가 있다. (아래의 함수)

  • 클라이언트가 웹서버에 서비스를 요청하는 방식
    • Get
      • doGet : get방식의 요청일 때 일처리를 위한 메소드
    • Post
      • doPost: post 방식의 요청일 때 일처리를 위한 메소드
      • 회원가입 등
  • 따라서 위 두 메소드를 각각 오버라이딩 해준다. 
    • doGet, doPost 메소드는 사용자의 요청정보를 담고 있는 request와 응ㅇ답을 위한 response 를 매개 변수로 갖고 있다.
    • 하나의 방식만 처리하고 싶을 때는 둘 중 하나의 메소드가 없을 수도 있다.
  • @WebServlet : 서비스명 등록. ~.html 처럼 어떻게 적으면 동작할지 적어주는 것.
  • 웹 표시줄에 직접 서비스 입력하면 get 방식
  • form 에 method 에 post 라고 입력할 때만 post 방식

연습

  • 웹 브라우저에 http://localhost:8088/day0712/Hello 를 요청하는 방식은 get 방식이다.
  • 이렇게 요청하였을 때, 사용자의 브라우저에 <h1>Hello Servlet </h1> 을 동적으로 생성하여 응답하는 서블릿을 만들어보자.
package com.kosta.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Hello")
public class Hello extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String data = "<h1>Hello Servlet</h1>";
		
		//응답방식을 설정 해 준다 -> 응답방식을 html로 한다는 뜻
		response.setContentType("text/html");
		
		//동적으로 생성한 html 을 요청한 사용자의 브라우저에 응답(html 출력) 하기 위하여 stream 을 얻어온다
		//response 객체의 getWriter 메소드를 이용하면 출력 stream을 얻을 수 있다.
		PrintWriter out = response.getWriter();
		
		//출력 스트림 out 을 통하여 html 을 응답한다(출력한다)
		out.print(data);
		
		//스트림을 닫아준다.
		out.close();
	}
}
  • 재생 버튼 눌러주면 이상한 사이트로 가므로 -> http://localhost:8088/day0712/Hello 이 도메인을 사용해준다.

연습 2: insertBook 이라고 get 방식으로 요청하면 다음의 book 테이블에 새로운 도서를 등록하기 위한 입력양식을 html 로만들어서 응답하는 서블릿을 만들어본다. 

  • servlet
package com.kosta.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/InsertBook")
public class InsertBook extends HttpServlet {	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String data = "<form action=\"InsertBookOK\" method='post'>\r\n"
				+ "        <label for=\"bookid\">책 번호</label>\r\n"
				+ "        <input type=\"number\" id=\"bookid\" name=\"bookid\">\r\n"
				+ "        <br>\r\n"
				+ "        <label for=\"bookname\">책 이름</label>\r\n"
				+ "        <input type=\"text\" id=\"bookname\" name=\"bookname\">\r\n"
				+ "        <br>\r\n"
				+ "        <label for=\"price\">가격</label>\r\n"
				+ "        <input id=\"price\" type=\"text\" name=\"price\">\r\n"
				+ "        <br>\r\n"
				+ "        <label for=\"publisher\">출판사</label>\r\n"
				+ "        <input id=\"publisher\" type=\"text\" name=\"publisher\">"
				+ "			<input type =\"submit\" value='등록'>"
				+ "			<input type =\"reset\" value='취소'></form>";
		
		//응답방식을 설정 해 준다 -> 응답방식을 html로 한다는 뜻
		response.setContentType("text/html;charset=UTF-8");
		
		//동적으로 생성한 html 을 요청한 사용자의 브라우저에 응답(html 출력) 하기 위하여 stream 을 얻어온다
		//response 객체의 getWriter 메소드를 이용하면 출력 stream을 얻을 수 있다.
		PrintWriter out = response.getWriter();
		
		//출력 스트림 out 을 통하여 html 을 응답한다(출력한다)
		out.print(data);
		
		//스트림을 닫아준다.
		out.close();
	}
}
package com.kosta.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/InsertBookOK")
public class InsertBookOK extends HttpServlet {	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("InsertBookOK 동작함");
		
		//폼양식에서 새로운 도서등록을 위하여 입력한 내용을 갖고 doPost 로 온다.
		//이 때 사용자의 요청정보는 request 에 실려서 온다.
		//request 를 통해서 사용자가 요청한 정보(도서번호, 도서명, 출판사, 가격을 받아올 수 있다.)
		//받아 오기 전에 요청한 문자셋이 한글임을 먼저 설정한 후에 데이터를 받아와야 한다.

		//요청한 문자셋이 한글임을 설정한다.
		request.setCharacterEncoding("UTF-8");

		//새로운 도서 등록을 위하여 요청한 데이터(도서번호, 도서명, 가격, 출판사) 받아와서 변수에 저장한다
		//요청한 데이터는 모두 doPost 메소드의 매개변수 request 에 실려있다. 
		int bookid = Integer.parseInt(request.getParameter("bookid"));
		String bookname = request.getParameter("bookname");
		int price = Integer.parseInt(request.getParameter("price"));
		String publisher = request.getParameter("publisher");

		//데이터베이스 연결하여 실행시킬 데이터베이스 명령어를 만든다.
		String sql = "insert into book values(?,?,?,?)";
		
		//데이터베이스 연결을 위한 드라이버이름, url, username, password 변수를 만든다.
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:XE";
		String username = "c##madang";
		String password="madang";
		int re = 0;
		try {
			Class.forName(driver);
			Connection conn = DriverManager.getConnection(url, username, password);
			PreparedStatement pstmt = conn.prepareStatement(sql);
			
			pstmt.setInt(1, bookid);
			pstmt.setString(2, bookname);
			pstmt.setInt(3, price);
			pstmt.setString(4, publisher);
			re = pstmt.executeUpdate();
			
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			System.out.println(e);
		}

		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		System.out.println("re: "+re);
		
		if(re > 0){
			System.out.println("도서 추가 성공");
		}else{
			System.out.println("도서 추가 실패");
		}
		out.close();
	}
}
  • C:\html_css_js\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\day0712_a\org\apache\jsp
    • 여기서 아래 파일들을 만들어주고, 삭제하면 다시 만들어준다. 간혹 바뀐 내용이 안바뀌면 이걸 삭제하고 다시 생성하도록 저장한다.

  • jsp를 요청하면 다음과 같은 서블릿클래스가 만들어지고 실제로 서비스 되는 내용은 __ jspService 메소드에 쓰여진다.
    • Service 메소드의 매개변수는 사용자의 요청정보를 담고 있는 request와 응답을 위한 response 를 갖고 있고, 또, 서비스 메소드 수행을 위하여 필요한 지역변수 pageContent, session, application, config, out, page 등이 있다.
    • 이러한 8개의 변수를 jsp 내장객체라고 한다.
    • 이 jsp 내장객체는 별도로 객체를 생성하지 않고도, 바로 사용할 수 있다. 

 

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

confirm  (0) 2024.07.15
jsp  (0) 2024.07.12
웹 어플리케이션 프로그래밍  (0) 2024.07.12
이벤트 연결하기  (0) 2024.07.11
같은 값인지 판별하기  (0) 2024.07.11