자바 서블릿(Java Servlet) 호출이란?

자바 서블릿이란?

자바 서블릿(Servlet)은 웹 서버에서 실행되는 프로그램입니다. 동적 웹 페이지 생성, DB 작업, 사용자 인증 등을 처리합니다. 좀 더 구체적으로 말하면 서블릿은 클라이언트에서 서버로 보낸 요청을 처리하고 그 결과를 클라이언트에 다시 전송하는 자바의 클래스입니다. 일반적으로 웹 브라우저가 클라이언트 역할을 하고 요청과 응답 시에는 HTTP 프로토콜이 사용됩니다. 

 

서블릿 실행은 아래와 같은 단계로 이루어집니다.

 

1. 클라이언트는 웹 서버에 요청을 보냅니다.

 

2. 웹 서버는 요청을 받습니다.

 

3. 웹 서버는 해당 서블릿에 요청을 전달합니다.

 

4. 서블릿은 요청을 처리하고 출력 형식으로 응답을 생성합니다.

 

5. 서블릿은 응답을 다시 웹 서버로 보냅니다.

 

6. 웹 서버는 응답을 다시 클라이언트로 보내고 클라이언트는 이를 화면에 표시합니다.

 

서블릿
출처=tutorialspoint.com

 

서블릿 예시 1)

예를 들어, 사용자가 웹 사이트에서 어떤 버튼을 누르면 http://www.example.com/myServlet라는 URL을 요청합니다. 이 URL은 매핑된 서블릿을 호출합니다. 이 서블릿은 웹 브라우저에 "Hello, this is MyServlet!"라는 메시지를 출력하도록 프로그래밍되어 있습니다.

 

매핑 정보는 아래와 같이 xml 형태로 저장됩니다.

<web-app>
  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/myServlet</url-pattern>
  </servlet-mapping>
</web-app>

 

이 경우, "/myServlet"이라는 URL 패턴이 "com.example.MyServlet"이라는 클래스에 매핑되어 있습니다. 때문에 사용자가 http://www.example.com/myServlet 라는 URL을 요청하면 웹 서버는 com.example.MyServlet 클래스의 인스턴스를 생성하고 해당 요청을 처리하기 위한 메서드를 호출하게 됩니다. 

 

MyServlet 클래스는 아래와 같은 형식으로 코딩되어 있습니다. 여기서 import한 javax.servlet 및 javax.servlet.http 패키지는 서블릿 작성을 위한 인터페이스와 클래스를 제공합니다.

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class MyServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    // Set response content type
    response.setContentType("text/html");

    PrintWriter out = response.getWriter();
    out.println("<h1>" + "Hello, this is MyServlet!" + "</h1>");
  }
}

 

서블릿 예시 2)

이번엔 사용자가 폼을 통해 제출한 정보를 데이터베이스에 저장하는 서블릿 예시입니다. 사용자가 정보를 제출 시 http://www.example.com/userRegistration 라는 URL을 웹 서버에 요청합니다.

 

[web.xml]

<web-app>
  <servlet>
    <servlet-name>UserRegistration</servlet-name>
    <servlet-class>com.example.UserRegistration</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UserRegistration</servlet-name>
    <url-pattern>/userRegistration</url-pattern>
  </servlet-mapping>
</web-app>

 

[UserRegistration.java]

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class UserRegistration extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // Set response content type
        response.setContentType("text/html");

        String userName = request.getParameter("username");
        String password = request.getParameter("password");
        String email = request.getParameter("email");

        try {
            // Load the JDBC driver
            Class.forName("com.mysql.jdbc.Driver");

            // Connect to a database
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root", "password");

            // Create a statement
            Statement statement = connection.createStatement();

            // Execute SQL statement
            String sql = "INSERT INTO Users (username, password, email) VALUES (?, ?, ?)";
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, userName);
            preparedStatement.setString(2, password);
            preparedStatement.setString(3, email);
            preparedStatement.executeUpdate();

            PrintWriter out = response.getWriter();
            out.println("<h1>" + "User registration successful!" + "</h1>");

            // Close resources
            preparedStatement.close();
            connection.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

이 예시에서 UserRegistration 서블릿은 POST 방식으로 제출된 폼 데이터를 받아서 데이터베이스에 저장합니다.

반응형

댓글

Designed by JB FACTORY