2026. 3. 3. 20:51ㆍ대우개발원 수업 내용/서버프로그램


JSP 기본 객체의 속성(Attribute) 사용
- JSP에는 네 가지 기본 객체가 있음:
pageContext, request, session, application - 각 기본 객체는 속성을 가질 수 있으며, 객체가 존재하는 동안 속성을 사용할 수 있음.
- 속성은 JSP 페이지 간에 정보를 주고받거나 공유하기 위해 사용됨.
- 속성은 <속성이름, 값> 형태를 가지며, 서로 다른 이름을 가진 여러 속성을 포함할 수 있음.
- request 객체는 한 번의 요청(Request)에 대해 유효하게 동작하며, 해당 요청을 처리하는 모든 JSP에서 공유됨.
즉, JSP에서 속성(Attribute)은 데이터를 JSP 페이지 사이에서 전달하거나 공유하는 데 중요한 역할을 함
JSP 속성(Attribute) 관련 메서드 정리
메서드 반환형 설명
| setAttribute(String name, Object value) | void | 이름이 name인 속성의 값을 value로 지정한다. |
| getAttribute(String name) | Object | 이름이 name인 속성의 값을 가져온다. 존재하지 않을 경우 null을 반환한다. |
| removeAttribute(String name) | void | 이름이 name인 속성을 삭제한다. |
| getAttributeNames() | Enumeration | 속성의 이름 목록을 가져온다. (단, pageContext 제외) |
핵심 포인트
- 속성은 <속성이름, 값> 형태로 저장된다.
- JSP 기본 객체(pageContext, request, session, application)에 적용 가능하다.
- request 객체는 한 번의 요청 동안 모든 JSP에서 공유된다.
- session과 application은 더 긴 범위에서 데이터를 공유할 수 있다.

표시된 부분의 역할
1. request.setAttribute("num1", num1);
- request 객체에 "num1"이라는 이름으로 num1 값을 저장합니다.
- 같은 방식으로 "num2", "add"도 저장합니다.
- 이렇게 하면 JSP 페이지에서 request.getAttribute("num1") 같은 메서드로 값을 꺼내 쓸 수 있습니다.
👉 즉, 서블릿에서 계산한 데이터를 JSP로 전달하기 위해 request 객체에 담는 과정입니다.
웹페이지로 포워딩




표시된 부분의 역할
1. request.setAttribute("num1", num1);
- request 객체에 "num1"이라는 이름으로 num1 값을 저장합니다.
- 같은 방식으로 "num2", "add"도 저장합니다.
- 이렇게 하면 JSP 페이지에서 request.getAttribute("num1") 같은 메서드로 값을 꺼내 쓸 수 있습니다.
👉 즉, 서블릿에서 계산한 데이터를 JSP로 전달하기 위해 request 객체에 담는 과정입니다.
2. RequestDispatcher dispatcher = request.getRequestDispatcher("/exercise/addition02.jsp");
- RequestDispatcher는 특정 JSP나 다른 서블릿으로 요청을 넘겨주는 역할을 합니다.
- 여기서는 /exercise/addition02.jsp로 요청과 응답을 전달하도록 준비합니다.
3. dispatcher.forward(request, response);
- 실제로 요청과 응답을 JSP로 포워딩(forward) 합니다.
- 이때 request에 담아둔 속성(num1, num2, add)도 함께 전달되므로 JSP에서 바로 사용할 수 있습니다.
정리
- setAttribute → 데이터를 request에 저장
- getRequestDispatcher + forward → JSP로 요청을 넘기면서 저장된 데이터를 함께 전달
즉, 표시된 부분은 서블릿에서 계산한 결과를 JSP 페이지로 전달하는 핵심 로직이에요.
원하시면 제가 이 JSP(addition02.jsp)에서 어떻게 request.getAttribute로 값을 꺼내서 화면에 출력하는지 예시 코드도 보여드릴까요?



