(책) 자바 웹을 다루는 기술

Chap 12 JSP 스크립트 요소 기능

EunaSon 2023. 8. 25. 01:11

html 태그는 컨테이너 작업 없이 바로 브라우저로 전송되어 화면을 구현하므로 화면을 동적으로 구현할 수 없음

반면 JSP는 컨테이너에서 자바로 변환되는 과정을 거침 -> jsp에서 제공하는 스크립트 요소를 이용하면 조건이나 상황에 맞게 html 태그를 선택적으로 전송하여 화면을 동적으로 구성할 수 있음

jsp 스크립트 요소 기능에 대해 알아보자

 

12.1 JSP 스크립트 요소

JSP 스크립트 요소(Scripting Element)

: jsp 페이지에서 여러 가지 동적인 처리를 제공하는 기능

<%  %> 기호 안에 자바코드로 구현함. <% %> 이 기호를 스크립트릿(scriptlet)이라 함

 

-스크립트 요소의 종류

선언문(declaration tag) : jsp에서 변수나 메서드를 선언할 때 사용함  <%!  %> (12.2에서)

스크립트릿(scriptlet) : jsp에서 자바코드를 작성할 때 사용함 (12.3에서)

표현식(expression tag) : jsp에서 변수의 값을 출력할 때 사용함  <%=  %> (12.4에서)

 

12.2 선언문 사용하기

선언문 : jsp 페이지에서 멤버 변수나 멤버 메서드를 선언할 때 사용함

선언문 안의 멤버는 서블릿 변환 시 서블릿 클래스의 멤버로 변환됨

jsp 등장 초기에는 이처럼 자바 코드를 이용해 jsp 페이지에 필요한 변수나 메서드를 구현했음 

 

형식

<%! 멤버 변수 or 멤버 메서드 %>

 

JSP에서 선언문 실습

1. 새 프로젝트 pro12를 만들고 hello.jsp 파일을 생성함

2. 선언문을 사용한 hello.jsp를 작성. 선언문은 일반적으로 jsp 페이지의 상단에서 주로 사용함.

선언문을 이용해 멤버변수 name과 멤버 메서드 getName()을 선언함

<%@ page language= ........ %>

<%! 

  String name = "듀크";

  public String getName() { return name; }

%>

 

<!DOCTYPE html>

...

<body>

  <h1>안녕하세요 <%=name %>님!</h1>  // 표현식( <%=  %>)을 이용해 선언문에서 선언한 name의 값을 출력함

</body>

...

=> 변환된 자바 코드를 보면 선언문에서 선언된 변수와 메서드는 서블릿 클래스의 멤버 변수와 멤버 메서드로 변환된 것을 알 수 있음. 따라서 선언문에서 선언된 변수는 jsp(서블릿 클래스) 안에서 자유롭게 접근할 수 있음

 

12.3 스크립트릿 사용하기

스크립트릿은 초기 jsp에서 자바코드를 이용해 화면의 동적인 기능을 구현했음.

현재 jsp 페이지에서는 거의 사용되지 않음 but 이후 자바코드를 대체해서 나온 여러 태그들을 이해하는 데에 도움이 될것.

 

형식

<%  자바코드  %>

 

-JSP에서 스크립트릿 실습

1. hello2.jsp 파일을 준비

2. 브라우저에서 jsp로 전송된 값을 얻기 위해 <%  %> 안에 자바 코드를 사용하여 age 값을 가져옴

 

<%@ page ....%>

<%!

  String name = "이순신";

  public String getName() {  return name;  }

%>

<% String age = request.getParameter("age"); %>  // 스크립트릿을 이용해 자바코드를 작성함

 

<!DOCTYPE html>

...

<body>

  <h1>안녕하세요 <%=name %>님</h1>

  <h1>나이는 <%=age %>살입니다</h1>  // 표현식을 이용해서 전송된 나이를 출력함

</body>

...

 

=>

