자바 서블릿(Java Servlet) 호출이란?
- Java
- 2023. 5. 24.
자바 서블릿이란?
자바 서블릿(Servlet)은 웹 서버에서 실행되는 프로그램입니다. 동적 웹 페이지 생성, DB 작업, 사용자 인증 등을 처리합니다. 좀 더 구체적으로 말하면 서블릿은 클라이언트에서 서버로 보낸 요청을 처리하고 그 결과를 클라이언트에 다시 전송하는 자바의 클래스입니다. 일반적으로 웹 브라우저가 클라이언트 역할을 하고 요청과 응답 시에는 HTTP 프로토콜이 사용됩니다.
서블릿 실행은 아래와 같은 단계로 이루어집니다.
1. 클라이언트는 웹 서버에 요청을 보냅니다.
2. 웹 서버는 요청을 받습니다.
3. 웹 서버는 해당 서블릿에 요청을 전달합니다.
4. 서블릿은 요청을 처리하고 출력 형식으로 응답을 생성합니다.
5. 서블릿은 응답을 다시 웹 서버로 보냅니다.
6. 웹 서버는 응답을 다시 클라이언트로 보내고 클라이언트는 이를 화면에 표시합니다.
서블릿 예시 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 방식으로 제출된 폼 데이터를 받아서 데이터베이스에 저장합니다.
'Java' 카테고리의 다른 글
자바 ClassCastException 에러 원인 (0) | 2023.06.14 |
---|---|
WAS 종류 정리 (Jetty, Tomcat, JBoss, WebLogic, WebSphere, JEUS) (0) | 2023.05.26 |
MyBatis란? Java SQL 분리 장점 (0) | 2023.05.09 |
jar 파일 압축 해제 없이 사용 가능한 이유 (0) | 2023.05.03 |
java.net.BindException : Address already in use bind 에러 해결 (0) | 2023.04.27 |