String cpath = requst.getContextPath();
// 프로젝트명, 즉, 최상위 경로를 문자열로 반환
String serverIp = request.getLocalAddr();
// 서버의 ip를 반환
String clientIp = request.getRemoteAddr();
// 클라이언트의 ip를 반환
int serverPort = request.getLocalPort();
// 서버의 포트 번호(= 서비스 번호)를 반환
int clientPort = request.getRemotePort();
// 클라이언트의 포트 번호를 반환
String method = request.getMethod();
// 요청 메서드를 반환 (GET, POST)
String filePath = request.getRealPath("ex06.jsp");
// 지정 파일의 실제 위치를 반환
String uri = request.getRequestURI();
StringBuffer url = request.getRequestURL();
request.hashCode();
// 이거는 오브젝트로부터 상속받아 쓰는것이구..
※ 192.168.000.14(가주) 이런 숫자주소를
글자로 바꾼 것을 도메인이라고 함
<ul>
<li>cpath = <%=cpath %></li>
<li>serverIp = <%=serverIp %></li>
<li>clientIp = <%=clientIp %></li>
<li>serverPort = <%=serverPort %></li>
<li>clientPort = <%=clientPort %></li>
<li>method = <%=method %></li>
<li>filePath = <%=filePath %></li>
<li>uri = <%=uri %></li>
<li>uri = <%=url %></li>
</ul>

출력의 결과는 이렇다
url은 전체 주소를 보여주는
localhost 자리에 자신의 아이피를 입력하면
2번째의 serverIp와
3번째의 clientIp가 변하게 된다
요청(= request)
: 클라이언트가 서버에 통신을 보내는 것
응답(=response)
: 서버가 클라이언트에 통신을 보내는 것
※ 요청/응답을 처리를 지원하기 위해서
JSP는 이미 '내장 객체'로 존재하고 있다.
※ 응답은 주로
1) 에러코드를 보내거나
2) 리다이렉트 메세지를 보내거나
3) 쿠키전송에 사용한다
※ HTTP 상태 코드
https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
링크로 들어가서 확인해두면 좋음
100번대.. 200번대.. 300번대.. 400번대.. 등등있음
*300번대가 리다이렉션
로그인이 필요한 서비스가 있으면 ex)네이버-메일
메일창을 열기전에 로그인 창으로 보내버린다
*400번대는 보통 페이지가 없거나 열 수 없는 형태임
"404는 not fountd" 유머도 있음
response.sendError(404);
: 페이지가 없다
response.sendError(404, "에러메세지)
: -sendError(코드,메세지)
response.sendRedirect("ex01.jsp");
: ex01.jsp로 보내버림
: 리다이렉트는 외부 사이트로도 지정 가능
※ 페이지 전환의 방법에는
1) a href 태그를 사용하는 방법과
2) redirect를 사용하는 방법이 있음
cf_ 이 둘의 차이점은
a태그는 링크를 사용해서 보내는 것이고
redirect는 강제로 보내버리는 것이다
이번에 input 으로 입력받는 태그가 아니라
select로 option을 선택해서 클릭하는 방법으로 작성해봄
<form action="ex06_result.jsp>
<select name="site">
<option value="https://www.naver.com/">네이버</option>
<option value="https://www.youtube.com/">유튜브</option>
<option value="https://www.google.com/">구글</option>
</select>
<button>submit</button>
</form>
※ Parameter을 넘겨받아 처리하는 방법들
1) request.getParameter("");
2) <jsp:useBean id="" class="."/>
<jsp:setproperty property="*" name="pre"/>
여러개의 parameter가 있으면 빈즈를 사용하지만
지금은 셀렉트 site 하나를 처리할거라
getParameter로 처리한다
<%
String site = request.getParameter("site");
response.sendRedirect(site);
우리 눈에는 순식간에 지나가서 확인이 불가능하지만
F12를 눌러서 네트워크 문서 에서
새로 생기는 페이지를 확인해보면
ex06.jsp 와
ex06_result.jsp 두가지가 생성되어있을 것이다
재요청(F5)으로 확인이 가능함
%>
------------------------------------
※ 쿠기에 대해서 살짝 설명을 하자면
쿠기는 서버에서 자주 사용되는 것을
서버가 아니라
사용자의 pc에 저장하는 형태임
그리고 어떤 팝업창에 대해서
팝업창을 일주일동안 보지 않기 체크를 하고 닫으면
뜨지 않는데 이것을 "1 - 로컬베리어블" 이라고 한다
아래의 사진을 첨부할테니 확인해보자
c로 시작하는 것이 없었는데
체크박스에 체크를 하고 없앴더니
다시 열리는 기간이 생기고 등등
<%--
quiz1.jsp IP/PW를 입력 받을 폼을 작석
데이터는 quiz1_login.jsp로 전송
단, POST로 전송
quiz1_login.jsp Account 클래스로 계정을 3개 정도 선언부에 생성해둔다
quiz1.jsp에서 전송된 계정 정보와
일치하는 계정이 있으면 quiz1_success.jsp로 리다이렉트
일치하는 계정이 없으면 quiz1_faill.jsp로 리다이렉트
quiz1_success.jsp 로그인 성공을 화면에 출력. ※ IP/PW는 출력이 안된다
quiz1_faill.jsp 로그인 실패를 화면에 출력
Account.java IP/PW를 가지는 Java Beans
--%>
<style>
fieldset { display: inline-block; }
</style>
<fieldset>
<legend>로그인</legend>
<form action="quiz1_result.jsp" method="POST">
<p><input name="userid" type="text" placeholder="ID" required></p>
<p><input name="userpw" type="password" placeholder="PW" requried></p>
</form>
<button>로그인</button>
</fieldset>
<% requst.setCharacterEncoding("utf-8"); %>
<jsp:useBean id="input" class="beans.Account"/>
<jsp:setProperty property="*" name="input"/>
package beans;
public class Account {
1) private String userid;
private String userpw;
3) public Account () {};
public Account (String userid, String userpw) {
this.userid = userid;
this.userpw = userpw;
}
// 이거는 기본 생성자빼고 추상메서드 만드는
// 우클릭 - 소스 - 해쉬어쩌고? 기능이 있음
// 참고는 day05에 2) , 3) 둘 다 만드는 법 이씀
2) 추가 설명하자면
private에서 꺼내와서 쓸 수 있도록
getUserid() setUserid()
+
getUserpw() setUserpw() 를 만드는 과정
그럼 밖에서 Account.java 소스?를?
import 해주면 쓸 수 있도록.
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
bublic String getUserpw() {
return userpw;
}
public void setUserpw(String userpw) {
this.userpw = userpw;
}
4) @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((userid == null) ? 0 : userid.hashCode());
이런식으로 Override 하는 것을
자동으로 해주자
이거는 quiz1_login.jsp 에서
선언부에 public으로 만든 뒤 실행
}
}
<%!
2) 선언부의 함수 accs는
beans에서 만든 Account를 [] 배열형식으로 작성한거임
그래서 배열안에 들어가는 매개변수는
[userid,userpw] 가 되는 것임
baens에서 Account.java를
import 시켜서 사용하고
accs 라는 새로운 배열 함수를 생성한 뒤,
new Account() 새로운 배열을 만들고
() 안에 값을 집어 넣어 생성~! 한다.
Account[] accs = new Account[] {
new Account("root", "qwe"),
new Account("user", "1234"),
new Account("eme", "ja")
};
--------------------------------------------------
4)
public Account login(Account input) {
for (int i = 0; i < accs.length; i++) {
if (accs[i].equals(input)) {
return accs[i];
}
}
return null;
}
%>
1)
<% request.setCharacterEncoding("utf-8"); %>
<jsp:useBean id="input" class="beans.Account"/>
<jsp:setProperty property="*" name="input"/>
--------------------------------------------------
<%
3) 일단 어떻게 작동시킬지 틀을 만든다
아마 작성하면 다 에러표시가 뜰꺼임
1_login()함수를 만든다
: for문으로 돌려서
입력한 문장이 선언부에 있는
배열의 내용과 일치하는지
화긴~~~
2_fail/success 파일 만들고 작성
Account user = login(input);
String site = "quiz1_fail.jsp";
fi (user != null) {
site = "quiz1_success.jsp";
}
response.sendRedirect(site);
%>
<h1>로그인 실패~!</h1>
<hr>
<a href="quiz.jsp">
<button>quiz1</button>
</a>
<h1>로그인 성공~!</h1>
<hr>
<h4><%=request.getParameter("userid") %>님 로그인을 환영합니다</h4>
<a href="quiz1.jsp">
<button>quiz1</button>
</a>
이렇게 작성해서 만들고
지정된 ID/PW를 입력해서 로그인에 성공하면
의문점이 들게 된다.