📌 Servlet + JSP 데이터 전달 흐름
1. 서블릿 (AdditionServlet02.java)
@WebServlet("/addservlet")
public class AdditionServlet02 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int num1 = 20;
int num2 = 10;
int add = num1 + num2;
// JSP에서 쓸 수 있도록 request에 데이터 저장
request.setAttribute("num1", num1);
request.setAttribute("num2", num2);
request.setAttribute("add", add);
// JSP로 요청 전달 (forward)
RequestDispatcher dispatcher =
request.getRequestDispatcher("/exercise/addition02.jsp");
dispatcher.forward(request, response);
}
}
👉 핵심:
- setAttribute → 데이터를 request에 담음
- forward → JSP로 요청을 넘김 (주소창은 그대로 /addservlet 유지됨)
2. JSP (addition02.jsp)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Addition</title>
</head>
<body>
${num1} + ${num2} = ${add}
</body>
</html>
👉 핵심:
- ${num1}, ${num2}, ${add} → EL(Expression Language)로 request에 담긴 값 꺼내서 출력
🚀 실행 흐름 요약
- 브라우저에서 /addservlet 호출
- 서블릿이 계산 후 request에 값 저장
- forward로 JSP 실행
- JSP가 request에 담긴 값 출력 → 결과: 20 + 10 = 30
📖 기억하기 쉽게 한 줄 정리
- 서블릿: 데이터 준비 → request.setAttribute()
- JSP: 데이터 출력 → ${속성이름}
- forward: 주소창은 서블릿 URL 유지, JSP는 내부에서 실행됨
📌 포워드(forward)란?
- 서버 내부에서 요청을 다른 자원(JSP, 다른 서블릿 등)으로 넘기는 동작입니다.
- 클라이언트(브라우저)는 여전히 처음 요청한 URL을 유지합니다.
- 즉, 브라우저 주소창은 바뀌지 않고, 서버 안에서만 요청이 이동합니다.
🚀 특징
- 주소창 유지
- 브라우저는 /addservlet을 요청했으니 주소창은 그대로 /addservlet입니다.
- JSP로 넘어가도 내부 처리라서 주소창이 바뀌지 않음.
- 데이터 공유 가능
- request.setAttribute()로 담은 데이터를 JSP에서 그대로 꺼내 쓸 수 있습니다.
- 같은 요청 객체(request)를 JSP까지 전달하기 때문입니다.
- 서버 내부 동작
- 클라이언트는 JSP가 실행된다는 사실을 직접 알지 못합니다.
- 결과 HTML만 응답으로 받습니다.
🔄 포워드 vs 리다이렉트
구분 Forward Redirect
| 주소창 | 바뀌지 않음 (원래 URL 유지) | 새 URL로 변경됨 |
| 요청/응답 | 같은 request, response 객체 사용 | 새로운 요청/응답 발생 |
| 데이터 전달 | request.setAttribute로 JSP에 전달 가능 | 전달 불가 (새 요청이므로 사라짐) |
| 사용 목적 | 내부 처리, 데이터 공유 | 다른 페이지로 이동, 외부 URL 연결 |
📖 한 줄 정리
포워드는 서버 내부에서 요청을 JSP로 넘겨주는 방식 → 주소창은 그대로, 데이터는 그대로 전달된다.
📌 JSP 코드 (form.jsp)
<form method="get" action="/jspWeb/method">
<input type="submit" value="get 방식으로 호출하기">
</form>
<form method="post" action="/jspWeb/method">
<input type="submit" value="post 방식으로 호출하기">
</form>
✨ 핵심
- 두 개의 <form> 태그가 있음
- 첫 번째는 GET 방식으로 /jspWeb/method 요청
- 두 번째는 POST 방식으로 /jspWeb/method 요청
- 버튼을 누르면 각각 다른 HTTP 메서드로 같은 URL(/method)에 요청을 보냄
👉 즉, JSP는 단순히 사용자가 어떤 방식(GET/POST)으로 요청을 보낼지 선택할 수 있는 화면을 제공하는 역할을 합니다.
📌 Servlet 코드 (MethodServlet.java)
@WebServlet("/method")
public class MethodServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<h1>get 방식으로 처리됨</h1>");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("<h1>post 방식으로 처리됨</h1>");
out.close();
}
}
✨ 핵심
- @WebServlet("/method") → /method URL로 들어오는 요청을 처리
- doGet() → GET 요청을 받으면 "get 방식으로 처리됨" 출력
- doPost() → POST 요청을 받으면 "post 방식으로 처리됨" 출력
- PrintWriter를 이용해 HTML을 직접 응답으로 작성
👉 즉, Servlet은 JSP에서 보낸 요청을 받아서 GET/POST 방식에 따라 다른 응답을 출력하는 역할을 합니다.
🚀 실행 흐름 요약
- 사용자가 JSP 화면에서 버튼 클릭
- /jspWeb/method로 요청 전송 (GET 또는 POST)
- MethodServlet이 요청을 받아 처리
- GET이면 "get 방식으로 처리됨", POST이면 "post 방식으로 처리됨"을 브라우저에 출력
📖 블로그용 한 줄 정리
- JSP: 사용자 입력 화면 제공 (GET/POST 선택)
- Servlet: 요청을 받아서 처리하고 결과 응답 출력
- 핵심 차이: GET 요청은 URL에 데이터가 붙고, POST 요청은 요청 본문에 데이터가 담김
→ Servlet에서 doGet, doPost로 구분 처리
📌 JSP 코드 (param.jsp)
<form method="get" action="/jspWeb/param" name="frm">
아이디 : <input type="text" name="id"><br>
나 이 : <input type="text" name="age"><br>
<input type="submit" value="전송" onclick="return check()">
</form>
✨ 핵심
- 사용자 입력 화면 제공 (아이디, 나이 입력)
- action="/jspWeb/param" → /param 서블릿으로 요청 전송
- onclick="return check()" → 제출 전에 자바스크립트로 유효성 검사 실행
📌 자바스크립트 코드 (param.js)
function check() {
if (document.frm.id.value == "") {
alert("아이디를 입력해주세요.");
document.frm.id.focus();
return false;
} else if (document.frm.age.value == "") {
alert("나이를 입력해주세요.");
document.frm.age.focus();
return false;
} else if (isNaN(document.frm.age.value)) {
alert("숫자를 입력해주세요.");
document.frm.age.focus();
return false;
} else {
return true;
}
}
✨ 핵심
- 빈 값 검사: 아이디나 나이가 비어 있으면 경고창 띄움
- 숫자 검사: 나이가 숫자가 아니면 경고창 띄움
- 모든 조건을 통과하면 true 반환 → 폼 제출 진행
👉 즉, 잘못된 입력을 막고 올바른 값만 서버로 전송하도록 하는 클라이언트 측 검증 로직입니다.
📌 Servlet 코드 (ParamServlet.java)
@WebServlet("/param")
public class ParamServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
String id = request.getParameter("id");
int age = Integer.parseInt(request.getParameter("age"));
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("당신이 입력한 정보입니다.<br>");
out.print("아이디 : " + id + "<br>");
out.print("나이 : " + age + "<br>");
out.print("<a href='javascript:history.go(-1)'>다시</a>");
out.print("</body></html>");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
✨ 핵심
- request.getParameter("id") → JSP에서 입력한 아이디 가져오기
- request.getParameter("age") → JSP에서 입력한 나이 가져오기
- PrintWriter로 HTML 응답 작성 → 입력값을 브라우저에 출력
- <a href='javascript:history.go(-1)'>다시</a> → 이전 페이지(JSP)로 돌아가는 링크 제공
🚀 실행 흐름 요약
- 사용자가 JSP 화면에서 아이디와 나이를 입력
- 자바스크립트 check()로 값 검증 (빈 값/숫자 여부)
- 올바른 값이면 /param 서블릿으로 GET 요청 전송
- 서블릿이 request.getParameter()로 값 꺼내서 응답 HTML 작성
- 브라우저에 입력값 출력 + "다시" 링크로 JSP로 돌아갈 수 있음
📖 블로그용 한 줄 정리
- JSP: 입력 폼 제공
- JS: 클라이언트 측 유효성 검사
- Servlet: 입력값을 받아서 처리 후 결과 출력
👉 세 가지가 합쳐져서 폼 입력 → 검증 → 서버 처리 → 결과 출력이라는 웹 애플리케이션 기본 흐름을 완성합니다.
로그인은 보안이 중요하기 때문에 post방식
📌 JSP 코드 (login.jsp)
<form method="post" action="/jspWeb/login" name="lg">
아이디 : <input type="text" name="id"><br>
암 호 : <input type="text" name="pw"><br>
<input type="submit" value="로그인" onclick="return check()">
</form>
✨ 핵심
- 사용자 입력 화면 제공 (아이디, 암호 입력)
- action="/jspWeb/login" → /login 서블릿으로 POST 요청 전송
- onclick="return check()" → 제출 전에 자바스크립트로 유효성 검사 실행
📌 자바스크립트 코드 (login.js)
function check() {
if (document.lg.id.value == "") {
alert("아이디를 입력해주세요.");
document.lg.id.focus();
return false;
} else if (document.lg.pw.value == "") {
alert("암호를 입력해주세요.");
document.lg.pw.focus();
return false;
} else {
return true;
}
}
✨ 핵심
- 빈 값 검사: 아이디나 암호가 비어 있으면 경고창 띄움
- 모든 조건을 통과하면 true 반환 → 폼 제출 진행
👉 즉, 잘못된 입력을 막고 올바른 값만 서버로 전송하도록 하는 클라이언트 측 검증 로직입니다.
📌 Servlet 코드 (LoginServlet.java)
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("당신이 입력한 정보입니다.<br>");
out.print("아이디 : " + id + "<br>");
out.print("비밀번호 : " + pw + "<br>");
out.print("<a href='javascript:history.go(-1)'>다시</a>");
out.print("</body></html>");
out.close();
}
}
✨ 핵심
- request.getParameter("id") → JSP에서 입력한 아이디 가져오기
- request.getParameter("pw") → JSP에서 입력한 암호 가져오기
- PrintWriter로 HTML 응답 작성 → 입력값을 브라우저에 출력
- <a href='javascript:history.go(-1)'>다시</a> → 이전 페이지(JSP)로 돌아가는 링크 제공
🚀 실행 흐름 요약
- 사용자가 JSP 화면에서 아이디와 암호 입력
- 자바스크립트 check()로 값 검증 (빈 값 여부)
- 올바른 값이면 /login 서블릿으로 POST 요청 전송
- 서블릿이 request.getParameter()로 값 꺼내서 응답 HTML 작성
- 브라우저에 입력값 출력 + "다시" 링크로 JSP로 돌아갈 수 있음
📖 블로그용 한 줄 정리
- JSP: 입력 폼 제공
- JS: 클라이언트 측 유효성 검사
- Servlet: 입력값을 받아서 처리 후 결과 출력
👉 세 가지가 합쳐져서 폼 입력 → 검증 → 서버 처리 → 결과 출력이라는 웹 애플리케이션 기본 흐름을 완성합니다.
📌 JSP 코드 (radio.jsp)
<form method="get" action="/jspWeb/radio">
성별 :
<input type="radio" name="gender" value="남자" checked> 남자
<input type="radio" name="gender" value="여자"> 여자
<br><br>
메일 정보 수신 여부 :
<input type="radio" name="chk_mail" value="yes" checked> 수신
<input type="radio" name="chk_mail" value="no"> 거부
<br><br>
간단한 가입인사 :
<textarea name="content" rows="3" cols="35"></textarea>
<br>
<input type="submit" value="전송">
</form>
✨ 핵심
- 라디오 버튼으로 성별과 메일 수신 여부 선택
- textarea로 가입 인사 작성
- action="/jspWeb/radio" → /radio 서블릿으로 GET 요청 전송
👉 JSP는 사용자 입력 화면을 제공하는 역할입니다.
📌 Servlet 코드 (RadioServlet.java)
@WebServlet("/radio")
public class RadioServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String gender = request.getParameter("gender");
String chk_mail = request.getParameter("chk_mail");
String content = request.getParameter("content");
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.println("당신이 입력한 정보입니다.<hr>");
out.println("성별 : <b>" + gender + "</b><br>");
out.println("메일 정보 수신 여부 : <b>" + chk_mail + "</b><br>");
out.println("가입 인사 : <b><pre>" + content + "</pre></b>");
out.println("<a href='javascript:history.go(-1)'>다시</a>");
out.print("</body></html>");
out.close();
}
}
✨ 핵심
- request.getParameter("gender") → JSP에서 선택한 성별 가져오기
- request.getParameter("chk_mail") → 메일 수신 여부 가져오기
- request.getParameter("content") → 가입 인사 가져오기
- PrintWriter로 HTML 응답 작성 → 입력값을 브라우저에 출력
- history.go(-1) → 이전 페이지(JSP)로 돌아가는 링크 제공
👉 Servlet은 JSP에서 보낸 데이터를 받아서 처리하고 결과를 출력하는 역할을 합니다.
🚀 실행 흐름 요약
- 사용자가 JSP 화면에서 성별, 메일 수신 여부, 가입 인사 입력
- /radio 서블릿으로 GET 요청 전송
- 서블릿이 request.getParameter()로 값 꺼내서 응답 HTML 작성
- 브라우저에 입력값 출력 + "다시" 링크로 JSP로 돌아갈 수 있음
📖 블로그용 한 줄 정리
- JSP: 입력 폼 제공 (라디오 버튼 + textarea)
- Servlet: 입력값을 받아서 처리 후 결과 출력
- 전체 흐름: 폼 입력 → 서버 전달 → 서블릿 처리 → 결과 응답
📌 JSP 코드 (checkbox.jsp)
<h2>악세사리</h2>
관심항목을 선택하세요.
<hr>
<form method="get" action="/jspWeb/checkbox">
<input type="checkbox" name="item" value="신발"> 신발
<input type="checkbox" name="item" value="가방"> 가방
<input type="checkbox" name="item" value="벨트"> 벨트<br>
<input type="checkbox" name="item" value="모자"> 모자
<input type="checkbox" name="item" value="시계"> 시계
<input type="checkbox" name="item" value="쥬얼리"> 쥬얼리<br>
<input type="submit" value="전송">
</form>
✨ 핵심
- 여러 개의 체크박스를 name="item"으로 묶음 → 같은 이름으로 여러 값 전달 가능
- 사용자가 선택한 항목들을 /checkbox 서블릿으로 GET 요청 전송
- 선택하지 않으면 item 값이 아예 전달되지 않음
👉 JSP는 사용자 입력 화면을 제공하는 역할입니다.
📌 Servlet 코드 (CheckboxServlet.java)
@WebServlet("/checkbox")
public class CheckboxServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String items[] = request.getParameterValues("item");
PrintWriter out = response.getWriter();
out.print("<html><body>");
if (items == null) {
out.print("선택한 항목이 없습니다.");
} else {
out.println("당신이 선택한 항목입니다.<hr>");
for (String item : items) {
out.print(item + " ");
}
}
out.println("<br><a href='javascript:history.go(-1)'>다시</a>");
out.print("</body></html>");
out.close();
}
}
✨ 핵심
- request.getParameterValues("item") → 같은 이름(item)으로 전달된 여러 값을 배열로 가져옴
- 선택한 항목이 없으면 null 반환 → "선택한 항목이 없습니다." 출력
- 선택한 항목이 있으면 배열을 순회하며 출력
- history.go(-1) → 이전 페이지(JSP)로 돌아가는 링크 제공
👉 Servlet은 JSP에서 보낸 여러 값을 받아서 처리하고 결과를 출력하는 역할을 합니다.
🚀 실행 흐름 요약
- 사용자가 JSP 화면에서 체크박스 선택
- /checkbox 서블릿으로 GET 요청 전송
- 서블릿이 request.getParameterValues()로 값 꺼내서 응답 HTML 작성
- 브라우저에 선택한 항목 출력 + "다시" 링크로 JSP로 돌아갈 수 있음
📖 블로그용 한 줄 정리
- JSP: 체크박스 입력 폼 제공
- Servlet: 여러 값(getParameterValues)을 받아서 처리 후 결과 출력
- 전체 흐름: 폼 입력 → 서버 전달 → 서블릿 처리 → 결과 응답
'대우개발원 수업 내용 > 서버프로그램' 카테고리의 다른 글
| 서버프로그램 jstl 3~5일차 (0) | 2026.03.09 |
|---|

































