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 |