분명 request.getParameter("userid"); 값을
받았는데 userid가 출력되지 않고
null값이 들어가 있는 것이다.
이 내용은 정리해서 간략하게 말하면
Redirect는 request를 유지시키지 못한다는 의미이다.
그럼 유지를 시키기 위해서는 forward라는 것을 사용해야한다.
다음 차시에 forward와 MVC1,MVC2,Spring MVC에 대해서 다뤄보겠다
submit : 제출하다
일단 이 페이지 내에 있는 내용들은
머릿속에 다 집어 넣었고
어떻게 사용되고 어떻게 굴러가는지 이해시켰다...
생성자 접근제어자에 관해서 좀 더 이해하더니 편해졌고
이해하려고 관련 영상부터 자바 복습까지 싹 하니까
아침7시다.. 12시에 잘까 말까 하다가 적었더니
엄청나당,,,
근데도 아직 알아야 할 것들이 많은게.. 뭔가 즐겁다ㅋㅋ
자바를 기초 배우고 JSP로 넘어가야하는데
자바 + JSP 하면서 JSP를 진행하는 느낌이라
기초를 많이 복습? 다시 강의를 들으면서 하는데
쓰는 곳을 알고 어느 부분을 다시 집중해서 복습하니
좀 더 재밌는것같기도..
여튼 이거 쓰고 이해한다고 고생해쑴 바보씨!!~!