-
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>
'JAVA' 카테고리의 다른 글
UML만들기-DesignModel&class관계,maven프로젝트 (0) 2021.07.25 게시물상세(model2.ver) (0) 2021.07.25 JSP내장객체정리, 로그인하기(jsp버전) (0) 2021.07.25 회원등록.ver2,PreparedStatement(jsp버전) (0) 2021.07.25 회원등록(jsp버전) (0) 2021.07.25