ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RequestDispatcher,forward(),게시물등록(model2.ver)
    JAVA 2021. 7. 25. 12:36
    등록 폼 요청 (바뀐 방식 Spring)
    1) 요청 업무처리 ( in java)
    - 먼저 이 곳에 와서 처리기준에 통과하면 결과통보에 RequestDispatcher 객체로 권한과, forward 메서드로 request, response 객체를 넘김
    2) 요청 결과통보 ( return html .jsp view 를 보냄)
    - 등록폼을 보냄
    등록 요청 ( 등록 폼으로 DB 등록)
    1) 요청 업무처리 ( 등록 폼의 데이터를 DB에 저장)
    2) 요청 결과통보 ( return html .jsp view 를 보냄)

    절차형 : 폭포수 모형 ( 분석 -> 설계 -> 구현 )

    - 의미 : 단계별로 떨어지는 모형으로 프로젝트를 짠다.

    - 단점 : 분석이나 설계로 다시 올라가 수정해야할 때 불가능하다.

    나선형 : 나선 모형?( A > B > C > D > A ...)

    - 의미 : 계속 단계를 돌고 도는 모형으로 프로젝트를 짠다.


    1. client 에게서 받은 값만이 아니라 직접 명시한 값 넘기기

     

    request.setAttribute("key", "value");

    "value" 는 Object

    System.out.println((String)request.getAttribute("key2"));

    대신 getAttribute로 받을 때는 형변환을 명시해야함

    request.getParameter v.s request.setAttribute & getAttribute
    1) getParameter: client 의 브라우저는 String 밖에 없고 거기서 (key 이름으로) value를 받아오기 때문에 가져오는 값이 다 String 이였다.
    2) setAttribute: request 자체내에서 key와 value 값을 설정하기 때문에(명시적데이터전달) java의 어떤 객체가 와도 된다.
    getAttribute: forward 로 request를 받아오면 이 메서드로 set해놓은 value값을 가져올 수 있다.

    2. 포워드

    RequestDispatcher rd = request.getRequestDispatcher("b.jsp");
    rd.forward(request, response);

    request.getRequestDispatcher("b.jsp");

    : b.jsp로 제어권을 넘겨준다.

    forward(request, response);

    : request, response 객체도 넘겨준다. (정보를 갖고 있는 이 객체들을)

    forward 로 넘겨주는 순간 밑의 코드는 전부 실행하지 않는다. ( html 도 )

    response.sendRedirect(); v.s forward(request, response);
    다른 jsp에 다시 연결하는것은 공통점이지만 그냥 jsp 페이지를 바꾸는 sendRedirect() 와 달리 forward() 는 값을 넘기면서 jsp 페이지를 바꾼다.

    >> 요청.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <a href="a.jsp?key1=value1">a요청</a>
    </body>
    </html>

    >> a.jsp

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%
    	System.out.println("a.jsp");
    	System.out.println(request.getParameter("key1"));
    	
    	request.setAttribute("key2", "value2");
    	
    	//포워드
    	RequestDispatcher rd = request.getRequestDispatcher("b.jsp");
    	rd.forward(request, response);
    %>

    >> b.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        
    <%
    	System.out.println("b.jsp");
    	System.out.println(request.getParameter("key1"));
    	System.out.println((String)request.getAttribute("key2"));
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1>b.jsp</h1>
    </body>
    </html>

    1. 게시판 만들기

    게시물등록준비.jsp ( 업무처리 ) -> 게시물등록창.jsp ( view ) -> 게시물등록.jsp ( 업무처리 ) -> 게시물등록결과통보.jsp ( view )
    >> 게시물등록준비.jsp ( 업무처리 - html 필요 없음 .)

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <% 
    	// 업무처리 : 제목, 내용기준, 검열하는 처리
    	// 현재는 필요 없음
    	request.setAttribute("key1", "value1");
    	
    	// 포워드해줌
    	RequestDispatcher rd = request.getRequestDispatcher("게시물등록창.jsp");
    	rd.forward(request,response);
    %>

    >> 게시물등록창.jsp ( 뷰 view )

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>게시물등록</h1>
    <form action="게시물등록.jsp" method="post">
    제목 <input type="text" name="내용" id="제목"/><br>
    내용 <input type="text" name="내용" id="내용"/><br>
    <input type="submit" value="등록"/>
    </form>
    <%= (String)request.getAttribute("key1") %>
    ${key1}
    <!-- 둘다 같은 값이지만, 디자이너가 java코드를 잘 모르는 경우 2번째 방법을 써서 이름만 알면 사용할 수 있게 해주면 된다. -->
    </body>
    </html>

    >> 게시물등록.jsp ( 업무처리 - html 필요 없음 .)

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page import="boardmanage.*" %>
    <%
    	request.setCharacterEncoding("uft-8");
    	String 제목 = request.getParameter("제목");
    	String 내용 = request.getParameter("내용");
    	게시물 새게시물 = new 게시물();
    	새게시물.set제목(제목);
    	새게시물.set내용(내용);
    
    	// 업무
    	// 업무규칙 검사
    	
    	// 저장
    	게시물DAO dao = new 게시물DAO();
    	dao.저장한다(새게시물);
    	//
    	request.setAttribute("title", 새게시물.get제목());
    	request.setAttribute("contents", 새게시물.get내용());
    	//
    	RequestDispatcher rd = request.getRequestDispatcher("게시물등록결과통보.jsp");
    	rd.forward(request, response);
    %>

    >> 게시물등록결과통보.jsp ( 뷰 view )

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    제목이 ${title} 인 게시물 등록이 완료되었습니다.
    </body>
    </html>

    댓글

Designed by Tistory.