예제
기존 코드의 스크립트릿을 JSTL 태그로 변경합니다.
기존 코드1
for 문을 JSTL <c : forEach> 태그로 변경합니다.
기존 코드2
switch 문을 <c : if> 태그로 변경합니다.
삼항연산자로 변경할 수 있습니다.
조건식1? A : (조건식2? B:C)
조건식1이 참이면 A 거짓이면 조건식 2로 넘어갑니다.
조건식2가 참이면 B 거짓이면 C가 됩니다.
JSTL funtions 태그 라이브러리
함수 fn은 태그가 아닌 EL 표현식과 함께 사용합니다.
기존 코드3
태그 대신에 EL 표현식에서 함수 앞에 fn : 을 작성합니다.
예제 : select 박스로 회원 정보 검색하기
이름, 주소, 고객등급, 거주지역을 선택하고 값을 입력하여 회원정보를 조회합니다.
고객등급의 경우 VIP, 일반, 직원을 선택하여 조회합니다.
DAO
Map(HashMap)을 생성하고 put으로 search 메소드의 두 개의 인자를 담습니다.
selectList()의 두번째 인자에 map을 대입합니다.
SQL 맵퍼 파일
동적 쿼리를 사용합니다.
조건에 대해 조회하는 항목이 고정되어 있지 않을 때 파라미터를 이용하여 대상들을 조건에 맞게 조회합니다.
if문을 이용하여 column 파라미터의 값에 따라 조건식을 다르게 합니다.
memberList.jsp
모든 회원 정보를 select하여 애트리뷰트로 설정하고 4_memberList.jsp로 요청 정보를 전달합니다.
4_memberList.jsp
검색 버튼을 누르면 memberSearch.jsp로 요청 정보를 전달합니다.
첫 번째 select 박스의 name과 id는 column입니다.
input 태그에 value 값으로 검색 버튼 클릭 후에도 입력한 값이 보이게 합니다.
두 번째 select 박스의 name은 find, id는 grades입니다.
전체보기 버튼을 클릭하면 memberList.jsp로 이동하여 전체 회원 정보가 조회됩니다.
memberSearch.jsp
column 파라미터(첫 번째 select박스 값)를 가져옵니다.
find 파라미터(input 입력 값 또는 두 번째 select박스 값)를 가져옵니다.
DAO의 search메소드를 실행합니다.
결과를 애트리뷰트로 설정하고 4_memberList.jsp로 요청 정보를 전달합니다.
4_memberList.jsp 자바스크립트 코드
1. 조회 후에 select 박스 값 남아있게 하기
querySelectAll(선택자) : 선택자의 모든 요소 정보를 NodeList로 반환합니다.
forEach 문으로 option 요소에 selected 속성을 부여합니다.
2. 화면 표시 변경하기
검색 버튼을 누른 후
select 박스가 고객등급을 나타내면 두 번째 select 박스가 보이고, 입력창은 안 보입니다.
이름, 주소, 거주지역을 나타내면 입력창이 보이고, 두 번째 select 박스는 안 보입니다.
3. 검색 컬럼 선택 변경하기
첫 번째 select 박스를 변경하면(change) changeView 함수가 실행됩니다.
고객등급을 선택하면 두 번째 select 박스가 보입니다.
이름 주소, 거주지역을 선택하면 입력창이 보이고, 입력창에 있던 값은 사라집니다.
실행화면
JSP 내장객체
스크립트릿 안에서만 사용하는 JSP 객체입니다.
별도로 선언하지 않고 사용할 수 있습니다.
이름 | 타입 | 설명 |
request | HttpServletRequest | 브라우저에 전달하는 요청 정보를 저장 |
response | HttpServletResponse | 요청에 대한 응답을 저장 |
out | JspWriter | JSP 페이지 출력 스트림 객체 |
pageContext | PageContext | 요청을 처리하는 JSP 페이지 정보를 저장 |
page | Object | 일반 자바객체 |
config | ServletConfig | 웹 애플리케이션 정보를 저장 |
session | HttpSession | 웹서버와 브라우저 사이의 연결 정보를 저장 |
application | ServletContext | 웹 애플리케이션의 context 정보를 저장 |
session
HTTP 프로토콜은 stateless로 상태 정보 유지가 안됩니다. (비연결 지향) cf) 카카오톡 : 연결지향
웹 서버와 브라우저 사이의 연결 정보를 저장하는 방법을 사용합니다.
request를 통해서 브라우저의 세션 ID가 부여되고 그 값으로 클라이언트를 구별합니다.
톰캣은 이름을 JSESSIONID로 만듭니다.
로그인 기능 구현에 활용합니다.
세션 유효시간은 서버에서 설정하고 모든 프로젝트에 적용됩니다. (web.xml)
session 객체의 메소드
getID
세션 ID를 리턴합니다.
getCreationTime
세션이 만들어진 시간(처음 요청 보낸 시간)을 반환합니다.
timestamp 타입으로 반환되므로 DateFormat으로 변환합니다.
getMaxInactiveInterval
session 유효시간을 초 단위로 반환합니다.
session 유효시간은 web.xml 에서 설정합니다.
getLastAccessedTime
같은 세션 ID로 요청한 최근 시간을 반환합니다.
timestamp 타입으로 반환되므로 DateFormat으로 변환합니다.
예제 : 로그인 폼 만들기
VO - User 클래스
DAO - login( )
DB에 저장되어 있는 회원 정보 중 email과 password가 일치하는 회원 정보를 select합니다.
SQL 맵퍼 파일
3_loginForm.jsp
아이디 비밀번호를 입력하고 로그인 버튼을 누르면 4_login.jsp로 요청 정보를 전달합니다.
HOME 버튼을 누르면 5_home.jsp 페이지로 이동합니다.
4_login.jsp
email 파라미터와 password 파라미터를 저장합니다.
DAO의 login 메소드로 로그인합니다.
session 객체에 사용자 정보를 저장하고, 5_home.jsp로 새로운 요청을 보냅니다.
5_home.jsp
로그인 정보가 잘못되었다면 (user==null) 로그인 버튼이 출력되고 누르면 3_loginForm.jsp로 이동합니다.
로그인 정보가 일치한다면 (user!=null) 로그아웃 버튼이 출력되고 누르면 6_logout.jsp로 이동합니다.
로그인 성공
로그인 실패
로그아웃 버튼을 누르면 로그아웃 메시지가 나옵니다.
6_logout.jsp
invalidate 메소드로 현재 session 객체(세션 ID)를 무효화시킵니다.
5_home.jsp에 파라미터 logout의 값을 y로 요청합니다.
개발자 도구에서 세션 ID 확인
개발자 도구를 실행하고(F12) [Application] - [Cookies] 에 있는 쿠키를 선택하면 세션 ID를 확인할 수 있습니다.
'수업 일지 > JSP' 카테고리의 다른 글
59일차 -[JSP] 예제 / Map.Entry (0) | 2022.04.02 |
---|---|
58일차 - [JSP] setTimeout()/쿠키 (0) | 2022.03.31 |
56일차 - [JSP] mybatis - DAO/taglib 지시자/JSTL (0) | 2022.03.29 |
55일차 - [JSP] 내장 객체/속성/include/EL/빌드 도구/mybatis (0) | 2022.03.28 |
52일차 - [JSP] GET, POST 방식/Lombok (0) | 2022.03.23 |
댓글