[목차]

5. JSP

    1) MVC 패턴

    2) 요청재지정

    3) 데이터 공유 

    4) JSP

    5) 스크립트 요소 

 

[내용]

5. JSP

    [서블릿 & DAO 연동 코드작성]
    1) 서블릿을 작성.
    2) 서블릿을 작성시 등록한 urlpattern에 매핑된 path를 요청 View(서블릿을 요청하는 최초 실행되는 클라이언트

        화면)의 <form>태그 action속성이나 <a>태그 href속성에 연결.
    3) 서블릿에서 요청정보 추출 후 sysout 테스트 진행.
    4) DTO 클래스 작성.
    5) DAO 클래스 작성.(서블릿에서 호출하는 비지니스 메소드를 가진)
       - 메소드내 sysout으로 출력하여 sysout 테스트.
    6) 서블릿에서 DAO메소드 호출
    7) DAO 코드 작성.
        ① insert, delete, update는 실행결과 행 출력
        ② select
        while문을 작성하고 while문 안에서 sysout출력.
       출력되면 칼럼을 가져와서 출력.
    8) 서블릿에서 dao호출한 리턴결과를 출력.

 

//servlet
MyEmpDAO dao = new MyEmpDAO();
ArrayList<MyEmpDTO> list = dao.getMemberList();
out.println("list.get(i).getDeptno()");
//dao
public ArrayList<MyEmpDTO> getMemberList(){
	ArrayList<MyEmpDTO> list = new ArrayList<MyEmpDTO>(); 
	System.out.println("dao요청");
	String sql = "select * from myemp";
	Connection con = null;
	PreparedStatement ptmt = null;
	ResultSet rs = null;
	try {
		con = DBUtil.getConnect();
		ptmt = con.prepareStatement(sql);
		rs = ptmt.executeQuery();
		while(rs.next()) {
			MyEmpDTO emp = new MyEmpDTO(rs.getString(1), rs.getString(2), rs.getString(3), 
            rs.getString(4), rs.getString(5), rs.getInt(6), rs.getString(7)); 
			list.add(emp);
		}
		System.out.print(list.size());
	} catch (SQLException e) {
		e.printStackTrace();
	}finally {
		DBUtil.close(rs, ptmt, con);
	}
	return list;
}

 

 

    1) MVC 패턴 : Model View Controller로 각 역할을 구분하고 분리해서 작업할 수 있도록 개발하는 패턴
                      : 서블릿, jsp를 이용해서 웹을 개발할때 각 역할별로 분리해서 작업.

Model View Controller
DAO Html Servlet

 


    2) 요청재지정 : MVC패턴 적용을 위한 설정.
                       : 최초로 요청된 web appliction파일(서블릿)이 실행된 후 요청받은 서블릿이 응답되지 않고

                         view파일(jsp)이 응답되도록 설정하는 것
                       : 서블릿에서 뷰를 분리.
        ① forward : servlet에서 사용
            1) 문법

RequestDisptcher rd =  request.getRequestDisptcher("요청 재지정할 application의 context명을 뺀 나머지 path");
rd.forward(request객체, response객체);
RequestDisptcher rd =  request.getRequestDisptcher("/basic/result.jsp");
rd.forward(request, response);

            2) 실행흐름
            - 클라이언트가 서블릿을 요청하는 경우 서블릿이 실행되고 forward로 지정한 web application이

            재요청되어 실행.
            - 이때 재지정되는 요청은 새로운 요청이 만들어지면서 요청되는 것이 아니라 서블릿 요청의 연장.
            - 한번의 요청으로 두개의 web application이 실행된다. (서블릿, jsp파일이 실행)

 

        ② include : jsp에서 사용

//servlet
out.print("머리말");
System.out.println("include연습  - include 서블릿 실행");
//1. 데이터 공유
MyEmpDTO user = new MyEmpDTO("003", "이이", null, "", "", 0, "");
request.setAttribute("myuser", user);
//2. 요청 재지정 - include
RequestDispatcher rd = request.getRequestDispatcher("/jspbasic/page.jsp");
rd.include(request, response);
out.print("꼬리말");

        => 머리말 + jsp 실행내용 + 꼬리말로 실행된다.

 

         - jsp

<jsp:include page="../top.jsp"></jsp:include>

 


    3) 데이터 공유
     - 한번의 요청으로 서블릿과 jsp가 실행되어 같은 request객체를 사용하기 때문에 데이터를 공유할 수 있다.
     - 같은 request를 사용

     - 서블릿에서 Request객체에 저장
     - jsp에서 Request객체에서 값을 가져옴
     - 공유되는 데이터를 attribute라한다.
     - 자바에서 사용할 수 있는 모든 객체를 공유할 수 있다.

     - http 프로토콜 특성으로 한번의 요청을 서버에서 처리하면서 저장한 값은 클라이언트에게 응답하는 순간

       메모리에서 없어진다. 즉 상태정보가 유지 되지않는다.

        ① 데이터 저장 : 서블릿에서 처리

request객체.setAttribute("저장할 attribute의 이름", 저장할 객체);
out.print("servlet 출력"); // forward 사용 시 실행은 되나 출력되지않음.
//1. 데이터 공유
MyEmpDTO user = new MyEmpDTO("003", "이이", null, "", "", 0, ""); // 공유할 객체
request.setAttribute("myuser", user); // 데이터 공유
//2. 요청 재지정 - forward
RequestDispatcher rd = request.getRequestDispatcher("/jspbasic/page.jsp");
rd.forward(request, response);

 

        ② 데이터 가져오기 : jsp에서 처리

