페이지 이동 : forward 와 redirect
 1. forward : 원래는 요청된 주소의 Servlet이 요청에 대해 응답을 해야하지만
     forward를 통해서 웹어플리케이션내의 다른 자원(jsp or url)으로 이동시키는 것을 말한다.
ex)
RequestDispatchcer rd =
  req.getRequestDispatcher("/han.jsp");
rd.forward(req,resp);

특징 :
 -forward방식은 내부에서만 접근이 가능.
 -외부자원은 불가능.
 -요청한 사용자의 주소는 바뀌지 않는다.
 -request와 response가 딱 한번일어난다.
 -주소는 첫번째 요청한 그대로 유지된다.
 -동일 웹어플리케이션 내의 자원으로만 이동된다.


 2. redirect : 원래 요청한 주소를 다른주소로 redirect(재방향)
     시켜주는 것으로 첫번째 받은 요청에 서버는301상태정보와 새로운 url을 가지고 클라이언트에게 응답하고
     다시 클라이언트(웹브라우져)가 새로운 url을 요청하고 거기에 따른 응답이 이뤄지는 것을 말한다

* redirect : 2번 request , response가 이뤄짐.
    : 외부자원으로도 보낼수 있다.
    : sendRedirect 되면서 주소도 바뀌게 된다.
    : redirect : 외부 URI나 어느곳으로든 보낼 수 있다.
특징:
 -주소는 완전히 다른것으로 바뀐다.
 -동일 웹어플리케이선이 아니더라도 얼마든지 갈 수 있다.
 -페이지 이동 : forward , redirect를 많이 사용한다,

3. 영역별 객체
 <영역 : 어디에서 존재하는지??>
 <jsp에서는 8개+1개 있음 ㅋㅋ>

 1) ServletContext
  : 오로지 하나만 존재함. 모든영역에서 참조가 될수 있다.
    <only one> : 맨위에 존재하게 됨.(root)
  : 사용방법 : getServletContext(); return ServletContext

 2) ServletConfig
  : ServletConfig : Servlet 마다 존재함.
 
 3) HttpSession
  : 접속한 웹브라우져당 생기게 된다(Client당)
  : OSI 7layer에서 Session계층 = HttpSession
  : 웹브라우져를 끌때까지는 생명력있음.
 
 4) HttpServletRequest
  : 특정한 자원을 주소에 요청시 그때 생성됨
    요청에 따른 응답이 발생하면 사라짐,(일회성)


-----------------------------------------------------
실습 : 방명록 완성하기~!!!! DB연동
-----------------------------------------------------

Servlet사용하기에는 너무 힘드니까 분업화(출력화면은 jsp로 빼돌리자.)
List를 Jsp에서 보여질 수 있게하고.내부적인 부분은 servlet에서 처리.

ServletContext(창고), ServletConifg
HttpSession(창고) ,  HttpServletRequest(창고)

< forward >
 req.getRequestDispatcher("주소"); : return RequestDispatcher

RequestDispatcher rd =
 req.getRequestDispatcher("/guestbook/list.jsp");
rd.forward(req,resp)

ps.
내개념:
RequestDispatcher rd =
 getRequestDispatcher("<생략: ContextRoot>/guestbook/list.jsp");
 //상대
rd.forward(request,response);
: 해당 method에 있는 request와 response까지 전송.
 
//1. request.Attribute창고 사용
 req.setAttribute("ttt","물건을 넣어요~~");

ps.
req.setAttribute("tag","Attribute 내용");

//2. list.jsp에서 창고내용을 끄집어내는것
<%=
 request.getAttribute("ttt")
%>

/*
즉 , Java에서 처리한 Attribute를 정해서
List에서 가져가는것.
Servlet 과 jsp에서 물건을 주고 받으려면
Servlet 에서 물건을 넣고 Jsp에서 물건을 받게해야한다.
*/

//3. list.jsp의 맨위에 설정에서 import="java.sql.*"
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR" import="java.sql.*"%>

* import 시에는 ","를 사용해서 연속할수있음
* 또는 import 를 더 써서 하든지...

----------------------------------------------------
잠시 jsp basic
실습 : jsp01.jsp
----------------------------------------------------

 JSP (Java Server Pages)
*Servlet으로 모두 변환되어 실행된다.
<Servlet으로 사용하기 너무 힘들어 생겨난 jsp>

1. 장점
 1. Servlet보다 쉽고 빠르다.
 2. 디자인(html/js)과 로직(java)를 분리시킬 수 있다.
 3. 즉 디자이너와 프로그래머의 일을 분업화 할 수 있다.
 4. 프로그래머가 직접 코딩한 servlet보다 최적화 된
  Servlet을 생성시켜 효율적은 코드를 생산한다.
 5. Java Beans 사용이 쉽다.
 6. 웹 어플리케이션 상에서 변수의 유효범위(scope) 
  설정이 간편하다.

