2008. 9. 23. 15:54

[0923]jspBean, forward, include

멤버 필드에 있는 값은 초기화 되어 사용된다.
boolean은 false 값으로 상수형은 0값으로 문자형은 null 값으로

아래의 예제는 클라이언트가 페이지를 호출할 때 값이 어떻게 변하는지 보여준다.
init() 메서드의 a 값은 처음에 한번 불려지는데 이 값은 static한 멤버필드가 되어
은행의 이율처럼 인스턴스가 생성되기 전부터 고정적인 상수 값을 가지게 되며,
b값은 클라이언트가 브라우져를 호출할때마다 값이 갱신되며,
c값은 클라이언트가 어떤 값을 입력할때마다 그 값이 변경된다.
======== mem.jsp ========================================================
======== http://localhost:9090/Test0923/mem.jsp?c=10======================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <%!
 int a;
 int b;
 %>
 <%!
 @Override
 public void init(){
  a++;  
 }
 %>
 <%
 int c=Integer.parseInt(request.getParameter("c"));
 b++;
 %>
 <%="a = "+a%><br>
 <%="b = "+b%><br>
 <%="c = "+c%><br>
</body>
</html>
======== foo.MemberFieldTestServlet.java =================================
= http://localhost:9090/Test0923/servlet/foo.MemberFieldTestServlet.jsp?c=50 =
package foo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberFieldTestServlet extends HttpServlet{
 int a;
 int b;
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
  b++;
  int c=0;
  c=Integer.parseInt(req.getParameter("c"));
  System.err.println("doGet() a :"+a+"<br>");
  System.err.println("doGet() b :"+b+"<br>");
  System.err.println("doGet() c :"+c+"<br>");
  PrintWriter out=res.getWriter();
  out.println("doGet() a :"+a+"<br>");
  out.println("doGet() b :"+b+"<br>");
  out.println("doGet() c :"+c+"<br>");
 }// doGet end
 @Override
 public void init() throws ServletException {
  a++;
  System.err.println("init :"+a);
 }// init() end
}// class end
=========================================================================
아래 예제는 에러가 발생했을때 에러페이지로 이동하라는 소스가 담겨 있다.
======== test1.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@page errorPage="errPage.jsp" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <%
 int a=4/0;
 %>
</body>
</html>
======== errPage.jsp ====================================================
=== 주의 사항 : 에러페이지의 내용이 너무 짧으면 에러 처리가 안 될 수도 있다.=
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    <%@page isErrorPage="true" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 Error Handling Page<br>
 <%
 out.print("Exception : "+exception.getClass().getName()+"<br>");
 %>
</body>
</html>
=========================================================================
useBean을 이용한 예와 그렇지 않은 경우 소스를 비교해 본다.
======== test2.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="mem.MemberBean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <%
 MemberBean mem1=new MemberBean();
 session.setAttribute("mem1",mem1);
 mem1.setName("이강국");
 out.print(mem1.getName()+"<br>");
 %>
 <jsp:useBean id="mem2" class="mem.MemberBean" scope="session" />
 <jsp:setProperty name="mem2" property="name" value="김강국" />
 <jsp:getProperty name="mem2" property="name"/><br>
</body>
</html>
======== mem.MemberBean ===============================================
package mem;
public class MemberBean {
 protected String num;
 protected String name;
 protected String id;
 protected String passwd;
 protected String tel;
 protected String add;
 public String getAdd() {
  return add;
 }
 public void setAdd(String add) {
  this.add = add;
 }
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getNum() {
  return num;
 }
 public void setNum(String num) {
  this.num = num;
 }
 public String getPasswd() {
  return passwd;
 }
 public void setPasswd(String passwd) {
  this.passwd = passwd;
 }
 public String getTel() {
  return tel;
 }
 public void setTel(String tel) {
  this.tel = tel;
 }
}
=========================================================================
자바빈을 이용한 두번째 예제 폼에서 데이터를 입력 받아 출력
======== test3call.jsp ====================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <form action="test3.jsp">
 번호 : <input type="text" name="num"><br>
 이름 : <input type="text" name="name"><br>
 아이디 : <input type="text" name="id"><br>
 비밀번호 : <input type="password" name="passwd"><br>
 연락처 : <input type="text" name="tel"><br>
 주소 : <input type="text" name="add"><br>
 <input type="submit" value="전송">
 <input type="reset" value="취소">
 </form>
