JSP 기초 - 내장객체
* 내장객체
1. out
: Servlet class에서 getWriter 메소드를 호출해서 얻은 PrintWriter 객체와 비슷한 역할
2. request
: 사용자 요청과 관련된 기능을 제공하는 내장 객체
(주로 클라이언트에서 서버로 전달되는 내용을 처리하기 위해 사용)
- Servelt 에서 배운 것과 거의 비슷하다고 생각하면 됨
<실습>
HTML 파일에 이와 같이 구현해보고
JSP 파일로 연결하여 평균, 학점을 구해 웹에 출력(응답)하기 !
1) HTML 파일
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="Ex01request.jsp">
<!-- 테두리 생성 태그 : fieldset(제목 달려면 legend태그와 같이 씀)-->
<fieldset style="width: 300px">
<legend>학점 확인 프로그램</legend>
<table>
<tr>
<td>이름</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>JAVA 점수</td>
<td><input type="text" name="java"></td>
</tr>
<tr>
<td>WEB 점수</td>
<td><input type="text" name="web"></td>
</tr>
<tr>
<td>DB 점수</td>
<td><input type="text" name="db"></td>
</tr>
<tr>
<td>Python 점수</td>
<td><input type="text" name="python"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="확인하기"></td>
</tr>
</table>
</fieldset>
</form>
</body>
</html>
2) JSP 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- Ex01request.html 에서 보내주는 데이터를 받아
출력 및 학점에 대한 로직 수행하기
-->
<%
// 1. 요청에 대한 인코딩 작업하기
request.setCharacterEncoding("UTF-8");
// 2. 전송된 데이터 값 가져오기
// 요청의 객체인 request 사용! (JSP 내에서는 내장객체로 존재함)
// -> 사용하고자 하는 객체를 생성하거나 선언할 필요가 없다!
String name = request.getParameter("name");
int java = Integer.parseInt(request.getParameter("java"));
int web = Integer.parseInt(request.getParameter("web"));
int db = Integer.parseInt(request.getParameter("db"));
int python = Integer.parseInt(request.getParameter("python"));
// 3. 평균 점수 구하기
double avg = (java + web + db + python) / 4;
// 4. 학점 판단하기
String grade = "";
if(avg >= 95 && avg <= 100){
grade = "A+";
}else if(avg >= 90){
grade = "A";
}else if(avg >= 85){
grade = "B+";
}else if(avg >= 80){
grade = "B";
}else{
grade = "F";
}
%>
<fieldset style="width: 300px">
<legend>학점 확인 프로그램</legend>
<table>
<tr>
<td>이름</td>
<td><%=name %></td>
</tr>
<tr>
<td>JAVA 점수</td>
<td><%=java %></td>
</tr>
<tr>
<td>WEB 점수</td>
<td><%=web %></td>
</tr>
<tr>
<td>DB 점수</td>
<td><%=db %></td>
</tr>
<tr>
<td>Python 점수</td>
<td><%=python %></td>
</tr>
<tr>
<td>평균</td>
<td><%=avg %></td>
</tr>
<tr>
<td>학점</td>
<td><%=grade %></td>
</tr>
</table>
</fieldset>
</body>
</html>
3. response
: JSP 페이지의 실행결과를 웹 브라우저로 되돌려줄 때 사용하는 내장객체
114 개념이랑 비슷한데 중간다리 역할?을 아주 잘 해준다!
<실습>
1) HTML 파일
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<fieldset align="center" style="width : 200px">
<legend>로그인</legend>
<form action="Ex05Login.jsp" method = post>
<p><input type="text" name="id"></p>
<p><input type="text" name="pw"></p>
<input type="submit" value="로그인">
</form>
</fieldset>
</body>
</html>
정보 보안을 위해서 post 방식으로 호출
2) JSP 파일 1 : 로그인 조건
- 클라이언트가 보내주는 데이터를 꺼내와 로그인 성공/실패 여부를 판단하고, 이에 따른 결과 페이지 연결하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
if(id.equals("smart") && pw.equals("123")){
response.sendRedirect("Ex05LoginSuccess.jsp?id=" + id);
// ?id= : 쿼리스트링 연결
// url 작성하는 문자열 안에선 띄어쓰기 없이!
}else{
response.sendRedirect("Ex05LoginFail.jsp");
}
%>
</body>
</html>
response.sendRedirect(); 대신에 forward 방식으로 페이지 이동과 데이터 전송을 할 수 있다.
RequestDispatcher 를 이용!
RequestDispatcher rd = request.getRequestDispatcher("Ex05LoginSuccess.jsp");
request.setAttribute("id", id); → key, value 값이 동시에 들어감
rd.forward(request, response);
3) JSP 파일 2 : 로그인 성공 시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String id = request.getParameter("id");
%>
<h1><%=id %>님 환영합니다!</h1>
<a href="Ex05Login.html">로그아웃</a>
</body>
</html>
4) JSP 파일 3 : 로그인 실패 시
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>로그인 정보를 다시 확인하세요!</p>
<a href="Ex05Login.html">로그인페이지</a>
</body>
</html>