728x90
반응형
정처기 실기 본다고 복습 블로깅을 제대로 못했다. 오늘부터 다시 열심히 고고
일단 tiles를 쓰면 구조가 이렇게 된다
WEB-INF 폴더 밑에 XML 파일을 만들어주고, 내용은 아래와 같이 설정해준다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<!-- 화면 설정
@Contoller
public class MainController
{
@RequestMapping("main/main.do")
public String main_main()
{
==
==
==
return "main";
}
}
-->
<definition name="main" template="/WEB-INF/main/main.jsp">
<!-- include할 파일 설정 -->
<put-attribute name="header" value="/WEB-INF/main/header.jsp"/>
<put-attribute name="menu" value="/WEB-INF/main/menu.jsp"/>
<put-attribute name="content" value="/WEB-INF/main/content.jsp"/>
<put-attribute name="footer" value="/WEB-INF/main/footer.jsp"/>
</definition>
<!-- extends="main" main의 구조를 그대로 읽어 온다 -->
<!-- <definition name="board/list" extends="main">
<put-attribute name="content" value="/WEB-INF/board/list.jsp"></put-attribute>
</definition>
<definition name="notice/list" extends="main">
<put-attribute name="content" value="/WEB-INF/notice/list.jsp"></put-attribute>
</definition> -->
<definition name="*/*" extends="main">
<put-attribute name="content" value="/WEB-INF/{1}/{2}.jsp"></put-attribute>
</definition>
<definition name="*/*/*" extends="main">
<put-attribute name="content" value="/WEB-INF/{1}/{2}/{3}.jsp"></put-attribute>
</definition>
</tiles-definitions>
가장 기본으로 깔릴 파일을 defintion name에 설정을 해둔다.
그리고 그 안에 include될 파일들의 name과 경로명을 설정해준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
<table width=900 height=700 border=1 bordercolor=black>
<tr>
<td colspan="2" height=100>
<tiles:insertAttribute name="header"/>
</td>
</tr>
<tr>
<td width=200 height=500>
<tiles:insertAttribute name="menu"/>
</td>
<td width=700 height=500>
<tiles:insertAttribute name="content"/>
</td>
</tr>
<tr>
<td colspan=2 height=100>
<tiles:insertAttribute name="footer"/>
</td>
</tr>
</table>
</center>
</body>
</html>
그리고 include 해줄 자리에
<tiles:insertAttribute name="header"/>
를 써서 화면이 출력되게 만들어 준다.
위에는 기본적인 예제였다면 아래는 실제 프로젝트처럼 완성을 해봤다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- 배치 -->
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="main" template="/WEB-INF/main/main.jsp">
<put-attribute name="header" value="/WEB-INF/main/header.jsp"/>
<put-attribute name="nav" value="/WEB-INF/main/nav.jsp"/>
<put-attribute name="content" value="/WEB-INF/main/content.jsp"/><!-- 변경되는 영역 -->
<put-attribute name="footer" value="/WEB-INF/main/footer.jsp"/>
<put-attribute name="copy" value="/WEB-INF/main/copy.jsp"/>
</definition>
<definition name="*/*" extends="main">
<put-attribute name="content" value="/WEB-INF/{1}/{2}.jsp"/>
</definition>
</tiles-definitions>
만약 main위에 있는 content의 내용을 계속 바꿔주려면 이렇게 코드를 써주면 된다.
package com.sist.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MainController {
@RequestMapping("main/main.do")
public String main_main()
{
return "main";
}
}
사용자가 보내온 요청에 응답하기 위해서 위와 같이 controller를 만들어 준다.
definition name값과 return값을 맞추면 화면이 include되어 띄워진다.
그리고 이건 tiles의 내용은 아니지만 앞으로 사용할 RestController의 내용
package com.sist.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import com.sist.vo.*;
import com.sist.dao.*;
// _ok.jsp실행하는 경우 (update,delete => 비밀번호가 검색후...) => JSON,일반 문자열 , Ajax,VueJS
// 페이지 이동(@Controller)이 아니라 실제 데이터값 전송 (한글 변환을 반드시 체크)
@RestController
// @ResponseBody => 모바일,Front연결 => JSON => 변경(승격) @RestController
public class FreeBoardRestController {
// DAO가 필요하다(스프링에서 관리하는 클래스 => 특별한 경우가 아닐때 싱글턴(메모리 할당을 1번 해서 재사용:디자인 패턴)
/*
* 디자인 패턴 (23개) => GOF패턴
* 스프링에서는 8개 사용
* = 싱글턴
* = 팩토리 (lookup=>getBean()) => DriverManager
* = POJO => 필요한 경우에 형변환 ( Adapter 패턴 )
* = MVC 패턴
* = 프록시패턴 (대신 호출:대리자) : AOP
*/
@Autowired
private FreeBoardDAO fDao;
@PostMapping("board/update_ok.do")
public String board_update_ok(FreeBoardVO vo,int page)
{
String result="";
// 비밀번호가 O(상세보기 이동) , X(자바스크립트 history.back())
boolean bCheck=fDao.freeboardUpdate(vo);
// 결과값을 가지고 올때 DAO를 연결
if(bCheck==true)
{
result="<script>location.href=\"../board/detail.do?no="+vo.getNo()+"&page="+page+"\";</script>";
}
else
{
result="<script>alert(\"비밀번호가 틀립니다!!\");history.back();</script>";
}
return result;
}
}
사용자가 수정을 누르면, dao에서 비밀번호가 맞는지 확인을 해주고 값을 가져오게 한다.
비밀번호가 맞으면 상세보기로 이동을하고, 틀리면 javascript history.back()으로 되돌아 간다.
728x90
반응형
'programming > Gukbi' 카테고리의 다른 글
국비 교육 86일차 - Mybatis 동적 쿼리 (0) | 2021.04.29 |
---|---|
국비 교육 85일차 - transaction , AOP 프로그램 (0) | 2021.04.28 |
국비 교육 83일차 - AJAX 검색 기능 활용 (0) | 2021.04.26 |
국비 교육 82일차 - oracle index 활용 (0) | 2021.04.26 |
국비 교육 81일차 - annotation service (0) | 2021.04.21 |