JPA 초기 데이터 삽입
src/main/resource 에 import.sql 파일 이름으로 다음과 같이 데이터를 삽입 하는 쿼리를 작성한다.
INSERT INTO USER (USER_ID, PASSWORD , NAME, EMAIL) VALUES('test', '1111' , '홍길동' , 'test@gmail.com');
INSERT INTO USER (USER_ID, PASSWORD , NAME, EMAIL) VALUES('admin', '1111' , '김민수' , 'kiminsu@gmail.com');
mustache 문법 + 스프링 연동
데이터가 존재할 경우 {{#}} {{/}}
데이터가 없을 경우 {{^}} {{/}}
머스터치 공식 : https://mustache.github.io/ 데모 : https://mustache.github.io/#demo - {{ }} 을 통해 빠른 치환 장점 - 웬만한 플랫폼을 모두 지원한다. - 속도가 빠르다. 단점 - 플랫폼 공용으로 만들어졌기에 스프링 같은 곳에서 쓰기위해서는 모두 모델안에 넣어줘야한다. - 상위를 선택하는 방법이 한정적임. 문법 예제 데이터
- {
- "header": "Colors",
- "items": [
- {"name": "red", "first": true, "url": "#Red"},
- {"name": "green", "link": true, "url": "#Green"},
- {"name": "blue", "link": true, "url": "#Blue"}
- ],
- "empty": false
- }
출력
- {{ header }}
IF
- NOT (^)을 제외하면 루프와 동일
- (^) 제외시 IF 개념이 아니라 반복 이지만 이해를 돕기위한 설명입니다.
- {{# header }}
- 해더가 존재함
- {{/ header }}
- {{^ header }}
- 해더가 존재하지 않음
- {{/ header }}
- {{^ header333 }}
- 해더333 이 존재하지 않음
- {{/ header333 }}
내부출력 - 자기자신
- {{# header }}
- 해드의 값은 {{.}} 임
- {{/ header }}
루프 : 사실상 위 IF 가 루프를 통하고있다.
- 즉 배열형이면 루프를 돌며 출력되며, 배열이 아닌 값이면 단일 출력이되며, 값이 없으면 출력되지않음.
- {{#items}}
- {{#first}}
- <li><strong>{{name}}</strong></li>
- {{/first}}
- {{#link}}
- <li><a href="{{url}}">{{name}}</a></li>
- {{/link}}
- {{/items}}
주석
- {{! 이렇게하면 주석이 됩니다. }}
상위선택
- 상위를 선택하는 문법이 한정적임
- 이렇게 사용할 경우 items 안에 해더가 없을때 한단계 위 해더가 선택된다.
- 단계별로 올라가도 끝내 해더가 나오지 않을 경우 빈값
- {{#items}}
- {{header }}
- {{/items}}
포함 : include
- 해당 경로에 있는 템플릿을 결합합니다.
- {{>경로}}
스프링에서 적용하기
메이븐 추가
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-mustache</artifactId>
- </dependency>
src/main/resources/templates/test.html
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <title>{{ title }}</title>
- </head>
- <body>
- <div>
- {{ msg }}
- </div>
- </body>
- </html>
컨트롤러
- @RequestMapping("/")
- public String root(Model model, HttpSession session)
- {
- session.setAttribute("title", "타이틀 테스트");
- session.setAttribute("msg", "Hello!!");
- return "test";
- }
mustach session( 세션 사용 설정)
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
spring.mustache.expose-session-attributes=true
application.properties
spring.datasource.url=jdbc:h2:~/demo2;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
server.port=1111
spring.mustache.expose-session-attributes=true
class UserController
@Autowired
private UserRepository userRepository;
@GetMapping("/loginForm")
public String loginForm(){
return "/user/login";
}
@PostMapping("/login")
public String login(String userId, String password, HttpSession session){
User user =userRepository.findByUserId(userId);
if(user==null){
log.info("login - user.null");
return "redirect:/users/loginForm";
}
if(!password.equals(user.getPassword())){
log.info("login - !password");
return "redirect:/users/loginForm";
}
log.info("login - success");
session.setAttribute("user", user);
return "redirect:/";
}
@GetMapping("/logout")
public String logout(HttpSession session){
session.removeAttribute("user");
return "redirect:/";
}
navigation.html
<div class="collapse navbar-collapse" id="navbar-collapse2">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="../index.html">Posts</a></li>
{{^user}}
<li><a href="/users/loginForm" role="button">로그인</a></li>
<li><a href="/users/form" role="button">회원가입</a></li>
{{/user}}
{{#user}}
<li><a href="/users/logout" role="button">로그아웃</a></li>
<li><a href="/users/{{id}}/form" role="button">개인정보수정</a></li>
{{/user}}
</ul>
</div>
댓글 ( 7)
댓글 남기기