✨웹 애플리케이션 개발 환경 구축하기
JDK(Java Development Kit) : 자바 개발 도구
톰캣(Apache Tomcat) : 웹 애플리케이션 서버(WAS)
이클립스(Eclipse) : 코딩과 컴파일 함께 할 수 있는 종합 개발 툴(IDE)
1. 웹 서버
- 클라이언트의 요청을 받으면 해당 처리를 해서 결과페이지를 응답하도록 구성된 서버
2. WAS
- 웹 서버만으로는 DB와 연동하여 처리해야 하는 동적인 데이터 처리가 어렵기 때문에 DBMS와 웹서버 사이에서 제어해주는 프로그램
3. JSP
- [Dynamic Web Project] => [Web Project] => [New->JSP File]
- Java Server Page의 약자, 자바로 서버 페이지 작성하기 위한 언어
- HTML과 JSP 태그(스크립트릿)으로 구성되어 화면을 작성하는데 유리함.
- 자바 코드 쓰려면 스크립트릿<% %> 안에 써 주어야 함
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>Addition</title>
</head>
<body>
<%
int num1 = 20;
int num2 = 10;
int add = num1 + num2;
%>
<%=num1%>+<%=num2%>=<%=add%>
</body>
</html>
*JSP 기본태그
종류 | 사용용도 | 형식 |
스크립트릿(scriptlet) | 자바 코드 기술 | <% %> |
선언문(declaration) | 변수, 메서드 선언 | <%! %> |
표현식(expression) | 계산식, 함수 호출한 결과를 문자열 형태로 출력 | <%= %> |
주석(Comment) | JSP 페이지에 설명 넣기 | <%-- --%> |
지시자(Directive) | JSP 페이지 속성을 지정 | <%@ %> |
*지시자 종류
종류 | 사용 용도 |
page | 해당 JSP 페이지 전반적으로 환경 설정할 내용 지정 |
include | 현재 페이지에 다른 파일의 내용을 삽입 |
taglib | 태그 라이브러리에서 태그를 꺼내와 사용할 수 있는 기능 제공 |
4. 서블릿
- 자바 클래스 형태의 웹 애플리케이션
- javax.servlet.http Package 의 HttpServlet 클래스 상속받아 구현한 서브 클래스
- 출력스트림 통해 HTML을 문자열 형태로 클라이언트에게 전송
- 서블릿은 자바 코드 내부에 HTML 코드가 들어가는 구조 <-> JSP는 그 반대
- 복잡한 로직은 서블릿에 기술 결과만을 JSP 페이지를 통해 클라이언트에 제공하는 형태로 개발
- URL Mapping : /hello (URL 매핑하는 이유는 실제 서블릿 클래스 공개하지 않기 위해서)
- ContextPath : server.xml 파일의 <Context> 태그에 추가 path="/web-study-02")
- 서블릿 요청 위한 URL
http://localhost:8181/web-study-02/hello
[unit03\AdditionServlet03.java]
package unit02;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/AdditionServlet03")
public class AdditionServlet03 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int num1 = 20;
int num2 = 10;
int add = num1 + num2;
request.setAttribute("num1", num1);
request.setAttribute("num2", num2);
request.setAttribute("add", add);
RequestDispatcher dispatcher
= request.getRequestDispatcher("addition03.jsp");
dispatcher.forward(request, response);
}
}
[addition03.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>Addition</title>
</head>
<body>
${num1}+${num2}=${add}
</body>
</html>
💻 클라이언트가 서버에 어떻게 요청하는가?
1. 전송방식
- form 태그 통해서 서버에 무엇인가 전달하거나 요청함
- get 방식 : 주소 창을 타고 넘어감. 보안에 취약. 255자 이하 적은 양의 데이터 전송(기본)
- post 방식 : html header 타고 넘어감. 대용량 데이터 전송
- action태그에 요청할 서블릿 이름, 전송버튼은 input태그 속성값을 submit으로 지정해야 함
- form 태그에 method 속성값으로 get => doGet() 메서드 호출, post => doPost() 호출
- a 태그로 링크 걸어주면 서블릿은 get 방식으로 요청한 것으로 봄.
<form method="get" action="CallServlet">
<input type="submit" value="전송">
</form>
<a href="CallServlet"> get 방식으로 봄 </a>
2. 서블릿 동작 원리
Browser ↔️ Web Server in WAS ↔️ Servlet Container ↔️ Thread ↔️ Servlet 객체
Instance 생성 : init() -> doGet() or doPost() -> destroy()


* JSP가 Servlet 컨테이너에서 동작하는 순서
- 브라우저에서 JSP 페이지("myCount.jsp")를 웹 서버에세 요청
- 웹 서버는 JSP에 대한 요청을 서블릿 컨테이너에게 넘김
- 서블릿 컨테이너는 해당 JSP 찾아서 서블릿파일(myCount_jsp.java) 생성
- 서블릿 파일은 컴파일 되어 실행가능한 상태의 서블릿 클래스 파일(myCount_jsp.class)로 생성되고 메모리에 적재
- 서블릿 수행 결과가 웹 서버에 전송
- 사용자는 서블릿 출력 결과인 HTML 형태로 응답 받음
3. 서블릿 인코딩
- 서블릿에서 응답시 한글 처리(출력시)
response.setContentType("text/html; charset=UTF-8");
- 입력 받는 과정에서도 별도의 처리 안 하면 한글 깨짐
- 서버설정파일 server.xml 에서 첫번째 <Connector> 태그에 URIEncoding="UTF-8" 속성 추가
4. 쿼리 스트링
- 서블릿 클래스에서 사용자가 입력한 값을 어떻게 얻어 오는가?
- 서버에서 클라이언트가 보낸 데이터를 얻어오기 위해 쿼리스트링(Query String) 사용
- 쿼리스트링은 get방식으로 요청시 URL 주소 뒤에 입력 데이터를 함께 제공하는 방법으로 "리소스?이름=값" 형식

5. 요청객체(request)와 파라미터(getParameter)
- input 태그의 name 속성값이 getParameter()의 매개변수
- getParameter()는 파라미터 값을 항상 String 형태로 얻어옴 => 계산에 쓰려면 형변환 필요
<input type="text" name="id">
String id = req.getParameter("id");
int age = Integer.parseInt(request.getParameter("age"));
- 같은 name 값 여러개 얻어오려면? getParameterValues()
<form action="process.jsp" method="post">
<input type="checkbox" name="fruits" value="apple"> Apple<br>
<input type="checkbox" name="fruits" value="banana"> Banana<br>
<input type="checkbox" name="fruits" value="orange"> Orange<br>
<input type="submit" value="Submit">
</form>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Selected Fruits</title>
</head>
<body>
<%
// fruits라는 이름의 파라미터를 배열로 가져옴
String[] selectedFruits = request.getParameterValues("fruits");
// 선택된 과일 출력
if (selectedFruits != null) {
out.println("<h2>Selected Fruits:</h2>");
for (String fruit : selectedFruits) {
out.println("<p>" + fruit + "</p>");
}
} else {
out.println("<p>No fruits selected.</p>");
}
%>
</body>
</html>
6. 유효성 체크(자바스크립트)
- 사용자가 폼에 입력한 데이터가 유효해야만 서버에서 정상 처리 가능
- 예) 아이디&나이는 반드시 입력되어야 하고 나이는 수치데이터만 입력가능하도록 체크
- 서버로 보내기 전에 입력한 데이터가 유효한지 판단은 자바스크립트로만 가능(js 확장자)
- JSP 파일의 <head>영역에 <script>태그 추가
<script type="text/javascript" src="param.js"></script>
'Spring&JSP' 카테고리의 다른 글
[JSP] 게시판 만들기 3 _ MySQL user 테이블 만들고, 이클립스에서 자바빈 만들기 (62) | 2024.12.03 |
---|---|
[JSP] 게시판 만들기 2 _ 로그인 페이지 + 부트스트랩 + mySQL 다운로드 (62) | 2024.12.02 |
[JSP] 게시판 만들기 1 _ 이클립스 자바 웹 프로젝트 환경설정 (6) | 2024.12.01 |
[JSP] forward(포워드) vs sendRedirect(리다이렉트) 방식 차이 (119) | 2024.11.27 |
[Spring] 제1강_ 스프링 개발을 위한 환경설정(윈도우) (0) | 2024.04.15 |
✨웹 애플리케이션 개발 환경 구축하기
JDK(Java Development Kit) : 자바 개발 도구
톰캣(Apache Tomcat) : 웹 애플리케이션 서버(WAS)
이클립스(Eclipse) : 코딩과 컴파일 함께 할 수 있는 종합 개발 툴(IDE)
1. 웹 서버
- 클라이언트의 요청을 받으면 해당 처리를 해서 결과페이지를 응답하도록 구성된 서버
2. WAS
- 웹 서버만으로는 DB와 연동하여 처리해야 하는 동적인 데이터 처리가 어렵기 때문에 DBMS와 웹서버 사이에서 제어해주는 프로그램
3. JSP
- [Dynamic Web Project] => [Web Project] => [New->JSP File]
- Java Server Page의 약자, 자바로 서버 페이지 작성하기 위한 언어
- HTML과 JSP 태그(스크립트릿)으로 구성되어 화면을 작성하는데 유리함.
- 자바 코드 쓰려면 스크립트릿<% %> 안에 써 주어야 함
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>Addition</title> </head> <body> <% int num1 = 20; int num2 = 10; int add = num1 + num2; %> <%=num1%>+<%=num2%>=<%=add%> </body> </html>
*JSP 기본태그
종류 | 사용용도 | 형식 |
스크립트릿(scriptlet) | 자바 코드 기술 | <% %> |
선언문(declaration) | 변수, 메서드 선언 | <%! %> |
표현식(expression) | 계산식, 함수 호출한 결과를 문자열 형태로 출력 | <%= %> |
주석(Comment) | JSP 페이지에 설명 넣기 | <%-- --%> |
지시자(Directive) | JSP 페이지 속성을 지정 | <%@ %> |
*지시자 종류
종류 | 사용 용도 |
page | 해당 JSP 페이지 전반적으로 환경 설정할 내용 지정 |
include | 현재 페이지에 다른 파일의 내용을 삽입 |
taglib | 태그 라이브러리에서 태그를 꺼내와 사용할 수 있는 기능 제공 |
4. 서블릿
- 자바 클래스 형태의 웹 애플리케이션
- javax.servlet.http Package 의 HttpServlet 클래스 상속받아 구현한 서브 클래스
- 출력스트림 통해 HTML을 문자열 형태로 클라이언트에게 전송
- 서블릿은 자바 코드 내부에 HTML 코드가 들어가는 구조 <-> JSP는 그 반대
- 복잡한 로직은 서블릿에 기술 결과만을 JSP 페이지를 통해 클라이언트에 제공하는 형태로 개발
- URL Mapping : /hello (URL 매핑하는 이유는 실제 서블릿 클래스 공개하지 않기 위해서)
- ContextPath : server.xml 파일의 <Context> 태그에 추가 path="/web-study-02")
- 서블릿 요청 위한 URL
http://localhost:8181/web-study-02/hello
[unit03\AdditionServlet03.java]
package unit02; import java.io.IOException; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; @WebServlet("/AdditionServlet03") public class AdditionServlet03 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int num1 = 20; int num2 = 10; int add = num1 + num2; request.setAttribute("num1", num1); request.setAttribute("num2", num2); request.setAttribute("add", add); RequestDispatcher dispatcher = request.getRequestDispatcher("addition03.jsp"); dispatcher.forward(request, response); } }
[addition03.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>Addition</title> </head> <body> ${num1}+${num2}=${add} </body> </html>
💻 클라이언트가 서버에 어떻게 요청하는가?
1. 전송방식
- form 태그 통해서 서버에 무엇인가 전달하거나 요청함
- get 방식 : 주소 창을 타고 넘어감. 보안에 취약. 255자 이하 적은 양의 데이터 전송(기본)
- post 방식 : html header 타고 넘어감. 대용량 데이터 전송
- action태그에 요청할 서블릿 이름, 전송버튼은 input태그 속성값을 submit으로 지정해야 함
- form 태그에 method 속성값으로 get => doGet() 메서드 호출, post => doPost() 호출
- a 태그로 링크 걸어주면 서블릿은 get 방식으로 요청한 것으로 봄.
<form method="get" action="CallServlet"> <input type="submit" value="전송"> </form>
<a href="CallServlet"> get 방식으로 봄 </a>
2. 서블릿 동작 원리
Browser ↔️ Web Server in WAS ↔️ Servlet Container ↔️ Thread ↔️ Servlet 객체
Instance 생성 : init() -> doGet() or doPost() -> destroy()


* JSP가 Servlet 컨테이너에서 동작하는 순서
- 브라우저에서 JSP 페이지("myCount.jsp")를 웹 서버에세 요청
- 웹 서버는 JSP에 대한 요청을 서블릿 컨테이너에게 넘김
- 서블릿 컨테이너는 해당 JSP 찾아서 서블릿파일(myCount_jsp.java) 생성
- 서블릿 파일은 컴파일 되어 실행가능한 상태의 서블릿 클래스 파일(myCount_jsp.class)로 생성되고 메모리에 적재
- 서블릿 수행 결과가 웹 서버에 전송
- 사용자는 서블릿 출력 결과인 HTML 형태로 응답 받음
3. 서블릿 인코딩
- 서블릿에서 응답시 한글 처리(출력시)
response.setContentType("text/html; charset=UTF-8");
- 입력 받는 과정에서도 별도의 처리 안 하면 한글 깨짐
- 서버설정파일 server.xml 에서 첫번째 <Connector> 태그에 URIEncoding="UTF-8" 속성 추가
4. 쿼리 스트링
- 서블릿 클래스에서 사용자가 입력한 값을 어떻게 얻어 오는가?
- 서버에서 클라이언트가 보낸 데이터를 얻어오기 위해 쿼리스트링(Query String) 사용
- 쿼리스트링은 get방식으로 요청시 URL 주소 뒤에 입력 데이터를 함께 제공하는 방법으로 "리소스?이름=값" 형식

5. 요청객체(request)와 파라미터(getParameter)
- input 태그의 name 속성값이 getParameter()의 매개변수
- getParameter()는 파라미터 값을 항상 String 형태로 얻어옴 => 계산에 쓰려면 형변환 필요
<input type="text" name="id">
String id = req.getParameter("id");
int age = Integer.parseInt(request.getParameter("age"));
- 같은 name 값 여러개 얻어오려면? getParameterValues()
<form action="process.jsp" method="post"> <input type="checkbox" name="fruits" value="apple"> Apple<br> <input type="checkbox" name="fruits" value="banana"> Banana<br> <input type="checkbox" name="fruits" value="orange"> Orange<br> <input type="submit" value="Submit"> </form>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Selected Fruits</title> </head> <body> <% // fruits라는 이름의 파라미터를 배열로 가져옴 String[] selectedFruits = request.getParameterValues("fruits"); // 선택된 과일 출력 if (selectedFruits != null) { out.println("<h2>Selected Fruits:</h2>"); for (String fruit : selectedFruits) { out.println("<p>" + fruit + "</p>"); } } else { out.println("<p>No fruits selected.</p>"); } %> </body> </html>
6. 유효성 체크(자바스크립트)
- 사용자가 폼에 입력한 데이터가 유효해야만 서버에서 정상 처리 가능
- 예) 아이디&나이는 반드시 입력되어야 하고 나이는 수치데이터만 입력가능하도록 체크
- 서버로 보내기 전에 입력한 데이터가 유효한지 판단은 자바스크립트로만 가능(js 확장자)
- JSP 파일의 <head>영역에 <script>태그 추가
<script type="text/javascript" src="param.js"></script>
'Spring&JSP' 카테고리의 다른 글
[JSP] 게시판 만들기 3 _ MySQL user 테이블 만들고, 이클립스에서 자바빈 만들기 (62) | 2024.12.03 |
---|---|
[JSP] 게시판 만들기 2 _ 로그인 페이지 + 부트스트랩 + mySQL 다운로드 (62) | 2024.12.02 |
[JSP] 게시판 만들기 1 _ 이클립스 자바 웹 프로젝트 환경설정 (6) | 2024.12.01 |
[JSP] forward(포워드) vs sendRedirect(리다이렉트) 방식 차이 (119) | 2024.11.27 |
[Spring] 제1강_ 스프링 개발을 위한 환경설정(윈도우) (0) | 2024.04.15 |