Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- github
- 페이지 재사용
- 국취제
- Git
- 국비학원
- 배열
- 권한변경
- 페이징
- 내배카
- 비밀번호변경
- 로그아웃
- 회원정보수정
- mvc
- jdbc환경설정
- 비밀번호암호화
- 회원탈퇴
- jsp기본
- jdbc설정
- redirect
- 관리자회원조회
- 정처기
- forward
- 내일배움카드
- live server 환경설정
- 검색기능
- emmet환경설정
- 별찍기
- 인코딩
- 입력메소드
- 국민취업지원제도
Archives
- Today
- Total
기록
*76일차 (회원가입 / 중복아이디 체크) 본문
@session 제한시간
<session-config>
<session-timeout>30</session-timeout>
</session-config>
- 30분동안 다음 요청이 없으면 session 폐기함
- localhost로 접속X || ip로 접속O
- 왜 필요한가? → 서버의 과부하를 줄이고 보안을 유지하기위함
@사용자 수 체크하기
- listener
- -특정 이벤트를 처리하는 인터페이스
- -이벤트의 발생여부를 기다리고 발생 시 해당 이벤트에 맞는 처리를 수행하는 객체
- listener 사용하기
- Session보다 Context가 생명주기가 긺
- tomcat 시작 ~ 끝까지 유지되는 객체
- 여기서는 LifeCycle 사용
1. 접속하고 있는 사용자수 (변수) 정의
2. session생성되면 수를 1 증가시킴
3. destory에서는 1 감소시킴
서버를 껐다키면 서버가 날라가야하는데 개발시에는 폐기하지않고 유지시키기위하여 조건문 담
*등록은 web.xml
<listener>
<listener-class>common.listener.SessionCounterListener</listener-class>
</listener>
- Ctrl+hover에서 링크걸리면 ㅇㅋ
- 어떤 listener interface를 구현했냐에 따라 작동방식이 달라짐
- 로그인할때가 아닌 브라우저에 처음 접속했을때 만들어짐
- 세션 폐기 후 session이 재생성 되므로 세션생성이 출력됨
*session 속성에 관한 이벤트 생성
- Changes to attributes listener 사용
- Add | Remove | Replace
- 이벤트 객체로부터 현재 session객체를 가져올 수 있다.
- 로그아웃을 하게되면 Remove가 호출될 것
@Cookie 직접관리 - 아이디저장
- MemberLoginServlet에서 관리
String saveId = request.getParameter("saveId"); // "on" | null
- 체크했다면 on이 넘어오고 , 안했으면 null이 넘어옴
- name은 saveId | value에는 사용자의 현재 아이디값(memberId) 저장
- 쿠키를 사용할 경로 지정 → mvc로 시작하는 경로에 이 쿠키를 사용함.
- 쿠키 유효기간 지정 → 7*24*60*60 (일주일 후 폐기)
- max-age설정이 없다면 세션쿠키로 등록 → 브라우저 종료시 폐기
- max-age설정이 있으면 영속쿠키로 등록 → 지정한 시간에 폐기
- 쿠키를 response에 담아줌 (Set-Cookie 헤더에 작성)
*로그아웃했을때도 아이디저장 유지
- saveId값으로 쿠키가 있냐없냐를 따져봄
<input ~~~ ... value="<%= saveId != null ? saveId : "" %>">
- 있으면 saveId값, 없으면 null
* 쿠키를 삭제하려면???
- 동일한 쿠키(path도 같아야함) 를 만들고 유효기간 설정을 0으로...
- 0은 즉시삭제
cookie.setMaxAge(0);
@회원가입
1. header.jsp
<input type="button" value="회원가입" onclick="location.href='<%= request.getContextPath() %>/member/memberEnroll';">
- 주소 이렇게 쓸것
2. 요청 별로 Servlet을 만듦 → MemberEnrollServlet
- URL mapping : /member/memberEnroll 로 변경
- doGet + doPost 둘다 쓰기
3. 바로 jsp에 위임
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request
.getRequestDispatcher("/WEB-INF/views/member/memberEnroll.jsp")
.forward(request, response);
}
- 바로 RequestDispatcher에 반환함
4. 유효성검사 (jsp)
5. 제출 (실제 post타입으로 횐가입)
a) 회원정보등록요청 (DML -MemberEnrollServlet)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 1. 인코딩
request.setCharacterEncoding("utf-8");
// 2. 사용자입력값 처리
String memberId = request.getParameter("memberId");
String password = request.getParameter("password");
String memberName = request.getParameter("memberName");
String gender = request.getParameter("gender");
String email = request.getParameter("email");
String phone = request.getParameter("phone");
String address = request.getParameter("address");
String _birthday = request.getParameter("birthday");
System.out.println(_birthday);
Date birthday = null;
if(_birthday != null && !"".equals(_birthday))
birthday = Date.valueOf(_birthday);
String[] _hobby = request.getParameterValues("hobby");
String hobby = null;
if(_hobby != null)
hobby = String.join(",", _hobby);
Member member = new Member(
memberId, password, memberName, MemberRole.U,
gender, birthday, email, phone, address, hobby, null
);
System.out.println("member@MemberEnrollServlet = " + member);
// 3. 업무로직 (db insert)
int result = memberService.insertMember(member);
String msg = "성공적으로 회원가입했습니다.";
// 4. 리다이렉트 (DML처리인 경우 url을 변경해서 새로고침오류를 방지한다.)
// 사용자 경고창 처리
// 성공적으로 회원가입했습니다. | 회원가입 실패했습니다.
request
.getSession()
.setAttribute("msg", msg);
response.sendRedirect(request.getContextPath() + "/");
} catch(Exception e) {
// 1. 로깅 및 관리팀 알림.
e.printStackTrace();
// errorLogToDiscord(e);
// 2. 예외던지기 - tomcat에 통보
throw e;
}
- birthday,hobby 변환해줘야함
b) member-query에 추가
insertMember = insert into member values(?,?,?,?,?,?,?,?,?,default)
c) MemberService
- connection 객체 생성
- dao 요청
- 트랜잭션 처리
- connection객체반환
d) 예외처리 - exception package
- dao에서 예외를 던짐 (404는 톰캣이 보낸 예외로 사용자에게 다른페이지를 보여줘야함)
- service에서는 commit,rollback 후 다시던짐 (다시 던져야 예외페이지로 감)
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/WEB-INF/views/common/error.jsp</location>
</error-page>
- 따로 관리함
@중복 아이디 체크
1. input 버튼생성 (checkIdDuplicate(); 함수호출)
- idValid = 0 이면 중복검사 전 , =1 이면 중복검사 통과
2. 함수생성
- 현재 페이지를 벗어나면 안됨
<form name="checkIdDuplicateFrm" action="<%= request.getContextPath() %>/member/checkIdDuplicate">
<input type="hidden" name="memberId" />
const checkIdDuplicate = () => {
const title = "checkIdDuplicatePopup";
const spec = "width=300px, height=200px";
const popup = open("", title, spec);
const frm = document.checkIdDuplicateFrm;
frm.target = title; // 해당팝업에서 폼을 제출!
frm.memberId.value = _memberId.value;
frm.submit();
};
- open("")이 공백인 이유 : form이 연결되야해서
3. checkIdServlet 생성
- /member/checkIdDuplicate
ㄹㅇ하면할수록모르겠다 환장함
'학원 > 강의' 카테고리의 다른 글
*78일차 (비밀번호 변경 / 관리자회원 조회 / 권한변경 / 검색) (0) | 2022.05.18 |
---|---|
*77일차 (회원정보수정 / 비밀번호 암호화) (0) | 2022.05.17 |
*75일차 (로그인/로그아웃/session/cookie) (0) | 2022.05.13 |
*74일차 (2) (0) | 2022.05.12 |
*74일차 (0) | 2022.05.12 |