KDT/WEB

231128 WEB - JSP3(웹 서버 동작 과정, %, 내장객체)

001cloudid 2023. 11. 28. 12:52
728x90

웹 서버 동작 과정

html

사용자(유저, 클라이언트)가 브라우저에 URL을 입력 : http://localhost:8080/webProject/html2/test2.html

localhost:8080 서버에 test2.html 페이지를 요청

→ 웹 서버 전달

→ 웹 서버 안에 test2.html 페이지 찾기

→ 찾은 페이지를 사용자에게 전달(응답)

∴사용자가 요청하면 서버가 찾아서 사용자에게 응답

 

jsp 1

사용자(유저, 클라이언트)가 브라우저에 URL 입력 : http://localhost:8080/webProject/jsp1/form1.jsp

localhost:8080 서버에 form1.jsp 페이지를 요청

→ 웹 서버(아파치) 전달

→ 웹 서버 안에 form1.jsp 페이지 찾기

→ .jsp는 서버를 통해서만 실행이 됨. 따라서 jsp 처리하는 작업이 필요.

→ 웹 애플리케이션 서버(WAS, 톰캣, 웹 컨테이너)에 전달

→ java,jsp 명령을 처리하고 결과를 html로 변경하는 작업(응답 정보)

→ 응답 정보를 웹 서버에 전달

→ 응답 정보를 사용자에게 전달

 

jsp 2

사용자(유저, 클라이언트)가 브라우저에 URL 입력 : http://localhost:8080/webProject/jsp1/form1.jsp

→ http가 요청 정보를 가지고 localhost:8080 서버를 찾아감

localhost:8080서버에 form1.jsp 페이지를 요청

→ 웹 서버(아파치) 전달

→ 웹 서버 안에 form1.jsp 페이지 찾기

→ .jsp는 서버를 통해서만 실행이 됨. 따라서 jsp 처리하는 작업이 필요.

→ 웹 애플리케이션 서버(WAS, 톰캣, 웹 컨테이너)에 전달

→ request(http가들고 온 요청 정보를 저장),response(서버의 처리 결과 응답 정보를 저장),

     기억 장소를 만들어줌(객체생성)

→ web.xml 참조(설정 정보 확인)

→ servlet(명령을 처리하는 담당) 기억 장소를 만들어줌

→ java,jsp 명령을 처리하고 결과를 html로 변경하는 작업(응답 정보를 response에 저장)

→ 응답 정보를 웹 서버에 전달

→ 응답 정보를 http에 전달

→ 응답 정보를 사용자에게 전달

→ request, response, servlet 기억장소 해제 작업

 

2. %

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/form3.jsp</title>
</head>
<body>
<h1>jsp1/form3.jsp</h1>
<form action="formPro3.jsp" method="get">
닉네임 : <input type="text" name="nickname"><br>
나이 : <input type="text" name="age"><br>
<input type="submit" value="전송">
</form>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/formPro3.jsp</title>
</head>
<body>
<h1>jsp1/formPro3.jsp</h1>
<%
//사용자가 입력한 정보를 서버에 전달되어지면 서버 request 기억 장소가 할당 → request 기억 장소에 사용자가 입력한 요청 정보가 저장
//→ request기억 장소에 nickname=값, age=값 저장된 값을 가져와서 → String 변수에 저장 → 변수를 출력
String nickname = request.getParameter("nickname");
String age = request.getParameter("age");
//request는 전부 String형
%>
닉네임 : <%=age %> <br>
나이 : <%=nickname %> <br>
</body>
</html>

 

form3.jspformPro3.jsp
그림 1

3. 내장객체(implicit object)

JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체

import 없이 자유롭게 사용 가능, 객체 생성없이 직접 호출하여 사용할 수 있음

 

