티스토리 뷰
[View]
슬래쉬로 시작하지 않음 >> 상대경로!
JSTL
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
상단에 추가하기
JSTL은 pageContext가 있음. 현재 page를 기준으로 root경로를 가져올 수 있음.
(req.contextPath = root경로)
.jsp 파일에서 경로 쓸 때 EL문 사용
<jsp:include page="${pageContext.request.contextPath}/app/fix/header.jsp"/>
${pageContext.request.contextPath} >> 현재 페이지에서 request 객체를 가져와서 contextPath를 가져옴 >> root경로(WebContent)
Context 임시영역
page scope, page 영역에서의 Context(공간)는 page scope에 있는 객체를 가져올 수 있다.
현재 객체에서 request를 쓸 수 있다. JSP파일이기 때문에,
JSP에는 내장객체가 있음. response, request, out,...
1.루트 경로를 직접 쓰지 않는다.
2.직접 쓴다면, 서버를 배포할 경우, 서버의 환경이 바뀔 때마다 루트 경로를 일일이 수정해줘야 한다.
하지만 pageContext.request.contextPath를 쓰면 알아서 변경된 경로를 가져옴.
header.jsp 안에 nav 태그가 있음.
<nav>는 링크들을 모아놓은 친구임.
헤더에는 여러가지 카테고리가 있을 것이고, 그 중에서 눌렀을 때 다 링크 이동이니까 <nav>로 묶음.
<a href="#menu">
a태그에 #사용 >> 책갈피(anchor) >> a태그를 누르면 menu로 이동한다.
<a href="#">
퍼블리셔들이 어떤 경로로 이동해야 할지 모를 때(화면만 구현함) 개발자에게 알려주기 위한 용도.
백엔드 개발자가 다 채워야 함.
"#"을 쓰게 되면 뒤로 가기가 되기 때문에 history가 남음.
아예 막아주는 것이 좋음.
<a href="javascipt:void(0);"> // a태그의 기능을 아예 막아줌.
회원가입은 <form method="post">로 해야 함.
1.URL에는 길이의 제한이 있음. 입력해야 하는 정보가 너무 많아서 URL 길이에 제한이 생길 수 있다.
2.개인정보가 노출이 되면 안 됨.
==> MemberFrontController에서 doPost가 실행됨.
[Controller]
Controller에서 login.me로 이동하는 이유(왜 .me -> FrontController -> 페이지 이동을 시키냐?)
login.jsp로 바로 이동하면 안 되나?? 안 됨.
URL에 실제 파일의 경로가 나오면 보안상 문제가 생길 수 있음.
경로를 숨겨서 가기 위해서 FrontController에서 .jsp 실제 경로를 써줌.
요청된 경로(login.me)가 브라우저에 남아 있음. URL에는 login.me가 있으나 실제 응답되는 페이지는 .jsp이다.
URL을 숨기기 위해서 login.me처럼 써주면 됨.
[FrontController]
login.me >> Ok가 없기 때문에 단순 페이지 이동임. DB조회 필요 없음. Controller 필요없음. DAO 필요 없음.
result만 써주면 됨.
1) login.me의 경우,
reuslt = new Result();
reuslt.setRedirect(false); // default값이 false이므로 생략해도 됨.(forward가 더 빠름. 단순조회할 때 사용)
result.setPath("app/member/login.jsp");
2) joinOk.me의 경우,
result = new JoinOkController().execute(req, resp);
//Controller를 쓴 이유 : DB조회가 필요하므로
result는 젤 밑에서 일괄처리 / 전송방식에 따라 사용하는 메소드가 다름
if(reuslt != null){ //result가 null인지 아닌지 먼저 검사
if(result.isRedirect()){//redirect방식
resp.sendRedirect(result.getPath());//경로만 전달
//request 객체가 초기화(req.setAttribute 통해서 데이터를 넣을 수가 없는 전송방식, 넣어봤자 초기화됨)
}else{//forward방식
RequestDispatcher dispatcher = req.getRequestDispatcher(result.getPath());//경로로 이동하고
dispatcher.forward(req, resp);//데이터도 전달
//request에 담아놓은 데이터를 그대로 유지하기 위해서 dispatcher 메소드를 사용해야 함.
}
}
FrontController, Controller 둘다 서블릿임. 둘다 req, resp 객체가 있음.
FC가 메인 서블릿이고, C가 나눠져 있는 것임.
C->FC->응답(페이지 이동)
C->응답 (response.printWriter() / PrintWriter out객체를 만들어서 / out.print()를 쓰면 바로 응답 가능) => ajax 요청할 때, 이 때는 reuslt == null
URL
가장 처음으로 돌아가고 싶을 때는 / 붙이기
가장 마지막 부분만 바꾸고 싶을 때는 / 붙이지 말고 이어서 쓰기
경로는 항상 FC에서 쓰면서 시작해야 함.
index.jsp >> 첫번째 페이지로 가기 위한 수단, 메인페이지로 갈 수 있는 FC에 경로를 바로 쏴줘야 함.
실제 메인페이지는 main.jsp
index.jsp를 실행시켜서 java 타고 와서 main.jsp가 응답되는 것임..!
[WebContent]
assets 폴더 안에 css, js 넣어놓기!
WebContent > assets > css, js, sass, webfonts,...
link, script 모두 절대경로로 만들기! root경로(contextPath) 쓰기
KAKAO 우편번호 API >> https://postcode.map.daum.net/guide
코드 복사해서 필요한 부분만 사용하기
'2022 > jsp' 카테고리의 다른 글
req.getParameter("") (0) | 2022.10.15 |
---|---|
web.xml (1) | 2022.10.15 |
day05[board_01] (0) | 2022.10.08 |
Cookie(쿠키) (0) | 2022.10.07 |
day04[EL, JSTL, MVC2] (0) | 2022.10.07 |