페이지 이동 : 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 기초' 카테고리의 다른 글
[Servlet 기초] 방명록 삭제기능 추가 및 JSP 추가설명 (0) | 2009.06.25 |
---|---|
[Sevlet 기초] Sevlet 한글처리 와 forward/redirect (0) | 2009.06.25 |
[Sevlet 기초] 기초 셋팅 및 Hello Sevlet (0) | 2009.06.25 |
[Servlet 기초] 기초 셋팅 및 기초이론 (0) | 2009.06.25 |