Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

IT BANK) JSP 9일차 - JSP(form, result, 응답) 본문

JSP/IT BANK - JSP

IT BANK) JSP 9일차 - JSP(form, result, 응답)

끈기JK 2022. 9. 20. 15:24

220919

 

 

-설문 조사 코드 작성

researchForm.jsp, researchResult.jsp

<title>researchForm</title>
</head>
<body>
	<form action="researchResult.jsp" method="post">
		이름 : <input type="text" name="name"><br>
		자기 소개<br>
		<textarea name="intro" rows="4" cols="10"></textarea>
		<br>
		<fieldset>
			<legend> 연령 조사 </legend>
			10대 <input type="radio" value="10대" name="age">
			20대<input type="radio" value="20대" name="age">
			30대<input type="radio" value="30대" name="age">
			40대<input type="radio" value="40대" name="age">
		</fieldset>
		<fieldset>
			<legend> 취미 조사 </legend>
			독서 <input type="checkbox" value="독서" name="hobby">
			춤추기 <input type="checkbox" value="춤추기" name="hobby">
			멍때리기 <input type="checkbox" value="멍때리기" name="hobby">
		</fieldset>
		<input type="submit" value="전송">
	</form>
</body>
<title>researchResult</title>
</head>
<body>
<h1>설문 조사 결과</h1>
	<%
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		String intro = request.getParameter("intro");
		String age = request.getParameter("age");
		String[] hobbys = request.getParameterValues("hobby");
	%>
	
	이름 : <%=name %><br> 
	소개 : <%=intro %><br> 
	나이 : <%=age %><br> 
	취미 : 
	<%
		if(hobbys != null){
			for(String hobby : hobbys)
				out.print(hobby + " ");
		}
	%>
	<br>
</body>

 

 

-BMI 구하기 코드 작성

bmiForm.jsp, bmiResult.jsp

사용자로부터 이름, 키, 체중 값을 입력 받아 비만도를 구하고 
결과를 출력 할 때 비만도 값 100을 기준으로 100 미만이면 저체중, 
100 이상 110 미만은 정상, 110 이상 120 미만 과체중, 120 이상 130 미만 비만, 
130 이상은 고도비만으로 출력 하시오.

비만도 계산 식 : 비만도(%) = 현재 체중 / 표준 체중 * 100
표준 체중 계산 식 : 표준 체중 = (현재 키 – 100) * 0.9

출력 예제 : 홍길동님의 비만도는 112.15% 로 과체중 입니다.

<title>bmiForm</title>
</head>
<body>
	 <form action="bmiResult.jsp" method="get">
	 	<fieldset>
	 		<legend>BMI 계산</legend>
	 		이름 : <input type="text" name="name"><br>
	 		신장 : <input type="text" name="height"><br>
	 		체중 : <input type="text" name="weight"><br>
	 	</fieldset>
	 	<input type="submit" value="결과 확인">
	 </form>
</body>
// bmiResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
	double bmi(double height, double weight){
		double std = (height - 100) * 0.9;
		double bmiData = weight / std * 100;
		return bmiData;
	}

	String bmiMessage(double bmiData){
		String message = "";
		
		if(bmiData > 130)
			message = "고도비만";
		else if(bmiData > 120)
			message = "비만";
		else if(bmiData > 110)
			message = "과체중";
		else if(bmiData > 100)
			message = "정상";
		else 
			message = "저체중";
		
		return message;
	}
%>
<%	
	request.setCharacterEncoding("utf-8");

	String name = request.getParameter("name");
	String he = request.getParameter("height");
	String we = request.getParameter("weight");
	
	double height = 0, weight = 0;
	
 	try{ // 예외가 발생 할 수 있는 코드
		height = Double.parseDouble(he);
		weight = Double.parseDouble(we);
	}catch(Exception e){
		// 예외가 발생을 하면 실행할 코드
	} 
	
	double bmiData = bmi(height, weight);
	String bmiMsg = bmiMessage(bmiData);
	out.print(name + "님의 비만도는 " + String.format("%.2f",  bmiData) + "%로 " + bmiMsg + "입니다.");	
%>

 


 

■ 응답 객체

 

response : 서버가 클라이언트에게 데이터를 응답하는 객체

sendRedirect() : 응답의 내용은 경로, 클라이언트가 이동할 경로를 제공함.
sendRedirect() 응답을 받은 클라이언트는 응답받은 경로를 서버에 요청해서 페이지를 전달받아 실행함.

 

-sendRedirect()

<title>ex4</title>
</head>
<body>
 <%
 	String location = "bmiForm.jsp";
 	response.sendRedirect(location);
 %>
</body>

