MVC 3 쿠키(이메일 기억하기)

 

컨트롤러에서 쿠키 사용하기

 

1. 커맨드 클래스 필요 ( rememberEmail )

package controller;

public class LoginCommand {

	private String email;
	private String password;
	private boolean rememberEmail;

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public boolean isRememberEmail() {
		return rememberEmail;
	}

	public void setRememberEmail(boolean rememberEmail) {
		this.rememberEmail = rememberEmail;
	}

}

 

2. loginForm.jsp 이메일 기억하기 선택 항목 추가

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
    <title><spring:message code="login.title" /></title>
</head>
<body>
    <form:form modelAttribute="loginCommand">
    <form:errors />
    <p>
        <label><spring:message code="email" />:<br>
        <form:input path="email" />
        <form:errors path="email"/>
        </label>
    </p>
    <p>
        <label><spring:message code="password" />:<br>
        <form:password path="password" />
        <form:errors path="password"/>
        </label>
    </p>
    
    <p> <!-- 해당 코드 추가 -->
    	<label><spring:message code="rememberEmail" />
    	<form:checkbox path="rememberEmail" />
    	
    	</label>
    
    </p>

    <input type="submit" value="<spring:message code="login.btn" />">
    </form:form>
</body>
</html>

 

3. LoginController의 form()메서드에 쿠키가 존재할 경우 폼에 전달할 커맨드 객체의 email 프로퍼티를

    쿠키의 값으로 설정 ( @CookieValue를 이용해서 쿠키를 전달받도록 설정 )

    @GetMapping
    public String form(LoginCommand loginCommand,
    		@CookieValue(value = "REMEMBER", required = false) Cookie rCookie) { // 이 부분! LoginCommand loginCommand
    	//model.addAttribute("loginCommand", new LoginCommand());
    	if(rCookie != null) {
    		loginCommand.setEmail(rCookie.getValue());
    		loginCommand.setRememberEmail(true);
    	}
    	
    	
    	return "login/loginForm";
    }

 

 

4. LoginController의submit()메서드에 이메일 기억하기 옵션을 선택한 경우 로그인 성공 후에 이메일을 담      고 있는 쿠키를 생성

    @PostMapping
    public String submit(LoginCommand loginCommand, Errors errors
    		                                 , HttpSession session, HttpServletResponse response) {
        new LoginCommandValidator().validate(loginCommand, errors);
        if (errors.hasErrors()) {
            return "login/loginForm";
        }
        try {
            AuthInfo authInfo = authService.authenticate(
                    loginCommand.getEmail(),
                    loginCommand.getPassword());
            session.setAttribute("authInfo", authInfo);
            session.setAttribute("test", authInfo);
            //세션에 authinfo 저장해야 함.
            AuthInfo authInfo1 = (AuthInfo) session.getAttribute("authInfo");
            log.info("-------------------"+authInfo1);
            
            // 쿠키 생성
            Cookie rememberCookie = new Cookie("REMEMBER", loginCommand.getEmail());
            rememberCookie.setPath("/");
            if(loginCommand.isRememberEmail()) {
            	rememberCookie.setMaxAge(60 * 60 * 24 * 30); // 30일 쿠키 저장 기간
            }else {
				rememberCookie.setMaxAge(0);
			}
            response.addCookie(rememberCookie);
            	
            	
            return "login/loginSuccess";
        } catch (WrongIdPasswordException e) {
            errors.reject("idPasswordNotMatching");
            return "login/loginForm";
        }
    }

 

5. label.properties에 메시지를 추가

rememberEmail=이메일 기억하기

 

 

결과

 

 

 

MVC 4 : 날짜 값 변환_가입일 from~to 조회 기능

 

날짜를 이용한 회원 검색 기능

 

1. DAO에 selectByRegdate() 메서드 추가 