서블릿으로 변경된 상태를 보면, 스크립트릿 안에 작성한 자바코드는 서블릿의 _jspService() 메서드 안의 자바코드로 변환되었음. name과 age값은 print()로 브라우저에 출력됨.

* 스크립트 요소는 브라우저로 전송되지 않고 전송 전 컨테이너에서 자바 코드로 변환됨

* <% %> 안에는 자바 코드만 쓸 수 있음

 

12.4 표현식 사용하기

표현식은 jsp 페이지의 정한 위치에 값을 출력하는 기능임

jsp 페이지에서 변수나 메서드의 결과값 등을 브라우저에 출력하는 용도로 사용함

 

형식

<%= 값 or 자바 변수 or 자바 식 %>

 

-JSP 페이지에서 표현식 실습

[ hello3.jsp ]

...

<body>

  ....

  <h1>키는 <%=180 %>cm 입니다</h1>

  <h1>나이+10은 <%= Integer.parseInt(age) + 10 %>살입니다</h1>

</body>

 

=> 서블릿으로 변환된 코드를 보면, 표현식 안의 값은 print()를 이용해 브라우저에서 원하는 위치에 출력됨

***** 표현식 안에는 자바 변수나 자바 식 뒤에 세미콜론이 있으면 안됨 !!!!!! ****** 

스크립트 요소는 브라우저에서 jsp 페이지 요청 시 모두 서블릿의 자바 코드로 변환되므로 브라우저로 전송되지 않음

브라우저는 html 태그, css, 자바스크립트만 전달받음

 

12.5 JSP 주석문 사용하기

JSP 페이지에 사용되는 주석문에는

JSP 페이지에서는 html이 사용되므로 html 주석문이 있고,  <!--  -->

스크립트릿 안에서는 자바 코드가 사용되므로 자바 주석문이 있고  //, /*  */

스크립트 요소에 대해 주석 처리를 하는 jsp 주석문이 있음  <%--  --%>

 

jsp 주석문은 jsp 자체의 주석이므로 아예 서블릿 코드로 변환되지 않음

자바 주석문은 서블릿으로 변환시 자바 주석문으로 표시됨

브라우저도 전달된 html 태그를 보면 html 주석문도 함께 전달되었음

 

12.6 스크립트 요소 이용해 실습하기

로그인 예제 1

로그인 창에서 id와 비밀번호를 입력한 후 jsp로 전송하여 출력하는 예제

 

[ login.html ]

result.jsp로 전송(action 속성 이용)

아이디와 비밀번호를 입력받아 form 태그로 전송함

 

[ result.jsp ] 

스크립트릿을 이용해 전송된 아이디와 비밀번호를 가져온 후 표현식을 이용해 변수 값을 출력함

 

<body>

  <h1>결과 출력</h1>

<%  // 스크립트릿을 이용해 자바 코드로 로그인창에서 넘어온 아이디, 비밀번호를 가져옴

  request.setCharacterEncoding("utf-8");

  String user_id = request.getParameter("user_id");

  String user_pw = request.getParameter("user_pw");

%>

  <h1>아이디     : <%=user_id %></h1>

  <h1>비밀번호 : <%=user_pw %></h1> //표현식으로 출력

</body>

 

로그인 예제 2

1에서 더 나아가 스크립트릿 안에 자바 코드를 사용해 id가 정상정으로 입력되었는지 체크한 후 정상 입력 여부에 따라 동적으로 다른 결과를 출력하도록 구현해보자

 

[ result2.jsp ]

result.jsp에서 스크립트릿으로 로그인창에서 넘어온 id, pw를 getParameter()로 가져오는 부분을 디렉티브 태그( <%@ page language=~~~ %> ) 아래로 옮김,

 

<body>

<%

  if (user_id == null || user_id.length() == 0 ) { // 아이디가 정상적으로 입력되지 않았으면

%>

  아이디를 입력하세요<br>  // 스크립트릿 밖이니까 html 부분임

  <a href="/pro12/login.html">로그인하기</a>

<%  

  } else {

%>

  <h1>환영합니다. <%=user_id %>님</h1>

<%

  }

%>