개발자 도구 - 네트워크 - 이름: ex4.jsp 클릭 - 머리글 - 응답 헤더 - Location: bmiForm.jsp

 

-getRequestDispatcher()

request.getRequestDispatcher(path).forward(request, response)

ex5_A.jsp 페이지 안에서 ex5_B.jsp 페이지를 직접 실행한다. (sendRedirect()는 경로만 제공)

사용자가 직접 찾아가게 할건지(sendRedirect()), 아니면 직접 실행하게 할건지(getRequestDispatcher()) 선택이다.

 

아래 그림처럼 주소는 ex5_A.jsp 이나 페이지는 ex5_B.jsp 이다.

 

<title>ex5_A</title>
</head>
<body>
	<h3>ex5_A.jsp 페이지 입니다.</h3>
	 <%
	 	String path = "ex5_B.jsp";
	 	request.getRequestDispatcher(path).forward(request, response);
	 %>
</body>
<title>ex5_B</title>
</head>
<body>
	<h3>ex5_B.jsp 페이지 입니다.</h3>
</body>

 

 

-setAttribute()

: 속성 : 값을 쌍으로 저장하는 기능

  pageContext.setAttribute("id", "pageId");  // 하나의 페이지 안에서만 값 저장
  request.setAttribute("id", "requestId");  // 하나의 요청에 대해서만 값 저장.
  session.setAttribute("id", "sessionId");  // 하나의 웹브라우저 안에서만 값 저장. 세션을 로그인 정보와 같은 여러 페이지에서 사용할 정보를 담아서 쓸 예정
  application.setAttribute("id", "applicationId");  // 서버가 실행되는 와중에는 값 저장. 아이디와 비밀번호 같은 중요 정보는 저장하지 않음

<title>ex5_A</title>
</head>
<body>
	<h3>ex5_A.jsp 페이지 입니다.</h3>
	 <%
	 	// setAttribute() : 속성 : 값을 쌍으로 저장하는 기능
	 	pageContext.setAttribute("id", "pageId");
	 	request.setAttribute("id", "requestId");
	 	session.setAttribute("id", "sessionId");
	 	application.setAttribute("id", "applicationId");
	 
	 	String path = "ex5_B.jsp";
	 	request.getRequestDispatcher(path).forward(request, response);
	 %>
</body>
<title>ex5_B</title>
</head>
<body>
	<h3>ex5_B.jsp 페이지 입니다.</h3>
	페이지 : <%=pageContext.getAttribute("id") %> <br>
	요청 : <%=request.getAttribute("id") %> <br>
	세션 : <%=session.getAttribute("id") %> <br>
	어플리케이션 : <%=application.getAttribute("id") %> <br>
	<a href="ex5_C.jsp"> C 페이지로 이동</a>
</body>
<title>ex5_C</title>
</head>
<body>
	<h3>ex5_C.jsp 페이지 입니다.</h3>
	페이지 : <%=pageContext.getAttribute("id") %>
	요청 : <%=request.getAttribute("id") %>
	세션 : <%=session.getAttribute("id") %>
	어플리케이션 : <%=application.getAttribute("id") %>
</body>

왼쪽 사진 주소는 ex5_A.jsp, 본문은 ex5_B.jsp 이다.

 

 

-로그인 페이지 만들기

<title>loginIndex</title>
</head>
<body>
	<h2>환영합니다.</h2>
	<a href="loginForm.jsp">로그인 페이지</a>
</body>
<title>loginForm</title>
</head>
<body>
	<form action="loginResult.jsp" method="post">
		<input type="text" placeholder="아이디" name="id"> <br>
		<input type="password" placeholder="비밀번호" name="pw"><br> 
		<input type="submit" value="로그인">
		<input type="reset" value="취소" >	
	</form>
</body>
// loginResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 아이디/패스워드에 데이터가 없으면 loginForm.jsp로 이동  -->
<!-- 아이디/패스워드가 틀리면 loginFailed.jsp로 이동  -->
<!-- 아이디/패스워드가 맞으면 loginIndex.jsp로 이동 -->
<%
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	
	if(id.isEmpty() || pw.isEmpty()){
		response.sendRedirect("loginForm.jsp");
		return ;  // return시 페이지의 메서드 종료
	}
	
	if("admin".equals(id) && "1234".equals(pw)){
		response.sendRedirect("loginIndex.jsp");
	}else{
		response.sendRedirect("loginFailed.jsp");
	}
%>
<title>loginFailed</title>
</head>
<body>
	<h2> 로그인 실패 </h2>
	<a href="loginForm.jsp">로그인 페이지</a> | <a href="loginIndex.jsp">인덱스 페이지</a>
</body>