1) request

  • 클라이언트의 HTTP 요청 정보를 저장하는 객체(HTTP 헤더정보, 파라미터(태그) 등)
  • request JSP 내장객체 → HttpServletRequest 자바내장객체 → 기억 장소 할당(객체 생성)
  • 웹 애플리케이션 서버(WAS) 자동으로 HttpServletRequest 객체생성
  • HttpServletRequest request = new HttpServletRequest()

 

2) response

  • HTTP 요청에 대한 응답 정보를 저장한 객체
  • response JSP내장객체 → HttpServletResponse 자바내장객체 → 기억 장소 할당(객체 생성)

 

3) session

  • 클라이언트의 세션 정보(연결정보)를 저장한 객체
  • session JSP내장객체 → HttpSession 자바내장객체 → 기억 장소 할당(객체 생성)

 

4) pageContext

  • 페이지 실행에 필요한 컨텍스트 정보(프로젝트 한 페이지 정보)를 저장한 객체
  • pageContext JSP내장객체 → PageContext 자바내장객체 → 기억 장소 할당(객체 생성)

 

5) out

  • 응답 페이지 전송을 위한 출력 스트림(출력정보) 객체
  • out JSP내장객체 → JspWriter 자바내장객체 → 기억 장소 할당(객체 생성)

 

6) application

  • 동일한 애플리케이션의 컨텍스트 정보(서버 정보)를 저장한 객체
  • application JSP내장객체 → ServletContext 자바내장객체 → 기억 장소 할당(객체 생성)

 

7) config 

  • 해당 페이지의 서블릿 설정 정보(초기화 정보)를 저장한 객체

 

8) page 

  • 해당 페이지 서블릿 객체(인스턴스)

 

9) exception

  • 예외 처리를 위한 객체

1) request

HttpServletRequest 자바내장객체 메서드()

  • request.getParameter("파라미터이름")
    파라미터이름에 저장된 값을 리턴, 파라미터이름에 해당하는 값이 없으면 null값으로 리턴.
    request.getParameter("파라미터이름") → 리턴타입 String → 파라미터 value값 저장
  • request.getParameterValues("파라미터이름")
    파라미터 이름으로 지정된 파라미터의 모든 값을 String 배열로 리턴. 하나의 이름으로 여러 개의 값을 가질 수 있는 checkobx와 같은 태그를 사용했을 때에 주로 사용.
    request.getParameterValues("파라미터이름") → 리턴타입 String[] 배열

※ 문자열(String) → 정수형(int)으로 변경하는 명령(메서드, 함수)

문자열은 참조형, 정수형은 기본자료형. 형 변환이 이루어질 수 없음.

Integer.parseInt(문자열) → 리턴할형 int형으로 리턴

 

(...생략...)
String nickname = request.getParameter("nickname");
String age = request.getParameter("age");
int age1 = Integer.parseInt("5");
%>

닉네임 : <%=nickname %> <br>
나이 : <%=age %> <br>
정수형 변경된 나이 : <%=age1 %>



//<%
//String nickname = request.getParameter("nickname");
//String age = request.getParameter("age");
//int age1 = Integer.parseInt(age);
//%>
//닉네임 : <%=nickname %> <br>
//나이 : <%=age %> <br>
//정수형 변경된 나이 : <%=age1 %>

(...생략...)

 

그림 2.

 

(...생략...)
//문자열과 정수 구분
나이 + 100(문자와 숫자 연결) : <%=age+100 %> <br>
정수형 변경된 나이 + 100(정수와 정수 더하기) : <%=age1+100 %><br>
(...생략...)

 

 

ex4 결과
그림 3

 

<!-- 나이가 20세 이상이면 "나이 성인", 20세 미만이면 "나이 미성년" out.println -->
<%
if(age1>=20) {
out.println(age1 + "세 성인");
} else {
out.println(age1 + "세 미성년");
}%><br>
-----------------------<br>
<%
if(age1>=20) {%>
<%=age1 %>세 성인
<% } else {%>
<%=age1 %>세 미성년
<%}%>

 

ex5 결과
그림 4

 

form의 method="post"로 바꿔보면