</body>


* 상대경로 표기

/ : 루트 디렉터리(최상위 디렉터리. C: 등)

./ : 현재 디렉터리

../ : 상위 디렉터리

두 단계 위 디렉터리는 ../../ 로 표기하면 됨


로그인 예제 3

첫번째 if문에서 아이디가 입력되었는지 먼저 체크한 후 정상적으로 입력되었으면 다시 내부 if으로 입력된 id가 admin인지 체크함

[ result3.jsp ]

<body>

<%

  if (user_id == null || user_id.length() == 0 ) { // 아이디가 정상적으로 입력되지 않았으면

%>

  아이디를 입력하세요<br>  // 스크립트릿 밖이니까 html 부분임

  <a href="/pro12/login.html">로그인하기</a>

<%  

  } else {

    if (user_id.equals("admin")) { // 입력한 아이디가 admin이면

%>

      <h1>관리자로 로그인했습니다</h1>

      <form>

        <input type=button value="회원정보 삭제하기"  />

        <input type=button value="회원정보 수정하기"  />

      </form>

<%

    } else {

%>

  <h1>환영합니다. <%=user_id %>님</h1>

<%

  }

%>

</body>

 

학점 변환 예제

시험 점수를 입력받은 후 학점으로 변환하는 예제

 

[ scoreTest.html ]

시험점수 입력받아(name="score") form 태그를 이용해 scoreTest.jsp로 넘기기

 

[ scoreTest.jsp ]

scoreTest.html로부터 받은 점수를 다중 if~else if문을 이용해 학점으로 변환함

 

<%@ page ... %>

<%

  request.setCharacterEncoding("utf-8");

  int score = Integer.parseInt(request.getParameter("score")); // 전송된 시험 점수를 가져옴

%>

...

if~else if문으로 각 점수 구간에 따른 조건에 맞게 출력할 학점 표시하도록 함

 

구구단 출력 예제

구구단의 단 수를 전송받은 후 구구단을 자바 for문과 <table> 태그를 이용해 리스트로 출력하는 예제

 

[ gugu.html ]

단수 입력받아 gugu.jsp로 포워딩함

 

[ gugu.jsp ]

인코딩을 utf-8로 설정,

getParameter()로 전송된 단수 가져와 변수 int dan에 저장,

for문 돌아가며 <tr> 한줄씩 작성됨

 

[ gugu2.jsp ] 

짝수행과 홀수행의 배경색 다르게 설정

 

for문 밑에 if문으로 짝수행이면 <tr align=center bgcolor="~~"> , else로 홀수행이면 <tr align=center bgcolor="####">

밑으로는 gugu.jsp와 동일함

 

이미지 리스트 출력 예제

스크립트릿을 이용해 image 폴더의 이미지를 가져와서 리스트로 출력하는 예제

쇼핑몰에서 상품 검색 결과를 리스트로 출력하는 기능 등 자주 사용됨

 

image 폴더에 duke.png 이미지 파일을 추가,

 

[ imageList.jsp ]

<ul> 태그 이용해 리스트 만듦

맨 위의 <li>는 리스트의 헤더로 만듦,

for문을 이용해 목록 10행이 표시되게 함( i = 0~9까지)

for문 1번 수행하면 한줄이 채워짐, 이미지, 이미지 이름(듀크+i), 선택하기(체크박스)

 

* JSP 프리컴파일(Precompile) 기능

브라우저에서 서블릿으로 최초 요청을 보내면 먼저 톰캣이 컴파일한 후 실행함. 따라서 톰캣은 시작 시 미리 서블릿을 메모리에 로드해서 사용하는 방법을 제공함(8.6 load-on-startup 참고)

jsp도 마찬가지로 최초 요청 시 변환과정을 거치므로 실행이 늦어짐. 따라서 톰캣 컨테이너는 jsp precompile 기능을 제공해 미리 jsp를 컴파일하여 요청시 바로 처리할 수 있도록 함

 

12.7 내장 객체(내장 변수) 기능

jsp 페이지의 내장 객체(내장 변수)란,

jsp가 서블릿으로 변환될 때 컨테이너가 자동으로 생성시키는 서블릿 멤버 변수를 말함.

즉, 서블릿으로 구현 시 자주 사용했던 객체를 개발자가 일일이 만들지 않고

서블릿으로 변환 시 컨테이너가 자동으로 생성해줌

 

jsp 파일이 서블릿으로 변환되었을때, _jspService() 메서드에 생성된 내장객체를 저장하는 내장변수가 선언됨

 

▼JSP에서 제공하는 내장 객체들

내장 객체 서블릿 타입 설명
request HttpServletRequest 클라이언트의 요청 정보를 저장함
response ServletResponse 응답 정보를 저장함
out javax.servlet.jsp.JspWriter jsp 페이지에서 결과를 출력함
session javax.servlet.http.HttpSession 세션 정보를 저장함
application javax.servlet.ServletContext 컨텍스트 정보를 저장함
pageContext javax.servlet.jsp.PageContext jsp 페이지에 대한 정보를 저장함
page java.lang.Object jsp 페이지의 서블릿 인스턴스를 저장함
config javax.servlet.ServletConfig jsp 페이지에 대한 설정 정보를 저장함
exception java.lang.Exception 예외 발생 시 예외를 처리함

application, request, response, sesison은 서블릿에서 사용해본 객체들임, 동일한 기능을 제공함

 

▼자주 사용되는 내장 객체들의 스코프

내장 객체  서블릿 scope
page this 한 번의 요청에 대해 하나의 jsp 페이지를 공유함
request HttpServletRequest 한 번의 요청에 대해 같은 요청을 공유하는 jsp 페이지를 공유함
session HttpSession 같은 브라우저에서 공유함
application ServletContext 같은 애플리케이션에서 공유함

request, session, application은 서블릿의 스코프와 같음

page는 요청하는 해당 jsp 페이지에 대해서만 공유할 수 있음

 

- session 내장 객체에 데이터 바인딩 실습

WebContent 폴더에 test01 폴더 생성 후 session1.jsp, session2.jsp 파일 생성,

 

[ sessionTest 클래스 ]

getSession() 메서드로 session 객체를 얻은 후 name을 바인딩함

 

HttpSession session = request.getSession(); // Session 객체를 가져옴

session.setAttribute("name", "이순신"); // session 객체에 name을 바인딩함

 

[ session1.jsp ]

jsp에서는 자동으로 session 객체를 생성해주므로 따로 getSession() 메서드를 통해 세션을 얻을 필요 없음

getAttribute() 메서드를 통해 session에 바인딩된 name 값을 가져온 후 setAttribute() 메서드로 session에 address를 바인딩함

 

<%

  String name = (String)session.getAttribute("name"); // session 객체에 바인딩된 name값을 가져옴

  session.setAttribute("address", "서울시 강남구"); // session 객체에 address를 바인딩함

%>

...

<body>

  이름은 <%=name %>입니다. <br>

  <a href=session3.jsp>세번째 페이지로 이등</a>  ??? 왜 따옴표 안쓰지

</body>

 

[ session2.jsp ]

getAttribute() 메서드를 통해 서블릿(sessionTest.java)과 JSP에서 session에 바인딩된 name과 address값을 가져옴

 

<%

  String name = (String)session.getAttribute("name");

  String address = (String)session.getAttribute("address");

%>

 

=>

최초 서블릿(/sess)에 요청시, session 객체에 name을 바인딩함

-> '첫번째 페이지로 이동하기' 클릭 시 첫번째 jsp 페이지( session1.jsp )를 출력함. 서블릿에서 바인딩한 name이 출력됨.

-> '두번째 페이지로 이동하기' 클릭 시 두번째 jsp 페이지( session2.jsp )를 출력함. 서블릿에서 바인딩한 name과 첫번째 jsp에서 바인딩한 address가 출력됨.

 

- application 내장 객체에 데이터 바인딩 실습

[ appTest1.jsp ]

첫번째 jsp.

session 내장객체에 name을, application 내장 객체에 address를 바인딩함

 

<%

  session.setAttribute("name", "이순신"); // 이름을 session 내장객체에 바인딩

  application.setAttribute("address", "서울시 성동구"); // 주소를 application 내장객체(컨텍스트)에 바인딩

%>

 

[ appTest2.jsp ]

두번째 jsp.

첫번째 jsp에서 session과 application 내장객체에 바인딩한 값을 가져옴

 

<%

  String name = (String)session.getAttribute("name");

  String address = (String)application.getAttribute("address");

%>

...

<body>

  <h1>이름은 <%=name %>입니다</h1>

  <h1>주소는 <%=address %>입니다</h1>

</body>

 

=>

브라우저에서 appTest1.jsp 로 요청하면 첫번째 jsp에서 name과 address를 session과 application에 바인딩함

같은 브라우저에서 요청할 경우, 두번째 jsp에서 session과 application에 접근할 수 있음

다른 브라우저(익스플로러)에서는 application에만 접근할 수 있고, session에는 접근할 수 없어 name은 null로 출력됨

 

application 내장 객체의 스코프는 애플리케이션 전체,

session 내장 객체의 스코프는 같은 브라우저임을 알 수 있음

 

request 내장 객체에 데이터 바인딩 실습

[ request1.jsp ]

첫번째 jsp.

브라우저의 요청에 대한 request 객체에 name과 address를 바인딩하고,

RequestDispatcher를 이용해 request 객체를 두번째 jsp로 포워딩함(272p 8.3 참고)

* dispatch를 이용한 포워딩은 redirect 등과 달리 브라우저를 거치지 않고 서버에서 바로 포워딩됨(브라우저 상의 url 바뀌지 않음. 브라우저를 거치지 않고 포워딩이 이루어졌기 때문에 브라우저는 포워딩에 대해 알지 못함...271p)

 

<%

  request.setAttribute("name","이순신");

  request.setAttribute("address","서울시 강남구"); // reqeust 객체에 name과 address를 바인딩함

%>

...

<%

  RequestDispatcher dispatch = request.getRequestDispatcher("request2.jsp");

  dispatch.forward(request, response);

%> // request 객체를 request2.jsp로 포워딩함

 

[ request2.jsp ]

두번째 jsp.

첫번째 jsp에서 전송된 request 객체에서 바인딩된 name과 address를 가져옴

 

<% // 첫번째 jsp에서 포워딩된 reqeust 객체에서 정보를 가져옴

  String name = (String)request.getAttribute("name");

  String address = (String)request.getAttribute("address");

%>

...

<body>

  <h1>이름은 <%=name %>입니다</h1>

  <h1>주소는 <%=address %>입니다</h1>

</body>

 

=> 브라우저에서 request1.jsp로 요청하면 요청된 request1.jsp는 request 객체에 바인딩 후 request2.jsp로 포워딩하여 이름과 주소를 출력하게됨(url은 변하지 않고 그대로 request1.jsp임)

 

*** getAttribute()는 속성 name을 인자로 하여 속성 값(value)를 Object로 반환함 => String, Integer.parseInt 등으로 형변환 필요함, setAttribute()를 통해 설정한 값을 가져옴

*** getParameter()는 반환 형태가 String임, 브라우저에서 전송받은 request 영역의 값을 읽어옴

 

out 내장 객체 이용해 데이터 출력하기

결과를 출력할 때 사용하는 out 내장객체를 사용해보자.

 

[ out1.jsp ]

첫번째 jsp 페이지임

이름과 나이를 두번째 jsp로 포워딩함

 

이름과 나이를 입력받아서 action 속성으로 out2.jsp(두번째 jsp)로 전송

 

[ out2.jsp ]

전송된 이름과 나이를 표현식 <%= %>과 out 내장객체를 이용해 출력하자

 

getParameter()로 전송된 name과 age 가져와 저장

 

<h1><%=name %>, <%=age %></h1>  <- 표현식으로 출력

<h1><%  out.println(name + ", " + age)</h1> <- 스크립트릿을 이용해 out 내장객체로 출력

 

12.8 JSP 페이지 예외 처리하기

프로그램 실행 시 예외나 오류 발생할 경우 이를 안내하는 페이지, 즉 전용 예외 처리 페이지가 나타나게 하는 것이 좀 더 신뢰있고 사용자 친화적임

 

-JSP 페이지 예외 처리 과정

예외 처리 jsp를 생성, 디렉티브 태그 속성 중 isErrorPage 속성을 true로 설정 ( <%@ page isErrorPage='true' %> )

-> 일반 jsp 페이지의 디렉티브 태그 속성 중 errorPage 속성을 예외 처리 페이지 이름으로 지정함

    (  <%@ page errorPage='~~.jsp' %> )

-> 예외 발생하게 되면 예외 처리 jsp에서는 exception 내장 객체를 사용해 예외 처리함

 

-JSP 페이지 예외 처리 실습

[ add.html ]

입력창에서 숫자를 입력받아 action에 지정한 add.jsp 로 전송함

 

[ add.jsp ]

페이지 디렉티브 태그의 errorPage 속성에 예외처리 페이지인 addException,jsp를 지정하여 오류가 발생하면 예외 처리를 함

 

<%@ page ...

          errorPage="addException.jsp" %>

 

getParameter()로 전송된 num을 받아와 저장하고

1~num까지의 합을 계산해서 출력함, 출력

 

[ addException.jsp ]

페이지 디렉티브 태그의 isErrorPage 속성을 true로 설정해 exception 내장객체를 이용해서 발생한 예외를 처리하도록 함

exception 내장 객체는 자바의 Exception 클래스의 인스턴스임

 

exception.toString() : 발생한 예외의 종류와 원인을 출력함

exception.getMessage() : 예외의 원인을 간단하게 출력함

exception.printStackTrace() : 예외의 종류, 원인 및 발생한 위치와 전체적인 단계를 모두 콘솔에 출력함

를 브라우저에 출력함

 

- JSP 페이지의 오류 페이지 종류

404 오류 : 오청한 jsp 페이지가 없을 때 발생

500 오류 : 컨테이너에서 jsp 페이지 처리 중에 오류가 발생할 때 표시됨(보통 프로그래머의 실수로 인해 발생)

 

jsp 페이지가 많을 경우 이런 오류 처리를 sp 페이지에서 일일이 설정하는 것은 불편함

=> 전체 jsp 페이지에 대해 발생하는 오류에 따라서 화면에 표시될 각각의 예외처리 jsp 페이지를 적용할 수 있음

 

- 에러 코드에 따른 예외 페이지 지정

web.xml에서 xml로 각각의 에러 코드에 대한 예외 처리 페이지를 지정하는 방법은 다음과 같다

<error-page>

  <error-code>에러코드</error-code>

  <location>오류 페이지 위치</location>

</error-page>

 

WebContent 폴더 하위에 오류 페이지들이 위치할 err 폴더를 만들고, error_404.jsp, error_500.jsp를 생성

 

web.xml에 <error-page> 태그를 이용해 각각의 에러 코드에 대해 처리할 오류 페이지가 있는 경로를 지정함

[ web.xml ]

<error-page>

  <error-code>404</error-code>

  <location>/err/error_404.jsp</location>

</error-page>

 

<error-page>

  <error-code>500</error-code>

  <location>/err/error_500.jsp</location>

</error-page>

 

[ error_404.jsp ]

'요청한 페이지는 존재하지 않습니다' 출력함

 

[ error_500.jsp ]

이미지 하나 표시,

'서비스 실행 중 오류가 발생했습니다' 출력함

 

[ number.jsp ]

브라우저에서 요청하면 예외가 발생함.

 

전송되지 않은 인자값 가져옴->예외 발생 

 

=>

존재하지 않는 num.jsp를 요청할 경우 : '요청한 페이지는 존재하지 않습니다' 출력됨(error_404.jsp가 처리했음)

실행중 예외를 발생시키는 number.jsp를 요청할 경우 : 이미지와 함께 '서비스 실행 중 오류가 발생했습니다' 출력됨(error_500.jsp가 처리했음)

 

*** 하나의 jsp 페이지에서 페이지 디렉티브의 errorPage 속성과 web.xml의 error-page가 같이 지정되어 있다면 페이지 디렉티브의 errorPage가 우선적으로 나타남

 

12.9 JSP welcome 파일 지정하기

지금까지는 jsp나 서블릿을 일일이 브라우저에 요청하여 화면을 표시했음

=> 웹 애플리케이션 첫 화면에 해당하는 홈페이지를 web.xml에 등록해두면 브라우저에서는 컨텍스트 이름만으로 요청하여 간단하게 표시할 수 있음

[ web.xml ]

<welcome-file-list>

  <welcome-file>jsp 또는 html 파일이름1</welcome-file>

  <welcome-file>jsp 또는 html 파일이름2</welcome-file>

...

</welcome-file-list>

 

홈페이지로 사용되는 welcome 페이지는 jsp나 html 파일이 될 수도 있고, 여러 개를 등록해서 사용할 수도 있음

여러개인 경우, 요청시 첫번째로 지정한 welcome 파일부터 차례로 찾아서 홈페이지로 보여줌

 

[ web.xml ]

<welcome-file-list>

  <welcome-file>/test02/main.jsp</welcome-file>

  <welcome-file>/test02/add.jsp</welcome-file>

...  // 여러 개의 welcome 파일을 지정함

</welcome-file-list>

 

[ main.jsp ]

첫번째 홈페이지임

 

=> 톰캣을 다시 실행한 후 브라우저에서 컨텍스트 이름(/pr12)으로 요청하면 첫번째 welcome 페이지인 main.jsp의 내용이 출력됨

*** 실제 서비스를 제공할 때는 웹 사이트에 대한 도메인 이름을 구하고 > 웹 호스팅 업체에서 제공하는 방법으로 브라우저에서 도메인 이름으로 요청해야 함 > 다시 컨텍스트 이름으로 재요청하도록 설정하면 됨

 

12.10 스크립트 요소 이용해 회원 정보 조회하기

앞에서 배운 스크립트 요소를 이용해 db의 회원정보를 조회한 후 jsp 페이지에 출력하는 예제

 

1. MemberVO, MemberDAO 클래스를 복붙해넣음

2. db의 회원을 조회하는 jsp 페이지인 search.jsp를 작성함, 찾고자 하는 이름을 입력하면 member.jsp로 전송함

 

[ search.jsp ]

input으로 이름을 입력받아 action으로 지정한 member.jsp로 전송

 

[ member.jsp ]

MemberVO와 DAO가 있는 sec02.ex01 패키지를 디렉티브 태그에서 import함

<%

getParameter()로 name 가져옴

MemberVO 객체 만들어서 name 속성에 가져온 name 설정(setter인 setName() 이용)

MemberDAO 객체 만들어서 listmember() 메서드의 인자로 만든 VO객체를 넣어줌, 조회된 결과는 memberList에 저장함

%>

 

<table> 태그 이용해서 회원정보를 출력할 테이블을 만듦

 

<%

for문을 이용해 memberList 의 요소를 출력함

for문에서 memberList의 요소를 꺼냄 > MemberVO로 형변환 > getter로 속성 얻어와 변수에 저장 >

%>

 

<tr> 및 <td> 태그로 정보 출력

 

[ MemberDAO 클래스 ]

listMember() 메서드에서,

조회할 이름을 가져온 후, 값이 존재하면 쿼리에 where절을 추가하여 해당 이름으로 조회함

name값이 없으면 모든 회원정보를 출력함

 

=> 브라우저에서 search.jsp로 요청한 다음 조회할 이름을 입력하고 member.jsp로 전송하면 조회한 회원정보가 출력됨, 이름을 입력하지 않고 조회한 경우 모든 회원정보가 출력됨