서블릿으로 웹 문서 만들기
- 이클립스는 따로 서블릿 위저드를 제공한다. (저 항목에 없다면 other 에 가서 web에 가면 있다)
Superclass
- 해당 클래스를 상속받는다는 뜻. 즉 HttpServlet를 상속받음
- 오버라이딩 필수 요소가 있다. (아래의 함수)
- 클라이언트가 웹서버에 서비스를 요청하는 방식
- Get
- doGet : get방식의 요청일 때 일처리를 위한 메소드
- Post
- doPost: post 방식의 요청일 때 일처리를 위한 메소드
- 회원가입 등
- Get
- 따라서 위 두 메소드를 각각 오버라이딩 해준다.
- 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 |