<form action="formPro3.jsp" method="post">
닉네임 : <input type="text" name="nickname"><br>
나이 : <input type="text" name="age"><br>
<input type="submit" value="전송">
</form>

 

form method=&quot;post&quot;
그림 5. form method="post"

주소에 정보가 보이지 않음.

 

단, 닉네임을 한글로 했을 경우에 그림 6과 같이 한글이 깨짐.

form method=&quot;post&quot;
그림 6. form method="post" 특징

 

method="post"형태로 데이터가 전송되어지면 특이한 방식으로 전송하기 때문에 request 한글 처리 설정을 해줘야함.

<h1>jsp1/formPro3.jsp</h1>
<%
request.setCharacterEncoding("utf-8");
String nickname = request.getParameter("nickname");
String age = request.getParameter("age");
int age1 = Integer.parseInt(age);
%>

 

request.setCharacterEncoding(&quot;utf-8&quot;)
그림 7. request.setCharacterEncoding("utf-8")

 

String age = request.getParameter("age"); int age1 = Integer.parseInt(age);
== int age2 = Integer.parseInt(request.getParameter("age"));

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/form4.jsp</title>
</head>
<body>
<h1>jsp1/form4.jsp</h1>
<form action="formPro4.jsp" method="post">
아이디 : <input type="text" name="id"><br>
비밀번호 : <input type="password" name="pw"><br>
성별 : <input type="radio" name="gender" value="남"> 남성
<input type="radio" name="gender" value="여"> 여성<br>
<!-- radio name을 같게 하면 그룹으로 묶어서 둘 중 하나 선택가능 -->
취미 : <input type="checkbox" name="hobby" value="게임">게임
<input type="checkbox" name="hobby" value="여행">여행
<input type="checkbox" name="hobby" value="축구">축구<br>
<!-- checkbox name이 같더라도 여러 개 선택 가능 -->
등급 : <select name="grade">
<option value="1">1등급</option>
<option value="2">2등급</option>
<option value="3">3등급</option>
</select><br>
자기소개 : <textarea name="intro" rows="5" cols="10">value값</textarea>
<input type="submit" value="회원가입">
</form>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/formPro4.jsp</title>
</head>
<body>
<h1>jsp1/formPro4.jsp</h1>
<%
//1. 사용자가 입력한 내용을 http가 요청정보를 들고 서버에 전달
//2. 서버에 request,response 기억장소를 만들고
//3. request에 http가 들고 온 요청정보를 저장
//4. post방식으로 데이터를 가져오면 request 한글설정
//5. request에서 파라미터(태그) 값을 가져와서 변수에 저장
//6. 화면에 출력

//request 한글 설정
request.setCharacterEncoding("utf-8");
//request 파라미터 값 id, pw, gender, hobby, grade, intro 값을 가져와서 변수 저장
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String gender = request.getParameter("gender");
String hobby = request.getParameter("hobby");
String grade = request.getParameter("grade");
String intro = request.getParameter("intro");
%>
아이디 : <%=id %><br>
비밀번호 : <%=pw %><br>
성별 : <%=gender %><br>
취미 : <%=hobby %><br>
등급 : <%=grade %><br>
자기소개 : <%=intro %><br>
</body>
</html>

 

form4.jspformPro4.jsp
그림 8. ex6 결과

그림 8에서 form4.jsp 취미를 여러 개 체크했음에도 formPro4.jsp에서는 하나만 되는 것을 알 수 있다.