2. jsp를 이루는 구성인자
 1. 지시어(?) : directive
  : 현재 jsp페이지의 속성을 지시하는데 사용.

  1) 형태 : <%@지시어 %>
  2) 종류 : page,include,taglib
ex)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR" import="java.sql.*" %>

 2. Scripting 원소
  1) 기능 : jsp페이지에서 자바코드를 직접 사용할수 있게
       해주는 기능제공
  2) 종류 및 형태
   1) delaration  : <%! 자바코드 %>
   2) Scriptlet  : <% 자바코드 %>
   3) 식(expretion) : <%= 자바코드 %>

  delaration(선언) : method,멤버변수 선언시 사용.
  Scriptlet : 자바코드 실행
  expretion : 화면에 문자를 보여줄때 사용

<%
 //javaSource가 들어가는 부분
 while(true){
%>

<%=
 request.getAttribute("ttt")
%>


/*
**javacode내에서
**out : 화면 출력 기본객체
**out.write("i의 값은 : "+i);
*/  
이런식으로 기본객체가 총 9개가 있다.
 즉, <% 자바 %>가 먼저 실행된다.

jsp가 알아서 servlet으로 변환시켜준다.
 주의 "식"이는 out.print로 변환되기때문에
 문장완료후 ";"붙이면 안되요~~

참고, jsp는 프로그램적으로 돌아가기때문에 소스를
  다운로드 할수가 없어용~

구구단을 만들기
 입력받은 폼으로 단수가 출력되도록 하기.
 <form action="jsp01.jsp">
 <input type="text" name="dan" />
 <input type="submit"/>

*자료 유효성체크
<script type="text/javascript">
 function chk(){
  var s = document.getElementByID("dan");
  //숫자만 입력하도록 정규식 거는것.
  var re = new RegExp(/^[0-9]+$/);
  // * : 0개이상
  // + : 1개이상

  //아무것도 입력하지 않을경우.
  if(s.value.lenth==0) return;
 
  //숫자이외의 값을 입력했을때
  if(!re.test(s.value)){
   alert("숫자만 입력가능합니다");
   dan.value("");
   return;
  }
     document.f.submit();
  //document.form[0].submit();
 }
 <form action="jsp01.jsp" name="f">
  <input type="text" name="dan"  id="dan" />
  <input type="button"  onclick="chk();" value="전송"/>
 </form>
//ps : 그래서 submit보다는 그냥 버튼으로 onclick거는 경우가 많다.
 
-------------------------------------------------------
 scriptlet : 천대받는...ㅜㅜ 구구단찍을때 사용한것처럼
 최근에는 사용 안함...
 발전 상황을 이해할것.
 servlet(캐삽질..맨처음) - scriptlet(php ,asp ,순수jsp)
-------------------------------------------------------
!!정리할것!!

web환경으로 바뀌면서 실행방법만 달라진것뿐이랍니다~~

* 5개가 제일중요해~!!!
application : ServletContext(webapplication에서 onlyone)   :창고
config  :  ServletConfig(Servlet마다 하나씩있다.)
session  :  HttpSession(주로 로근인시 사용(사용자정보)) :창고
request :  HttpServletRequest: 창고역할
* Atrribute = Object
* Parameter = String
 : setAttribute(arg,Object) , getAtrribute(arg);
 : request.getAttribute(arg) : return Object
 : getParameter(String)

response :  HttpServletResponse

pageContext : 나중에 자세히 설명해준다고했음.
 : custom tag 직접만들때 볼것.
page : 역시..., 간단히 설명 : 영역.
 : Object page= this;
 : type은 Object 자기자신.
out : 역시...
exception : 역시

총 9개의 내장객체가 application에서 자동지원.

 ---------------------------------------
function doInsert(){
//절대경로 : /pp/newgb/insert
//주로
document.gbform.action  =
 "<%=request.getContextPath()%>/newgb/insert";
  document.gbform.submit();
}

<form action="" method="post" name="gbform">
</form>

String uri = request.getRequestURI();
사용자가 요청한 주소.

indexOf(str) : str의 자리 찾기 (없으면 -1 return)
ex)
if(uri.indexOf("/insert") != -1){
 // /insert 경로로 들어오면 insert를 해준다.
 request.setCharacterEncoding("euc-kr");
 String writer = request.getParameter("writer");
 String pass = request.getParameter("pass");
 String content = request.getParameter("content");
 
 //insert한다. 숙제
 // 보너스 숙제 : 삭제 / 수정기능 구현/
 //----이부분은 내일 설명 ---
 response.sendRedirect(
   request.getContextPath()+"newgb/list");
 return;
}

다른 카테고리의 글 목록

웹 개발/Servlet 기초 카테고리의 포스트를 톺아봅니다