REGDATE 값이 두 파라미터로 전달받은 from과 to 사이에 있는 Member 목록을 구한다

	public class MemberDao {

	private JdbcTemplate jdbcTemplate;

	public MemberDao(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
    
    public List<Member> selectByRegdate(LocalDateTime from, LocalDateTime to){
		List<Member> result = jdbcTemplate.query("select * from MEMBER where REGDATE between ? and ? order by REGDATE desc",
				(rs, n) -> {
					Member member = new Member(
							rs.getString("EMAIL"),
							rs.getString("PASSWORD"),
							rs.getString("NAME"),
							rs.getTimestamp("REGDATE").toLocalDateTime());
					member.setId(rs.getLong("ID"));
					return member;
					
					
				}, from, to);
		return result;
	}
    }

 

 

2. 커맨드 객체 Date 타입 프로퍼티 변환처리 : @DateTimeFormat

커맨드 객체에 @DateTimeFormat 애노테이션이 적용되어 있으면 해당 애노테이션에서 지정한 형식을 이용해서 문자열을 LocalDateTime 타입으로 변환

package controller;

import java.time.LocalDateTime;

import org.springframework.format.annotation.DateTimeFormat;

import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ListCommand {
	@DateTimeFormat(pattern = "yyyyMMddHH") // 년 월 일 시간 
	private LocalDateTime from;
	
	@DateTimeFormat(pattern = "yyyyMMddHH")
	private LocalDateTime to;
	
	
	
	
}

 

 

3. 컨트롤러 생성

@RequestMapping으로 설정하면 GET, POST 둘 다 사용 가능 

package controller;

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import spring.Member;
import spring.MemberDao;

@Controller
public class MemberListController {
	
	private MemberDao memberDao;
	
	public void setMemberDao(MemberDao memberDao) {
		this.memberDao = memberDao;
	}
	
	@RequestMapping("/members")
	public String list(@ModelAttribute("cmd") ListCommand listCommand, Errors errors ,Model model) {
		
		if(errors.hasErrors()) {
			return "member/memberList";
		}
		
		if(listCommand.getFrom() != null && listCommand.getTo() != null) {
			List<Member> members = memberDao.selectByRegdate(listCommand.getFrom(), listCommand.getTo());
			model.addAttribute("members", members);
		}
		return "member/memberList";
		
	}
	
}

 

 

4. ControllerConfig 설정 클래스에 관련 빈 설정 추가 

@Configuration
public class ControllerConfig {
	
	@Autowired
	private MemberDao memberDao;
    
    	@Bean
	public MemberListController memberListController() {
		MemberListController controller = new MemberListController();
		controller.setMemberDao(memberDao);
		return controller;
	}
    
    }

 

5. LocalDateTime 값을 원하는 형식으로 출력해주는 커스텀 태그 파일 작성

JSTL이 제공하는 날짜 형식 태그는 아쉽게도 자바 8의 LocalDateTime 타입은 지원하지 않는다.

태그파일을 사용해서 LocalDateTime 값을 지정한 형식으로 출력

<%@ tag body-content="empty" pageEncoding="utf-8" %>
<%@ tag import="java.time.format.DateTimeFormatter" %>
<%@ tag trimDirectiveWhitespaces="true" %>
<%@ attribute name="value" required="true" 
              type="java.time.temporal.TemporalAccessor" %>
<%@ attribute name="pattern" type="java.lang.String" %>
<%
	if (pattern == null) pattern = "yyyy-MM-dd";
%>
<%= DateTimeFormatter.ofPattern(pattern).format(value) %>

 

6. 입력과 출력할 수 있게 JSP 파일 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원조회</title>
</head>
<body>

	<form:form modelAttribute="cmd">
	
	<p>
	<label>from: <form:input path="from" /></label>
	<form:errors path="from" />
	~
	<label>to: <form:input path="to" /></label>
	<form:errors path="to" />
	<input type="submit" value="조회">
	</p>
	
	</form:form>
	
	<c:if test="${! empty members }">
	
	<table>
		<tr>
		<th>아이디</th><th>이메일</th>
		<th>이름</th><th>가입일</th>
		</tr>
	<c:forEach var="mem" items="${members }">
	
		<tr>
		<td>${mem.id }</td>
		<td><a href="<c:url value="/members/${mem.id }"/>">${mem.email }</a></td>
		<td>${mem.name }</td>
		<td><tf:formatDateTime value="${mem.registerDateTime }" pattern="yyyy-MM-dd" /></td>
		
		</tr>
		</c:forEach>
	</table>
	
	</c:if>
	
</body>
</html>

 

 

결과

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-09-01 74일차  (0) 2023.09.01
2023-08-31 73일차  (0) 2023.08.31
2023-08-29 71일차  (0) 2023.08.30
2023-08-25 69일차  (0) 2023.08.25
2023-08-24 68일차  (0) 2023.08.24

+ Recent posts