티스토리 뷰

2022/jsp

day05[board_01]

yanii 2022. 10. 8. 02:03

*프로젝트를 만들 때,
인코딩 설정(UTF-8)
서버 설정(Tomcat v9.0)
web.xml 만들기
buildpath .jar 추가 : jstl, standard, mybatis, mysql
WebContent > WEB-INF > lib > .jar 복붙 : jstl, standard, mybatis, mysql, dbcp(tomcat>lib)


요청할 때 전송방식
1.get
2.post
(doGet, doPost 구분은 spring 때 배울 것임.)

web.xml에서 알려주는 경로 -> FrontController(요청과 응답객체를 받을 수 있는 서블릿)

FrontController에서 url 분석해서 알맞는 Controller를 실행시킴.
-> Controller에서 알맞는 DAO를 실행시킴.

FrontController에서 전송방식
1.forward
2.redirect



*순서*
1.DB > table 만들기
(localhost connectino error(Public Key Retrieval is not allowed)가 뜨면,
Driver properties > allowPublicKeyRetrieval > true로 바꾸기 > Test connection

2.table에 따른 VO 만들기(private변수선언, 기본생성자, getter&setter, toString재정의)

3.mybatis, config 복붙
세부내용 수정(경로 꼼꼼히!)

4.DAO 만들기
sqlSession, 기본생성자
openSession(true) = DB에서 auto commit되는 거랑 같은 뜻!

5.Mapper.xml > namespace 수정
(DB 쿼리 쓰는 곳)

6.web.xml > 서블릿 등록
*.me (memberFrontController로 보내라) 회원관련
*.bo (boardFrontController로 보내라) 게시판관련
*.st 스터디관련
*.pj 프로젝트관련
FrontController도 table마다 하나씩 생성

7.FrontController
System.out.println(req.getConTextPath());

※ 서버를 돌릴 때는 Servers > 실행을 누름 > 브라우저 직접 열기 > localhost:포트번호/*.me (url 직접 작성)(f11 금지!!)
Modules(프로젝트의 루트경로를 관리하는 곳) > Add Web Module > 프로젝트 추가 
루트 경로 수정하려면 edit으로 수정 가능

URI 개념 안에 URL가 있음.

한글 깨졌을 때,
?로 깨졌다 > 진짜 한글이 깨져서 인코딩 방식이 잘 못 된 것!
%로 깨졌다 > 인코딩이 디코딩이 안 된 것!
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html; charset=utf-8");

URL에 불필요한 것들을 빼고 필요한 것만 가져오는 방법
1.lastIndexOf('/')(오른쪽에서 왼쪽으로 확인) 사용 후, subString 사용해서 뒤에 내용만 가져옴.
2.그냥 쓴다. URL 통채를 다 구분한다.

req.getRequestURI() : root경로를 뺀 URI
ContextPath() : root경로
만약 루트 경로에 /가 아니라 이름이 있다면 ContextPath를 빼줘야 함.
String requestURI = req.getRequestURI();
String contextPath = req.getContextPath();
String request = requestURI.substring(contextPath.length());

반복문으로 주소 검사(if문이나 switch문)

8.Controller
ex)회원가입의 경우, 1.회원가입 페이지로 이동 2.회원가입 완료 => 2가지가 있음. 구분이 필요함!
==> 1.join.me 2.joinOk.me(Ok가 붙으면 DB 조회(CRUD)가 필요하다)

Controller에서 실행시키는 메소드(execute())는 return 타입이 void이면 안 됨.
FrontController에서 결과를 알아야 하기 때문, 어디로 이동할 건지, 전송방식에 대해 전달해줘야 함.
리턴값이 2개 >> 클래스에 담기 >> 클래스 타입을 리턴타입으로 하기

execute()는 서블릿을 썼기 때문에 throws IOException, ServletException (서블릿이 사용하기 때문에 서블릿이 잡아줄 것임)

9.리턴값 담을 클래스(Result) 선언
private boolean isRedirect;(false = forward 방식으로 보내겠다. true = redirect 방식으로 보내겠다)
private String path;
기본생성자, 게터세터, toStirng 재정의

10.FrontController
result는 일괄처리하기, 다른 오류가 날 수 있기 때문에 Exception으로 try-catch 잡아주기

11.상위 카테고리에 Execute(인터페이스), Result(클래스) 생성

12.Controller는 무조건 Execute 지정받아서 강제성 부여
Result는 항상 정해져 있음. 결과가 무조건 성공임. 화면에서 검사 다해서 정확한 값으로 들어오니까
DB에서 실패할 수가 없음. 
Result.setPath("이동할 경로.me"); 
Result.setPath("/이동할 경로.me"); > 슬래쉬를 붙이면 contextPath가 날아감.

forward : request 객체의 scope를 유지한 채로 가기 때문에 데이터를 전달할 때 사용. contextPath를 안 붙여도 된다.
redirect : request scope가 없어짐.

                 데이터 전달X. contextPath도 request scope에 있으므로 초기화되어서 root정보도 없어짐. 
                 사용되어서 초기화 되기 전에 직접 contextPath를 붙여줘야 함.
                 result.setPath(req.getContextPath() + "/member/login.me");

디자인?개발? >> 디자인이 먼저다! 화면이 먼저 만들어져 있어야 함. 개발이 항상 마지막 단계임.

13.view(.jsp)단 생성
WebContent > app > member > join.jsp

'2022 > jsp' 카테고리의 다른 글

web.xml  (1) 2022.10.15
day06[board_02]  (0) 2022.10.08
Cookie(쿠키)  (0) 2022.10.07
day04[EL, JSTL, MVC2]  (0) 2022.10.07
day03[Get, Post, Ajax, MyBatis]  (0) 2022.10.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함