Object객체 = (공유객체 타입)request객체.getAttribute("서블릿에서 저장한 attribute의 이름");
//공유 객체로 casting
<%
	MyEmpDTO user = (MyEmpDTO)request.getAttribute("myuser");
%>
<%= user.getName() %>

 

        ③ 데이터 지우기

removeAttribute("name");

 

 

 

    4) JSP : html에서 java code를 사용하기 위한 언어.
             : 이클립스 내부에서 java의 코드를 html문자열로 변환.

 

    * 서버로 인식하는 위치 (context)

    C:\Java\work\webwork\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\serverweb

 

    * jsp 경로

C:\Java\work\webwork\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\serverweb\org\apache\jsp\jsp

    

    * jsp파일은 자동으로 하기와 같이 변환된다.

public void _jspInit() { ... }
public void _jspDestroy() { ... }
public void _jspService(final javax.servlet.http.HttpServletRequest request,
final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException { ... }

 

    [Servlet 동작] 
        1) 요청정보 추출 
        2) 비지니스 메소드 호출 
        3) 데이터를 공유 
        4) 요청재지정 
        5) 서블릿에서 공유한 데이터를 꺼내서 출력하기 [jsp] 

* html 파일 
모든 클라이언트에게 항상 고정된 동일한 화면만 서비스(정적 html문서) 

* jsp파일 
모든 클라이언트의 상황에 따라 다른 화면을 서비스할 수 있다.(동적 html)

 

 

    5) 스크립트 요소
        ① 스크립트릿 ( <% %>)

         - 자바코드를 사용할 수 있는 스크립트 요소.
         - 자바명령문을 정의할 수 있는 곳
         - ; 을 문자의 끝에 추가해야한다.
         - 자바와 동일하게 java.lang패키지는 자동으로 인식하지만 다른 패키지를 사용하는 경우 import한다. 

         - .jsp문서 내에서 선언되는 모든 지역변수를 사용할 수 있다.
         - jsp문서내 자바코드는 지양해야한다.
         - 자바코드는 서블릿이 공유하는 데이터를 꺼내서 출력하기 위한 코드만 정의해야한다.
         - jsp목적이 로직과 뷰를 위한 코드가 혼재되어 있는 부분을 없애기 위해서 만들어진 기술
         - 자바코드를 쓰지 않기 위해서 EL & JSTL(표준태그)

<% 
	// jsp문서에 작성하는 모든 태그나 코드의 작성은_jspService메소드 내부에 만들어진다. 
	out.println("<h2>hello</h2>"); // out 객체는 자동생성된 객체이므로 사용가능하다. 
%> 

        - 자동완성하여 객체 타입 설정시 자동 import된다.

<%@page import="basic.MyEmpDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Random, java.util.ArrayList"%>

        ② 표현식(<%= %>)

         - 기본형변수, 문자열을 반환하거나 해당 타입으로 선언된 변수를 출력.
          변수의 값을 출력하기 위해서 사용. out.print()메소드의 매개변수로 전달되므로 ;을 쓰지않는다.
           <%= 값 or 값을 리턴하는 메소드 호출문 or 연산식%>
          - 표현식은 jsp가 서블릿으로 변환될때 out.print() 메소드의 매개변수로 전달되는 코드
          - 표현식을 정의할때는 ;을 추가하지않는다. ;을 추가하면 out.print(값;);

          - 표현식은 서블릿에서 발생한 값을 웹페이지에 출력할 목적으로 사용하는 jsp스크립트 요소
          - 사용가능한 타입이 제한
          - 서블릿으로 변환될때 print메소드의 매개변수로 전달되기 때문에
          - 기본형, 스트링으로 변환될 수 있는 변수의 값, 메소드의 호출결과, 연산식등을 사용할 수 있다.

<%
	String str = "hello";
%>
<%= str %>
// out.print(str);로 자동변환된다.
<%= str; %>
// ;사용 시 out.print(str;);로 자동변환된다.

        ③ 선언문

         - 멤버를 선언하기 위해 사용.
         - jps문서의 멤버변수, 메소드를 정의하기 위해서 사용(jsp파일에서 java code를 최소화해야함으로 거의

         사용하지않는다)

<%! int num=100000; %>
<%! public void test(){
		System.out.println("test");
	}
%>


        ④ 지시자 - 컨테이너에게 넘겨줄 정보를 선언.


        ⑤ 주석문

<!-- HTML주석문(클라이언트에 전송) -->
<%-- jps주석문(jsp문법에 해당하는 코드를 주석으로 처리하는  용도 : 클라이언트에 전송 되지않는다. --%>
<%
	//	자바주석문
	/* 
		자바 여러줄 주석문 : 클라이언트에 전송 되지않는다.
	*/
%>

 

'BACK END > Servlet' 카테고리의 다른 글

[Servlet] Servlet 정리6 - EL, JSTL  (0) 2021.01.04
[Servlet] Servlet 정리5 - Ajax  (0) 2021.01.03
[Servlet] Servlet 정리4 - Cookie, Session  (0) 2021.01.02
[Servlet] Servlet 정리2 - JDBC  (0) 2020.12.28
[Servlet] Servlet 정리1  (0) 2020.12.28

+ Recent posts

1