웹 서버 동작 과정
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>
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 %>
(...생략...)
(...생략...)
//문자열과 정수 구분
나이 + 100(문자와 숫자 연결) : <%=age+100 %> <br>
정수형 변경된 나이 + 100(정수와 정수 더하기) : <%=age1+100 %><br>
(...생략...)
<!-- 나이가 20세 이상이면 "나이 성인", 20세 미만이면 "나이 미성년" out.println -->
<%
if(age1>=20) {
out.println(age1 + "세 성인");
} else {
out.println(age1 + "세 미성년");
}%><br>
-----------------------<br>
<%
if(age1>=20) {%>
<%=age1 %>세 성인
<% } else {%>
<%=age1 %>세 미성년
<%}%>
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>
주소에 정보가 보이지 않음.
단, 닉네임을 한글로 했을 경우에 그림 6과 같이 한글이 깨짐.
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);
%>
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>
그림 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>
단, 취미를 두 개를 선택하면 오류가 발생
<%@ 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>
취미를 선택하지 않으면 오류가 발생
'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 |