</body>
</html>
======== test3.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="mem.MemberBean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <%
 MemberBean mem11=new MemberBean();
 mem11.setNum(request.getParameter("num").trim());
 mem11.setName(request.getParameter("name").trim());
 mem11.setId(request.getParameter("id").trim());
 mem11.setPasswd(request.getParameter("passwd").trim());
 mem11.setTel(request.getParameter("tel").trim());
 mem11.setAdd(request.getParameter("add").trim());
 %>
 <jsp:useBean id="mem22" class="mem.MemberBean"/>
 <jsp:setProperty name="mem22" property="*"/>
 <jsp:getProperty name="mem22" property="name"/><br>
 mem22.getAdd()==<%=mem22.getAdd()%><br>
 mem11.getAdd()==<%=mem11.getAdd()%><br>
</body>
</html>
=========================================================================
include와 forward를 이용한 정적, 동적 데이터 호출에 관한 예
test4include.jsp 와 test4_1include.jsp를 호출했을때의 차이점
include "test4_1include.jsp" 호출이 되지 않는다. ㅡㅡ;
forward를 호출했을 경우 앞의 include는 무시된다.
======== test4.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 test4.jsp start<br>
 <%
 int c=50;
 %>
 <%@include file="test4include.jsp" %>
 test4.jsp end<br>
 동적으로 부를수 있는가?<br>
 <jsp:include flush="true" page="test4_1include.jsp" >
 <jsp:param name="d" value="이강국" />
 </jsp:include>
</body>
</html>
======== test4include.jsp =================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <%
 int a=40;
 int b=a*c;
 out.print(a+"*"+c+"="+b);
 %>
======== test4_1include.jsp ===============================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <%
 int c=3;
 int a=40;
 int b=a*c;
 request.setCharacterEncoding("EUC=KR");
 out.print(a+"*"+c+"="+b+request.getParameter("d"));
 %>
======== test4_2.jsp ======================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 forward file
</body>
</html>
======== test4forward.jsp ================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 test4.jsp start<br>
 <%
 int c=50;
 %>
 <%@include file="test4include.jsp" %>
 test4.jsp end<br>
 동적으로 부를수 있는가?<br>
 <jsp:forward page="test4forward.jsp"/>
</body>
</html>
=========================================================================

2008. 9. 17. 17:52

Chap 1. 서블릿과 JSP는 어디에 쓰는 물건인고?

학습 목표 : GET, POST 등 HTTP 메소드에 대해 장점과 기능을 알아봅시다.

GET 는 서버로부터 뭔가를 돌려 받는다고 생각하시면 됩니다.
GET 메소드는 폼 데이터를 URL 뒤에 추가합니다.
POST는 서버에게 자원을 요청할 때 필요한 정보를 함께 넘겨줍니다.
POST 메소드는 요청의 몸체(body)에 폼 데이터를 포함합니다.

사용자 삽입 이미지
사용자 삽입 이미지

MINE 타입은 브라우저에게 어떤 종류의 데이터를 받을 것이라는 정보를 미리 알려주어, 브라우저가 데이터를 어떻게 다룰지 준비하도록 합니다.


'수업 > Head First Servlets & JSP' 카테고리의 다른 글

로그인, 회원가입, 정보수정, 탈퇴  (2) 2008.09.26
[0923]jspBean, forward, include  (0) 2008.09.23