- [JSP] 37. 서블릿과 JSP의 협력2024년 07월 05일
- Song hyun
- 작성자
- 2024.07.05.:22
728x90반응형[JSP] 37. 서블릿과 JSP의 협력
서블릿과 JSP는 서로 협력하여 MVC 패턴을 구현할 수 있다. 서블릿은 컨트롤러 역할을 수행하고, JSP는 뷰 역할을 수행한다.
*insert.jsp: 프레젠테이션 계층으로 활용 -> insertServlet.java로 이동
1. 데이터 삽입하기
(1) MySQL DB 생성
create database demo5; use demo5; create table users( id bigint auto_increment primary key, name varchar(100) not null comment '사용자 이름', email varchar(255) not null comment '사용자 이메일' ); desc users;
(2) insert.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>데이터 삽입</title> <link rel="stylesheet" type="text/css" href="css/styles.css"> </head> <body> <h2>데이터 삽입</h2> <!-- http://localhost:8080/insert.jsp --> <form action="insert" method="post"> <label for="name">이름 :</label> <input type="text" id="name" name="name"> <label for="email">이메일 :</label> <input type="email" id="email" name="email" value="a@nate.com"> <br> <button type="submit">저장</button> </form> </body> </html>
(3) InsertServlet.java
package com.tenco.servlet; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; @WebServlet ("/insert") public class InsertServlet extends HttpServlet { private static final long serialVersionUID = 1L; public InsertServlet() { super(); } @Override public void init() throws ServletException { System.out.println("InsertServlet 초기화"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("Served at: ").append(request.getContextPath()); } // http://localhost:8080/InsertServlet protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 한글명 깨짐 해결 request.setCharacterEncoding("UTF-8"); String name=request.getParameter("name"); String email=request.getParameter("email"); // 유효성 검사 생략 try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/demo5?serverTimezone=Asia/Seoul" ,"root","asd123"); String sql=" INSERT INTO users(name,email) values (?,?)"; PreparedStatement pstmt= conn.prepareStatement(sql); pstmt.setString(1, name); pstmt.setString(2, email); pstmt.executeUpdate(); pstmt.close(); conn.close(); response.sendRedirect("result.jsp?message=success"); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); response.sendRedirect("result.jsp?message=error"); } } }
2. 데이터 조회하기
(4) select.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>사용자 정보 조회</title> <link rel="stylesheet" type="text/css" href="css.styles.css"> </head> <body> <h2>데이터 조회</h2> <form action="select" method="get"> <button type="submit">데이터 조회</button> </form> </body> </html>
(5) selectServlet.java
package com.tenco.servlet; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/select") public class SelectServlet extends HttpServlet { private static final long serialVersionUID = 1L; public SelectServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/demo5?serverTimezone=Asia/Seoul" ,"root","asd123"); String sql=" SELECT * FROM users "; PreparedStatement pstmt= conn.prepareStatement(sql); pstmt.executeQuery(); ResultSet rs= pstmt.executeQuery(); // 서블릿에서 다른 JSP 파일로 데이터를 전달할 수 있다. // WAS 내부에서 새로운 request 생성을 시킬 수 있다. // (단 외부(=클라이언트)에서는 모름.) request.getRequestDispatcher("resultSet.jsp").forward(request, response); pstmt.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
(6) result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ResultSet.jsp 파일</title> </head> <body> <% out.println("ResultSet.jsp 파일 입니다."); %> </body> </html>
*수정한 resultSet.jsp
<%@page import="java.util.Map"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ResultSet.jsp 파일</title> </head> <body> <% out.println("ResultSet.jsp 파일 입니다."); %> <h1>사용자 목록</h1> <table border="1"> <thead> <tr> <th>ID</th> <th>이름</th> <th>이메일</th> </tr> </thead> <tbody> <% List<Map<String, String>> userList = (List<Map<String, String>>) request.getAttribute("userList"); if (userList != null) { for(Map<String,String> userMap:userList){ %> <tr> <td><%=userMap.get("id") %></td> <td><%=userMap.get("name") %></td> <td><%=userMap.get("email") %></td> </tr> <%} } else { %> <p>등록된 사용자가 없네요.</p> <% } %> </tbody> </table> </body> </html>
728x90반응형'JSP' 카테고리의 다른 글
[JSP] 39. JSP와 서블릿을 사용해 간단한 게시판 만들어 보기(2) (0) 2024.07.08 [JSP] 38. JSP와 서블릿을 사용해간단한 게시판 만들어 보기 (1) (0) 2024.07.08 [JSP] 36. 서블릿과 JSP의 개념과 차이점 (0) 2024.07.05 [JSP] 35. JSP를 통해 구구단 출력 페이지 만들기 (0) 2024.07.05 [JSP] 34. 도전과제: 메서드를 사용해 세션 무효화 시켜보자 (0) 2024.07.05 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)