인프런 JSP 강의 정리




Dynamic Web Project로 만든다.

JSP 파일은 컨테이너 파일에 들어있어야 하므로, 자동으로 WebContent 파일이 선택되어 진다.


순수자바파일 서블릿에서, html을 출력하기 객체를 제공해주는데, 그것이 바로 PrintWriter이다. doGet메소드에서 HttpServletRequest request 와 HttpServletResponse response 객체를 갖게되는데, 이 때 response에 getWrter()메소드를 호출하면 화면상에 출력해주는 out객체를 얻을 수 있다.

고전적인 서블릿 맵핑방법

또다른 서블릿파일 맵핑방법

HttpServlet





서블릿을 준비하는 단계는 @PostConstruct, 정리하는 단계는 @PreDestory



method 가 get방식이면 doGet 메소드가 받는다.
url뒤에 정보가 노출되서 전송, 보안에 취약, 텍스트길이 한계도 있다.

서블릿 맵핑 정보만 노출된다. 보안에 강함.






getParameterValues 메소드는 복수의 파라미터를 받을 때 상용한다.

JSP에서 데이터 공유하는 방법

config 객체는 웹 환경 설정이라고 하는 web.xml에 어떠한 데이터를 저장(명시)해 놓고, getInitParametr()메소드를 통하여 JSP에서 데이터를 공유하는 방식이다.

config객체 바로 사용해도 되고, getSevletConfig 메소드 사용해도 된다.
<servlet>에 명시된 <jsp-file>의 /jspEx.jsp에서만 사용할 수 있다는 것을 명심하자.

context param을 사용하여 프로그램, 어플리케이션 , 프로젝트 전체에 데이터를 공유할 수 있는 방법이다.

context param데이터를 가져올 때는 application 객체를 사용한다.

setAttribute 메소드로 속성을 저장할 수 있다.
getAttribute 메소드로 속성을 가져올 수 있다.


print 메소드 제공해준다.



페이지 지시어로, errorPage 적어주고, errorPage에서는 isErrorPage 값을 ture로 해줘야한다. default 값은 false이다.
서블릿에서 데이터 공유하는 방법






다른 서블릿 파일 하나 더 만들어서, 전체 공유하는 Context 파람의 속성이 추가되어 저장되엇는지 확인한다.

실행하면, /seg에서 정상적으로 출력된다.
쿠키

로그인하고 있는 와중에는 장바구님에 담겨있는게 지워지면 안된다.

쿠키가 널이면 처음 접속했구나 해서, 쿠키를 생성하고, 쿠키가 널이 아니면 처음 접속한게 아니구나 해서 재활용한다.
쿠키는 정보가 하나의 데이터가 아니라 여러 데이터가 있기 때문에 배열로 관리한다.
사용자쪽에 정보가 있기 때문에 request 객체로 getCookies 메소드 사용
cookie.setMaxAge(60*60); // 쿠키유효시간을 설정 60초 곱하기 60 , 1시간




쿠키와의 차이점은 세션은 웹컨테이너 서버에서 만들게 된다. 그것을 이용해서 서버와 클라이언트가 유지를 할 수 있도록 한다.
세션이 널이면 로그인을 유도한다.
세션이 널이 아니면 로그인 정보를 출력한다.
로그아웃하면 세션의 정보를 지운다.
서블릿은 클래스라 대문자 시작으로 이름을 만든다.




쿠키는 보안에 취약해서 세션을 더 많이 사용한다.
JSP에서 서블릿으로 보낼 때 한글처리

post 방식은 서블릿에 request.setCharacterEncoding("UTF-8");을 다 추가해줘야한다.
get 방식은 : 톰캣 server.xml에 <Connector URIEncoding="UTF-8" />를 한번만 추가해주면 된다.


JSP에서 또 다른 JSP에 보낼 때 한글 처리


POST 방식일 때, 상단에 <% request.setCharacterEncoding("UTF-8); %> 추가한다.
GET 방식은 똑같이, 톰캣 server.xml에 <Connector URIEncoding="UTF-8" />를 한번만 추가해주면 된다.
수정하고 나서는 server.xml이 톰캣에서 땡겨와서 수정하였기 때문에 싱크버튼을 눌러 싱크를 맞춰준다.

필터

서블릿이 엄청 많으면, 서블릿마다 request.setCharacterEncoinding을 넣어주는건 비효율적이다.
그래서 필터를 이용해서, 인코딩을 넣어준다.
필터는 인터페이스이기 때문에, 사용자가 다른 클래스를 만들어서 구현해야한다.
3가지를 구현한다. 필터가 생성될 때, init() , 필터 실행될때, dofilter(), 필터가 사라질때 destroy()
필터를 만드는 방법 (chain 기법이라고 함)
1. 먼저 필터를 만들어 줘야한다.

Filter 인터페이스를 구현한다.
init은 필터가 처음 생성될 때 초기화한다.
doFitler()은 필터가 작동하는 부분이다. chain이라는 파라미터가 있다.
response와 request객체를 이용해서 doFilter를 실행시켜주는 파라미터이다. chain을 실행하기전에 request단계에서, req.setCharacterEncoding("UTF-8");을 해준다. response 단계에서는 별 특별한 것 없이 그냥 흘려보내준다.
2. 필터는 web.xml에 등록하고, 맵핑해줘야한다.
/*로 서버에 들어오는 모든 요청에 대해서는 이 필터를 거치게 해달라.







Statement와 PreparedStatement의 차이
Statement는

PreparedStatement는


DAO : 데이터에 접근하는 객체
DTO : 데이터베이스에서 관리하는 데이터의 형태와, 자바에서 관리하는 데이터의 형태 로 변환해주는 매개체



기존에는 요청할 때마다 커넥션 객체를 만들어서 핸들링하고 클로즈했는데, 커넥션 풀은 미리 만들어서 새로 만드는 것 없이, 필요할 때 마다 갖다 쓰는거다.
컨테이너 풀은 톰캣에 만든다.

context.xml에 위의 내용 추가해준다.
maxActive 는 4개를 만들어라는 말이고, 4개모두 렌트된 상황이면 1개 더 늘어날 수 있다.
1개가 늘어날 때, 기다리는 시간이 maxWait 이다. 10초

자바코드에서는 주석 내용 컨테이너로 가서 필요없다.
context에서 데이터베이스를 빌려오는 코드만 있으면 된다.
가져온거를 DataSource에 할당해서 사용한다.
'백엔드 > JSP' 카테고리의 다른 글
MVC 패턴 연습> 회원 가입과 회원 보기를 모델2로 고치기 (0) | 2021.04.27 |
---|---|
인프런 JSP MVC 모델2 ① (0) | 2021.04.26 |
JSP 71 MVC 패턴 구현 방법 (2) | 2021.04.14 |
JSP 70 MVC 패턴 구조 (모델1, 모델2) (1) | 2021.04.14 |
JSP 69 MVC의 개요 (0) | 2021.04.14 |