getParameter는 하나의 결과만 들고 온다. getParametervalues를 사용해야함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/form4.jsp</title>
</head>
<body>
<h1>jsp1/form4.jsp</h1>
<form action="formPro4.jsp" method="post">
아이디 : <input type="text" name="id"><br>
비밀번호 : <input type="password" name="pw"><br>
성별 : <input type="radio" name="gender" value="남"> 남성
<input type="radio" name="gender" value="여"> 여성<br>
<!-- radio name을 같게 하면 그룹으로 묶어서 둘 중 하나 선택가능 -->
취미 : <input type="checkbox" name="hobby" value="게임">게임
<input type="checkbox" name="hobby" value="여행">여행
<input type="checkbox" name="hobby" value="축구">축구<br>
<!-- checkbox name이 같더라도 여러 개 선택 가능 -->
등급 : <select name="grade">
<option value="1">1등급</option>
<option value="2">2등급</option>
<option value="3">3등급</option>
</select><br>
자기소개 : <textarea name="intro" rows="5" cols="10">value값</textarea><br>
<input type="submit" value="회원가입">
</form>
</body>
</html>

 

getParametervalues 사용

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/formPro4.jsp</title>
</head>
<body>
<h1>jsp1/formPro4.jsp</h1>
<%
//request 한글 설정
request.setCharacterEncoding("utf-8");
//request 파라미터 값 id, pw, gender, hobby, grade, intro 값을 가져와서 변수 저장
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String gender = request.getParameter("gender");
// String hobby = request.getParameter("hobby");
//이름 하나에 값이 여러 개 일 경우 getParameterValues() → 배열변수 저장
String hobby[] = request.getParameterValues("hobby");
String grade = request.getParameter("grade");
String intro = request.getParameter("intro");
%>
아이디 : <%=id %><br>
비밀번호 : <%=pw %><br>
성별 : <%=gender %><br>
취미주소 : <%=hobby %><br>
취미내용 : <%=hobby[0] %> <%=hobby[1] %> <%=hobby[2] %><br>
등급 : <%=grade %><br>
자기소개 : <%=intro %><br>
</body>
</html>

 

ex7 결과
그림 9

단, 취미를 두 개를 선택하면 오류가 발생

취미를 2개 선택했을 때
그림 10. 취미를 2개 선택했을 때

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/formPro4.jsp</title>
</head>
<body>
<h1>jsp1/formPro4.jsp</h1>
<%
//1. 사용자가 입력한 내용을 http가 요청정보를 들고 서버에 전달
//2. 서버에 request,response 기억장소를 만들고
//3. request에 http가 들고 온 요청정보를 저장
//4. post방식으로 데이터를 가져오면 request 한글설정
//5. request에서 파라미터(태그) 값을 가져와서 변수에 저장
//6. 화면에 출력

//request 한글 설정
request.setCharacterEncoding("utf-8");
//request 파라미터 값 id, pw, gender, hobby, grade, intro 값을 가져와서 변수 저장
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String gender = request.getParameter("gender");
// String hobby = request.getParameter("hobby");
//이름 하나에 값이 여러 개 일 경우 getParameterValues() → 배열변수 저장
String hobby[] = request.getParameterValues("hobby");
String grade = request.getParameter("grade");
String intro = request.getParameter("intro");
%>
아이디 : <%=id %><br>
비밀번호 : <%=pw %><br>
성별 : <%=gender %><br>
취미주소 : <%=hobby %><br>
<%-- 취미내용 : <%=hobby[0] %> <%=hobby[1] %> <%=hobby[2] %><br> --%>
취미개수 : <%=hobby.length %><br>
등급 : <%=grade %><br>
자기소개 : <%=intro %><br>
</body>
</html>

 

취미 개수
그림 11. 취미 개수

취미를 선택하지 않으면 오류가 발생

취미 개수를 선택하지 않았을 때
그림 12. 취미 개수를 선택하지 않았을 때

728x90

'KDT > WEB' 카테고리의 다른 글

231201 WEB - JSP5(내장객체)  (0) 2023.12.01
231130 WEB - JSP4(내장객체)  (0) 2023.11.30
231127 WEB - JSP2(웹 서버 동작 원리, 주석, %)  (0) 2023.11.27
231122 WEB - CSS9, JSP1(서버의 역할)  (0) 2023.11.22
231120 WEB - CSS8  (0) 2023.11.20