안녕하세요
이번 시간에는 <form> 태그 안에 있는 아이디, 비밀번호 값을
서버에 전송을 하면 서버가 특정한 아이디가 오면 response 하는 소스 코드를
올려봅니다.
때에 따라 유용한 소스가 될 수 있으니 한번 봐주세요~!
자 그럼 렛츠고!!
==========================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<style>
<!--
div{
margin:10px;
}
-->
</style>
<h1>response에 대해 알아보자.</h1>
<h2>테스트 방법 : 아이디 입력 박스에 killer, forward, redirect 값을 입력하여 테스트 해보세요.</h2>
<form action="ex11Response.jsp" method="POST">
<div>
<label for="uid">아 이 디</label>
<input type="text" name="userId" id="uid">
</div>
<div>
<label for="upwd">비밀번호</label>
<input type="password" name="pwd" id="upwd">
</div>
<div>
<button>로그인</button>
</div>
</form>
==========================================================
위 소스는 그냥 단순한 폼 소스입니다.
저기서 중요한건 <form action="ex11Response.jsp" method="POST"> 으로
로그인 버튼을 누르면 데이터가 ex11Response.jsp로 POST 방식으로 넘겨줍니다.
진짜 중요한건 데이터를 처리하는 서버 소스입니다.
==========================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1. 아이디, 비번값 받아 출력하기 (서블릿,jsp에 쓰는 것은 name, id는 자바스크립트)
String userId=request.getParameter("userId");
String pwd=request.getParameter("pwd");
out.println(userId+"/"+pwd);
//2. 아이디, 비번이 null이면 ex11Form.jsp 페이지로 redirect 시키기
//폼을 통해서 바로 들어가는 경우..
if(userId==null||pwd==null){
//페이지 이동 - ex11Form.jsp에 대한 요청을 새롭게 보낸다
//페이지가 이동된 이후에도 로직을 수행하므로 return문을 기술하자
response.sendRedirect("ex11Form.jsp");
return;
}
System.out.println("여기도 들어오나요???");
//3. 빈 문자열 체크
if(userId.trim().isEmpty() || "".equals(pwd.trim())){
//잘못된 요청이라는 에러 응답 처리 -- 400 Error
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//4. 아이디가 killer라면 들어오면 안됨
if(userId.equalsIgnoreCase("killer")){
//접근 금지 에러 - 403 Error
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
//5. 아이디가 redirect
if(userId.trim().equals("redirect")){
//request에 저장 => setAttribute(key,val)
request.setAttribute("msg", userId+"님 환영합니다.");
response.sendRedirect("Welcome.jsp");
return;
}
//6. 아이디가 forward 일 경우
if(userId.trim().equals("forward")){
request.setAttribute("msg", userId+"님 환영합니다.");
%>
<jsp:forward page="Welcome.jsp"/>
<%
return;
}
%>
<h1 style="color:blue"><%=userId%>님 환영합니다</h1>
<h1>페이지 이동 방식</h1>
<h2>1) redirect 이동 방식</h2>
<ol>
<li>새롭게 요청(request)을 보내 페이지를 보여준다.</li>
<li>새로운 요청을 보내기 때문에 url이 새로운 url로 바뀐다.</li>
<li>이동시킨 페이지와 이동된 페이지를 서로 다른 request에 지정한 값을 기억하지 못한다.</li>
</ol>
<h2>2) forward 이동 방식</h2>
<ol>
<li>서버 내부에서 페이지 이동이 일어난다</li>
<li>서버 내부에서 이동하므로 요청 url은 이전 url을 유지한다.</li>
<li>이동시킨 페이지와 이동된 페이지가 같은 request를 공유한다.</li>
</ol>
==========================================================
자 그럼 위의 소스를 실행하면 어떤 결과가 나올까요?
잘 봐주세요~!!
일단 아이디, 패스워드에 빈 공백이 있는 문자열을 넣고 전송하면
HTTP 400 에러가 발생합니다.
이번에는 아이디를 killer로 주고 데이터를 전송하면 Http 403 에러가 발생합니다.
이번에는 아이디를 redirect 로 하면 'Welcome.jsp' 라는 곳으로 url이 바뀝니다
하지만 아이디를 forward로 하면..
ex11Response.jsp 로 그대로 됩니다.
댓글 없음:
댓글 쓰기