수업 내용/[JSP] JSP
[JSP] 03. 서블릿 (servlet)
프롯
2023. 5. 17. 18:35
서블릿은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말한다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다.
서블릿 실행
호스트 이름:포트번호/프로젝트이름/서블릿
호스트이름:포트번호/ContextPath/URLMapping
URLMapping의 기본 값은 서블릿 이름이다.
서블릿 이름 = 본명, URLMapping = 별명 (본명과 별명은 같을 수 있다! 보통 별명을 쓴다!)
ex) localhost:8080/chapter03_servlet/Ex01_servlet
문법은 자바와 거의 유사하다.
자동완성으로 클래스 선언해주는거 잊지 말것
역할 : 서버에서 실행되다가 브라우저에서 요청을 받으면 해당 작업을 수행하고 결과를 브라우저로 전송
브라우저 요청 (input) => 서블렛 => 브라우저 출력 (output)
위와 같은 순서로 작동한다.
서블렛 단계에서 요청을 처리할 수도 있고, input/output 단계에서 스크립트로 요청을 수행할 수도 있다.
공부하다 보면 명확해 질거 같다
package org.joonzis.ex;
import java.io.IOException;
import javax.servlet.ServletConfig;
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("/Ex01_servlet")
public class Ex01_servlet extends HttpServlet {
// Serializable 인터페이스를 구현하게 되면 노란색 warning 발생
// 직렬화에서 사용하는 고유 아이디로, 선언하지 않으면 JVM에서 자동 생성 및 대입
// 그래서 선언하지 않아도 동작에 문제 없다.
private static final long serialVersionUID = 1L;
//생성자
//셍상지 호출 뒤 -> init()
public Ex01_servlet() {
super();
System.out.println("생성자 호출");
}
//init() 메소드
//servlet 생성 후 한번만 호출
//초기화 용도로 사용
//init() 메소드 호출 뒤 > service() 메소드가 자동 호출
public void init(ServletConfig config) throws ServletException{
System.out.println("init() 호출");
}
//Service() 메소드
//1. 매개변수1 - : 요청 정보(브라우저 > 서버)
//2. 매개변수2 - : 응답 정보 (서버 > 브라우저)
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
System.out.println("service() 호출");
//사용자 요청 정보(request)를 분석하여 get 방식이면 doGet()을 호출
//post 방식이면 doPost() 메소드를 호출
//<form method="post">
//<form method="POST"> 대소문자 구분 없이 처리
System.out.println(req.getMethod());
if(req.getMethod().equalsIgnoreCase("get")) {
doGet(req, resp);
}
else {
doPost(req, resp);
}
}
// method를 지정하지 않거나, <form method="get">인 경우 호출되는 메소드
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
// <form method="post"> 인 경우 호출되는 메소드
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
전송하는 데이터 보안 여부에 따라 get, post 방식 함수를 호출한다.
(해당 코드에서는 차이 없다.)
웹 상에서의 출력
package org.joonzis.ex;
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("/Ex03_servlet")
public class Ex03_servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public Ex03_servlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 실제 코드가 작성되는 곳
//================항상 인코딩 먼저============================
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
//=========================================================
PrintWriter out = response.getWriter(); //웹 브라우저에 출력하기 위한 객체
//웹 브라우저에 출력하는 메소드 print()
out.print("<html>");
out.print("<head>");
out.print("<title>");
out.print("나의 첫 서블릿 페이지");
out.print("</title>");
out.print("</head>");
out.print("<body>");
out.print("<h1>나의 첫 서블릿 본문 내용</h1>");
out.print("</body>");
out.print("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
위와 같이 이클립스 콘솔이 아닌 웹 상에서 출력이 가능하다.
서블렛 사용해서 데이터 받고 출력
form 태그로 데이터를 입력받고
action 태그로 이동시킬 서블렛을 선언한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
</script>
</head>
<body>
<!-- pagemove : #Ex09_servlet 의 mapping 값 -->
<form action ="/chapter03_servlet/Ex09_servlet">
<h1>로그인</h1>
<p>아이디 <input type="text" name="id"></p>
<p>비밀번호 <input type="password" name="pw"></p>
<button onclick="submit();">로그인</button>
</form>
</body>
</html>