Jsp 웹 페이지 만들기 | 서블릿/Jsp 강의 51 – Jsp를 이용해서 자바 웹 프로그램 만들기 시작 빠른 답변

당신은 주제를 찾고 있습니까 “jsp 웹 페이지 만들기 – 서블릿/JSP 강의 51 – JSP를 이용해서 자바 웹 프로그램 만들기 시작“? 다음 카테고리의 웹사이트 you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: you.tfvp.org/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 뉴렉처 이(가) 작성한 기사에는 조회수 17,940회 및 좋아요 347개 개의 좋아요가 있습니다.

jsp 웹 페이지 만들기 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 서블릿/JSP 강의 51 – JSP를 이용해서 자바 웹 프로그램 만들기 시작 – jsp 웹 페이지 만들기 주제에 대한 세부정보를 참조하세요

좋아요~ 꾸욱…
조회수가 안나오던 이 강의가 하루 2~3 조회수가 나오는 쾌거(?)를 거두었습니다.
조회수가 나오는 이상 꾸준히 업로드 해보도록 하겠습니다.
감사합니다.

이 강의를 제공하는 \”뉴렉(newlec)\”쌤은 통신모듈, COM 콤포넌트 개발, 게임, 보안 모듈 개발을 시작으로 지금은 웹 개발을 주로 하고 있으며 (주)철도청, (주)하나은행, (주)삼표 등의 기업 강의를 거쳐서 지금은 http://www.newlecture.com 에서 온라인 강의를 진행하고 있습니다.

jsp 웹 페이지 만들기 주제에 대한 자세한 내용은 여기를 참조하세요.

JSP 게시판 웹 사이트 만들기 – Peter blog

JSP 게시판 웹 사이트 만들기. 웹사이트 만들어 보신 적 있으신가요? 훌륭한 예제를 통해, JSP 공부 겸, 간단한 웹사이트를 만들어 볼 수 있습니다.

+ 여기에 표시

Source: peterkimlab.github.io

Date Published: 7/22/2022

View: 342

Jsp/Servlet을 이용한 개인 홈페이지 만들기(로그인, 회원가입 …

});. }; var loadLogin = function(data){ // section 영역을 비우고 그 자리에 Login 페이지를 넣는다.

+ 여기에 보기

Source: hongpossible.tistory.com

Date Published: 5/6/2021

View: 2956

[JSP 게시판 만들기] 웹사이트 게시판 만들기 시작 – 안녕월드

게시판에서는 글쓰기, 수정, 삭제를 할 수 있게 만들어진 웹사이트를 제작부터 배포까지 하는 강의이다. 이런 강의를 유튜브에서 무료로 들을 수 있다는 …

+ 자세한 내용은 여기를 클릭하십시오

Source: annyeongworld.tistory.com

Date Published: 3/14/2022

View: 5216

[jsp 홈페이지 만들기] 1탄. jsp개발 환경 및 배포 구성도

[jsp 홈페이지 만들기] 5탄. 아파치 톰캣(apache tomcat)을 이용한 WAS 웹 서버 구축. (4) Hello World, Web application 만들기.

+ 여기에 자세히 보기

Source: doitnow-man.tistory.com

Date Published: 2/8/2021

View: 9872

모든 기능을 갖춘 웹 사이트(JSP) 만들기 – Experience League

폴더 트리에서 웹 사이트 폴더를 선택한 다음 새로 만들기 > 새 페이지​를 클릭합니다. 페이지 만들기 창에서 다음을 입력합니다. 제목: My Website; 이름: mywebsite; 내 …

+ 여기에 자세히 보기

Source: experienceleague.adobe.com

Date Published: 12/24/2022

View: 477

주제와 관련된 이미지 jsp 웹 페이지 만들기

주제와 관련된 더 많은 사진을 참조하십시오 서블릿/JSP 강의 51 – JSP를 이용해서 자바 웹 프로그램 만들기 시작. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

서블릿/JSP 강의 51 - JSP를 이용해서 자바 웹 프로그램 만들기 시작
서블릿/JSP 강의 51 – JSP를 이용해서 자바 웹 프로그램 만들기 시작

주제에 대한 기사 평가 jsp 웹 페이지 만들기

  • Author: 뉴렉처
  • Views: 조회수 17,940회
  • Likes: 좋아요 347개
  • Date Published: 최초 공개: 2019. 10. 29.
  • Video Url link: https://www.youtube.com/watch?v=JjP4kGxKiuI

JSP 게시판 웹 사이트 만들기

JSP 게시판 웹 사이트 만들기

웹사이트 만들어 보신 적 있으신가요?

훌륭한 예제를 통해, JSP 공부 겸, 간단한 웹사이트를 만들어 볼 수 있습니다. 저 역시 동빈나님의 유튜브를 보고, 개념을 잡을 수 있었습니다. 또한 매 강의에 대한, 코드를 반영해 놓았습니다. 영상을 보시면서, 아래 글을 참조하시면, 쉽게 따라 가실 수 있습니다. 저작권은 동빈나님에게 있으며, 훌륭한 강의 감사드립니다.

2강 – 로그인 페이지 디자인

로그인 페이지를 구현 합니다. input 타입으로, 아이디와 비밀번호 입력 받으며, 로그인 버튼을 만드는 화면을 구성해 보겠습니다.

[login.jsp]

<% @ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding = "UTF-8" %> < html > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width" , initial - scale "=" 1 "> JSP 게시판 웹 사이트

번호 제목 작성자 작성일
1 안녕하세요 홍길동 2017-05-04

글쓰기

< script src = "js/bootstrap.js" > use BBS;

BBS 테이블 생성

mysql> CREATE TABLE BBS ( -> bbsID INT, -> bbsTitle VARCHAR(50), -> userID VARCHAR(20), -> bbsDate DATETIME, -> bbsContent VARCHAR(2048), -> bbsAvailable INT, -> PRIMARY KEY (bbsID) -> );

10강 – 글쓰기 기능 구현하기

글 제목 및 내용을 입력 받고, 글쓰기 버튼 클릭하면, DB에 저장 되게 구현 합니다.

[writeAction.jsp]

<% @ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding = "UTF-8" %> <% @ page import =" bbs.BbsDAO " %> <%@ page import=" java . io . PrintWriter " %> <% request.setCharacterEncoding(" UTF - 8 "); %> JSP 게시판 웹 사이트 <% String userID = null; if (session.getAttribute(" userID ") != null) { userID = (String) session.getAttribute(" userID "); } if (userID == null) { PrintWriter script = response.getWriter(); script.println(" < script > “); script.println(” alert ( ‘ 로그인을 하세요 . ‘ ) “); script.println(” location . href = ‘ login . jsp ‘ “); script.println(” history . back () “); script.println(” “); } else { if (bbs.getBbsTitle() == null || bbs.getBbsContent() == null) { PrintWriter script = response.getWriter(); script.println(” < script > “); script.println(” alert ( ‘ 입력이 안된 사항이 있습니다 . ‘ ) “); script.println(” history . back () “); script.println(” “); } else { BbsDAO bbsDAO = new BbsDAO(); int result = bbsDAO.write(bbs.getBbsTitle(), userID, bbs.getBbsContent()); if (result == -1) { PrintWriter script = response.getWriter(); script.println(” < script > “); script.println(” alert ( ‘ 글쓰기에 실패 했습니다 . ‘ ) “); script.println(” history . back () “); script.println(” “); } else { PrintWriter script = response.getWriter(); script.println(” < script > “); script.println(” location . href = ‘ bbs . jsp ‘ “); script.println(” ” ); } } } %>

[BbsDAO.java]

public class BbsDAO { private Connection conn ; private ResultSet rs ; public BbsDAO () { try { String dbURL = “jdbc:mysql://localhost:3306/BBS?serverTimezone=UTC” ; String dbID = “root” ; String dbPassword = “hero0825” ; Class . forName ( “com.mysql.jdbc.Driver” ); conn = DriverManager . getConnection ( dbURL , dbID , dbPassword ); } catch ( Exception e ) { e . printStackTrace (); } } public String getDate () { String SQL = “SELECT NOW()” ; // 현재 시간 가져오기 try { PreparedStatement pstmt = conn . prepareStatement ( SQL ); rs = pstmt . executeQuery (); if ( rs . next ()) { return rs . getString ( 1 ); } } catch ( Exception e ) { e . printStackTrace (); } return “” ; } public int getNext () { // 다음 글 가지고 오기. String SQL = “SELECT bbsID FROM BBS ORDER BY bbsID DESC” ; try { PreparedStatement pstmt = conn . prepareStatement ( SQL ); rs = pstmt . executeQuery (); if ( rs . next ()) { return rs . getInt ( 1 ) + 1 ; } return 1 ; // 첫 번째 게시물인 경우 } catch ( Exception e ) { e . printStackTrace (); } return – 1 ; // 데이터베이스 오류 } public int write ( String bbsTitle , String userID , String bbsContent ) { String SQL = “INSERT INTO BBS VALUES (?, ?, ?, ?, ?, ?)” ; try { PreparedStatement pstmt = conn . prepareStatement ( SQL ); pstmt . setInt ( 1 , getNext ()); pstmt . setString ( 2 , bbsTitle ); pstmt . setString ( 3 , userID ); pstmt . setString ( 4 , getDate ()); pstmt . setString ( 5 , bbsContent ); pstmt . setInt ( 6 , 1 ); return pstmt . executeUpdate (); } catch ( Exception e ) { e . printStackTrace (); } return – 1 ; // 데이터베이스 오류 } }

글 제목과 글 내용을 입력한 후 글쓰기 버튼을 누르면, DB에 값이 저장 된 것을 확인 할 수 있습니다.

mysql> select * from BBS; +——-+———————+———+———————+————-+————–+ | bbsID | bbsTitle | userID | bbsDate | bbsContent | bbsAvailable | +——-+———————+———+———————+————-+————–+ | 1 | 테스트 글쓰기 | gildong | 2020-10-16 12:13:59 | 내용 무. | 1 | +——-+———————+———+———————+————-+————–+

11강 – 게시판 글 목록 기능 구현하기

게시판의 글 목록 입니다. 목록이 10개 이상이 되면, 다음 페이지로 이동 할 수 있는 버튼이 활성화 됩니다.

[bbs.jsp]

… < div class =" container ">

<% BbsDAO bbsDAO = new BbsDAO(); ArrayList list = bbsDAO.getList(pageNumber); for (int i = 0; i < list.size(); i++) { %>

<% } %>

번호 제목 작성자 작성일
<%= list.get(i).getBbsID() %>

<% if (pageNumber != 1) { %> ” class=” btn btn – success btn – arrow – left “>다음 <% } %> 글쓰기

getList()로 bbsId, bbsTitle, userID, bbsContent, bbsAvailable 정보를 DB로 부터 가지고와서, 게시판 목록에 보여 줍니다.

[BbsDAO.java]

public ArrayList < Bbs > getList ( int pageNumber ) { String SQL = “SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable = 1 ORDER BY bbsID DESC LIMIT 10" ; ArrayList < Bbs > list = new ArrayList < Bbs >(); try { PreparedStatement pstmt = conn . prepareStatement ( SQL ); pstmt . setInt ( 1 , getNext () – ( pageNumber – 1 ) * 10 ); rs = pstmt . executeQuery (); while ( rs . next ()) { Bbs bbs = new Bbs (); bbs . setBbsID ( rs . getInt ( 1 )); bbs . setBbsTitle ( rs . getString ( 2 )); bbs . setUserID ( rs . getString ( 3 )); bbs . setBbsDate ( rs . getString ( 4 )); bbs . setBbsContent ( rs . getString ( 5 )); bbs . setBbsAvailable ( rs . getInt ( 1 )); list . add ( bbs ); } } catch ( Exception e ) { e . printStackTrace (); } return list ; } public boolean nextPage ( int pageNumber ) { String SQL = “SELECT * FROM BBS WHERE bbsID < ? AND bbsAvailable = 1" ; try { PreparedStatement pstmt = conn . prepareStatement ( SQL ); pstmt . setInt ( 1 , getNext () - ( pageNumber - 1 ) * 10 ); rs = pstmt . executeQuery (); if ( rs . next ()) { return true ; } } catch ( Exception e ) { e . printStackTrace (); } return false ; } 12강 - 게시판 보기 기능 구현하기 게시판 등록 된 글에 대한 상세내역을 보기 기능을 구현 합니다. [bbs.jsp] <% @ page import =" java.io.PrintWriter " %> <%@ page import=" bbs . Bbs " %> <%@ page import=" bbs . BbsDAO " %> < link rel = "stylesheet" href = "css/bootstrap.css" > < title > JSP 게시판 웹 사이트 < body > <% String userID = null ; if ( session . getAttribute ( "userID" ) != null ) { userID = ( String ) session . getAttribute ( "userID" ); } int bbsID = 0 ; if ( request . getParameter ( "bbsID" ) != null ) { bbsID = Integer . parseInt ( request . getParameter ( "bbsID" )); } if ( bbsID == 0 ) { PrintWriter script = response . getWriter (); script . println ( "” ); } Bbs bbs = new BbsDAO (). getBbs ( bbsID ); %> < nav class =" navbar navbar - default ">

게시판 글보기
글제목 <%= bbs.getBbsTitle().replaceAll(" ", " & nbsp ; ").replaceAll(" < ", " & lt ; ").replaceAll(" > “,” & gt ; “).replaceAll(” \ n “, ” < br > “) %>
작성자 <%= bbs.getUserID() %>
작성일자 <%= bbs.getBbsDate().substring(0, 11) + bbs.getBbsDate().substring(11, 13) + " 시 " + bbs.getBbsDate().substring(14, 16) + " 분 " %>
내용 <%= bbs.getBbsContent().replaceAll(" ", " & nbsp ; ").replaceAll(" < ", " & lt ; ").replaceAll(" > “,” & gt ; “).replaceAll(” \ n “, ” < br > “) %>

목록 <% if (userID != null && userID.equals(bbs.getUserID())) { %> < script src = "js/bootstrap.js" >

작성 된 글(글제목, 작성자, 작성일자, 내용)을 보여 주기 위한, 레이아웃을 구성 합니다. 현재 유저가, 글쓴이와 같다면, 수정/삭제 버튼을 보여 줍니다.

[BbsDAO.java]

public Bbs getBbs ( int bbsID ) { String SQL = “SELECT * FROM BBS WHERE bbsID = ?” ; try { PreparedStatement pstmt = conn . prepareStatement ( SQL ); pstmt . setInt ( 1 , bbsID ); rs = pstmt . executeQuery (); if ( rs . next ()) { Bbs bbs = new Bbs (); bbs . setBbsID ( rs . getInt ( 1 )); bbs . setBbsTitle ( rs . getString ( 2 )); bbs . setUserID ( rs . getString ( 3 )); bbs . setBbsDate ( rs . getString ( 4 )); bbs . setBbsContent ( rs . getString ( 5 )); bbs . setBbsAvailable ( rs . getInt ( 1 )); return bbs ; } } catch ( Exception e ) { e . printStackTrace (); } return null ; }

13강 – 게시글 수정 및 삭제 기능 구현하기

게시되어 있는 글을 수정 및 삭제하는 기능을 구현합니다.

[update.jsp]

< div class =" container ">

게시판 글 수정 양식 <%= bbs.getBbsContent() %>

글수정 버튼 클릭 시, bbsID를 updateAction.jsp에 전달 합니다.

[updateAction.jsp]

Bbs bbs = new BbsDAO (). getBbs ( bbsID ); if (! userID . equals ( bbs . getUserID ())) { PrintWriter script = response . getWriter (); script . println ( “” ); } else { if ( request . getParameter ( “bbsTitle” ) == null || request . getParameter ( “bbsContent” ) == null || request . getParameter ( “bbsTitle” ) == “” || request . getParameter ( “bbsContent” ) == “” ){ PrintWriter script = response . getWriter (); script . println ( “” ); } else { BbsDAO bbsDAO = new BbsDAO (); int result = bbsDAO . update ( bbsID , request . getParameter ( “bbsTitle” ), request . getParameter ( “bbsContent” )); if ( result == – 1 ) { PrintWriter script = response . getWriter (); script . println ( “” ); } else { PrintWriter script = response . getWriter (); script . println ( “” ); } } }

bbsTitle, bbsContent를 update 메서드로 전달하여, DB에 업데이트 합니다.

[BbsDAO.java]

public int update ( int bbsID , String bbsTitle , String bbsContent ) { String SQL = “UPDATE BBS SET bbsTitle = ?, bbsContent = ? WHERE bbsID =?” ; try { PreparedStatement pstmt = conn . prepareStatement ( SQL ); pstmt . setString ( 1 , bbsTitle ); pstmt . setString ( 2 , bbsContent ); pstmt . setInt ( 3 , bbsID ); return pstmt . executeUpdate (); } catch ( Exception e ) { e . printStackTrace (); } return – 1 ; // 데이터베이스 오류 } public int delete ( int bbsID ) { String SQL = “UPDATE BBS SET bbsAvailable = 0 WHERE bbsID = ?” ; try { PreparedStatement pstmt = conn . prepareStatement ( SQL ); pstmt . setInt ( 1 , bbsID ); return pstmt . executeUpdate (); } catch ( Exception e ) { e . printStackTrace (); } return – 1 ; // 데이터베이스 오류 }

[view.jsp]

<% if ( userID != null && userID . equals ( bbs . getUserID ())) { %> < a href = "update.jsp?bbsID=<%= bbsID %>” class =” btn btn – primary “>수정

Jsp/Servlet을 이용한 개인 홈페이지 만들기(로그인, 회원가입,중복체크) — 1

반응형

안녕들 하시죠 !

이번시간 부터는 Jsp/Servlet 등의 기술을 이용하여 개인 홈페이지를 구축해보겠습니다.

이번 게시물에서는 전체적인 앞단을, 다음 게시물부터는 뒷단위주로 작성하며 기능들을 추가해 보겠습니다.

오로지 기능구현에만 초점을 맞춘 게시물입니다.

사용언어와 문법

Oracle database, HTML5, Javascript, JSP/Servlet, JQuery, EL, JSTL 등

MVC 패턴사용

Servlet -> Service -> DAO 순으로 비지니스 로직을 분리하는 디자인 패턴을 사용.

앞단 구성에 사용될 .jsp와 .jar 파일들

Jsp/Servlet을 이용한 개인 홈페이지 만들기 –1의 결과물

메인 화면

로그인 화면

회원가입 화면

Database 구성

향후 게시판이나 관리자 페이지 등을 진행할 예정이지만 여기에선 회원(Customers), 우편번호(Post)만 만들겠습니다.

http://www.epost.go.kr/search/zipcode/cmzcd002k01.jsp 에서 우편번호파일 다운로드

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 32 33 34 35 36 37 CREATE TABLE Customers( customer_id VARCHAR2( 50 ), — 사용자 id customer_pwd VARCHAR2( 50 ) NOT NULL , — 사용자 pwd customer_status NUMBER, — 사용자 상태검사 customer_addr VARCHAR2( 100 ), — 사용자 주소 + 상세주소 customer_name VARCHAR2( 30 ), — 사용자 이름 customer_buildingno VARCHAR2( 100 ), — 상세건물번호 constraint customers_pk PRIMARY KEY (customer_id) — 사용자 id p키로 설정 ); CREATE TABLE post( zipcode varchar2( 5 ), sido varchar2( 21 ), sidoe varchar2( 40 ), sigungu varchar2( 20 ), sigungue varchar2( 40 ), eupmyun varchar2( 20 ), eupmyune varchar2( 40 ), dorocode varchar2( 12 ), –도로명코드 doro varchar2( 80 ), –도로명 doroe varchar2( 80 ), jiha varchar2( 1 ), building1 varchar2( 5 ), –건물번호 본번 building2 varchar2( 5 ), –건물번호 부번 buildingno varchar2( 25 ), –건물관리번호 daryang varchar2( 40 ), building varchar2( 200 ), –시군구용건물명 dongcode varchar2( 10 ), dong varchar2( 20 ), –법정동명 ri varchar2( 20 ), dongadmin varchar2( 40 ), san varchar2( 1 ), zibun1 varchar2( 4 ), zibunserial varchar2( 2 ), zibun2 varchar2( 4 ), zipoldcode varchar2( 6 ), zipcodeserial varchar2( 3 )); Colored by Color Scripter cs

main.jsp

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <% @ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding = "UTF-8" %> < script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js" > < / script > <% @taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> < c:set var = "contextPath" value = "${pageContext.request.contextPath}" / > < style > a { text-decoration : none ; } < / style > < body > < header > < p style = "text-align: center; " > < a href = '${contextPath}/main/main.jsp' > < font color = "black" id = "HOME" > HONGPOSSIBLE HOMEPAGE < / font > < / a > < / p > < div style = "text-align: right;" > < jsp:include page = "menu.jsp" / > < / div > < hr > < br > < br > < / header > < section > < p style = "text-align: center;" > 안녕하세요 < / p > < / section > < / body > Colored by Color Scripter cs

menu.jsp

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 < %@ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding = "UTF-8" % > < %@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" % > < c:set var = "contextPath" value = "${pageContext.request.contextPath}" / > < script > var loadMenu = function (u, callback){ $.ajax({ url: u, method: ‘GET’ , success: function (data){ callback(data); } }); }; var loadLogin = function (data){ // section 영역을 비우고 그 자리에 Login 페이지를 넣는다. $( “section” ).empty(); $( “section” ).html(data); }; var loadJoin = function (data){ $( “section” ).empty(); $( “section” ).html(data); }; $( function (){ var $menuArr = $( “#coreTopMenu>span>a” ); // 메뉴(Login, Join) 페이지를 찾아 배열형태로 변수에 저장. $menuArr.click( function ( event ){ var url = $(this).attr( ‘href’ ); switch (url){ case ‘${contextPath}/main/login.jsp’ : loadMenu(url, loadLogin); break ; case ‘${contextPath}/main/join.jsp’ : loadMenu(url, loadJoin); break ; }; return false ; //이벤트전달 중지 }); }); < / script > < div > < ul id = "coreTopMenu" > < span > < a href = '${contextPath}/main/login.jsp' > < font color = "black" > 로그인 < / font > < / a > < / span > < span > < a href = '${contextPath}/main/join.jsp' > < font color = "black" > 회원가입 < / font > < / a > < / span > < / ul > < / div > Colored by Color Scripter cs

login.jsp

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 <% @ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding = "UTF-8" %> <% @taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> < c:set var = "contextPath" value = "${pageContext.request.contextPath}" / > < script > $( function (){ $( “#loginbtn” ).click( function (){ if ($( “#idid” ).val().trim() = = 0 ){ // id 입력란이 공백인 상태로 로그인 버튼이 // 눌리게 되면 .focus()를 이용해 입력유도. $( “#idid” ).focus(); } else if ($( “input[name=pwd]” ).val().trim() = = 0 ){ $( “input[name=pwd]” ).focus(); } else { $.ajax({ // 입력이슈가 발생하지 않는다면 ajax 요청 url: ‘${contextPath}/login’ , //EL문법을 이용하여 경로지정, // login Servlet으로 데이터 전송. method: ‘post’ , // post 방식으로 요청. data:$( ‘form’ ).serialize(), // form 태그안에 있는 입력된 값을 싹 긁어 전송. // 데이터 전달을 위해 name 속성을 꼭 작성해야한다.(다음게시물에서 설명) success: function (data){ var jsonObj = JSON.parse(data); var msg = jsonObj.id + “님 로그인 ” ; if (jsonObj.status = = 1 ){ // 로그인 여부를 판단해주는 Service에서 설정한 status //값이 1이면 로그인 성공. (다음게시물에서 설명) msg + = “성공” ; location .href = ‘${contextPath}/main/main.jsp’ ; alert (msg); } else { msg + = “실패” ; alert (msg); } } }); } return false ; }); }); < / script > < div style = "text-align: center;" > < form > < div > 아이디 < input type = "text" placeholder = "아이디를 입력하세요." name = "id" id = "idid" style = "height: 30px; margin-left: 30px;" / > < / div > < br > < div > 비밀번호 < input type = "password" placeholder = "비밀번호를 입력하세요." name = "pwd" style = "height: 30px; margin-left: 15px;" / > < / div > < br > < div > < button type = "submit" id = "loginbtn" > 로그인 < / button > < button > 회원가입 < / button > < / div > < / form > < / div > Colored by Color Scripter cs

join.jsp

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 <% @ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding = "UTF-8" %> <% @taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> < c:set var = "contextPath" value = "${pageContext.request.contextPath}" / > < script > $( function () { var $idObj = $( “input[name=id]” ); var $submitObj = $( “input[type=submit]” ); $submitObj.hide(); $submitObj.click( function () { // 비밀번호 + 비밀번호 확인 검사 if ( $( “input[name=pwd]” ).val() ! = $( “input[name=pwd1]” ).val()){ alert ( “비밀번호가 일치하지 않습니다” ); return false ; } $.ajax({ url : ‘${contextPath}/join’ , method : ‘POST’ , data : $( “#joinform” ).serialize(), success : function (data) { var jsonObj = JSON.parse(data); if (jsonObj.status = = 1 ) { alert ( “회원가입 완료” ); // 트리거이벤트 메인화면으로 var $main = $( “#HOME” ); $main.trigger( ‘click’ ); } else { alert ( “필수 항목을 입력해 주세요!” ); } } }); return false ; }); var $dupchkObj = $( “#dupchk” ); $dupchkObj.click( function (){ // 아이디 중복검사 $.ajax({ url: ‘${contextPath}/dupchk’ , method: ‘post’ , data: ‘id=’ + $( “input[name=id]” ).val(), success: function (data){ var jsonObj = JSON.parse(data); if (jsonObj.status = = 1 ){ alert ( “사용할 수 있는 아이디 입니다” ); $submitObj.show(); } else if (jsonObj.status = = – 1 ){ alert ( “중복된 아이디 입니다 !!” ); return false ; } } }); }); var $searchZipObj = $( “#searchZip” ); $searchZipObj.click( function () { // 우편번호 검색버튼 클릭 $( “#divSearchZip” ).show(); }); $( “#divSearchZip form” ).submit( function (){ // 우편번호 검색 세부창 $.ajax({ url : ‘${contextPath}/searchzip’ , method : ‘POST’ , data : ‘doro=’ + $( “#divSearchZip .search_pop input[type=text]” ).val(), success : function (data) { var jsonObj = JSON.parse(data); var trs = “

우편번호 주소

” ; for ( var i = 0 ; i < jsonObj. length ; i + + ) { trs + = " ” + jsonObj[i].zipcode + “

” + “

” + jsonObj[i].doroaddr + “

” + “

” + jsonObj[i].buildingaddr + “

” ; } $( “#divSearchZip>div>table” ).html(trs); } }); return false ; }); // 검색 후 원하는 주소 클릭했을떄 값을 가져오는 기능. $( “#divSearchZip>div>table” ).on( “click” , “tr:not(:first-child)” , function () { var children = $(this).children(); var zipcode = children.eq( 0 ).html(); var doroaddr = children.find( “div:first-child” ); $( “input[name=zipcode]” ).val(zipcode); $( “input[name=addr1]” ).val(doroaddr.html()); $( “#divSearchZip” ).hide(); $( “input[name=buildingno]” ).val($(this).attr( “id” )); console .log( “빌딩번호 : ” + $( “input[name=buildingno]” ).val()); }); $( “input[name=cancel]” ).click( function (){ // 취소버튼 클릭 var $main = $( “#HOME” ); $main.trigger( ‘click’ ); }); }); < / script > < style > #divSearchZip { display : none ; } #divSearchZip { padding : 8px ; width : 300px ; height : 300px ; position : absolute ; top : 150px ; left : 750px ; border : 1px solid transparent ; background-color : #F5EDED ; } #divSearchZip .search_pop input [ type = text ] { width : 80% ; height : 36px ; font-size : 14px ; line-height : 16px ; padding : 8px ; margin : 0px ; border : 2px solid #ee2e24 ; box-sizing : border-box ; float : left ; } #divSearchZip .search_pop button { width : 20% ; height : 36px ; background-color : #ee2e24 ; font-size : 14px ; color : #fff ; font-weight : bold ; text-align : center ; line-height : 32px ; display : block ; padding : 0px ; margin : 0px ; border : 0px ; border : 2px solid #ee2e24 ; box-sizing : border-box ; float : left ; } #divSearchZip table { width : 100% ; padding : 0px ; margin : 10px 0px 20px 0px ; border-bottom : 2px solid #888 ; color : #707070 ; } #divSearchZip tr :not (:first-child ):hover { cursor : pointer ; font-weight : bold ; } th , td { vertical-align : middle ; } #divSearchZip > div { clear : both ; overflow : auto ; height : 80% ; } < / style > < form id = "joinform" > < div > < div > < / div > < div class = "joinTitle" > < div > < h2 style = "margin-left: 230px;" > 회원 가입 < / h2 > < / div > < / div > < p class = "required" style = "text-align: right; margin-right: 160px;" > < font size = "1px;" > 필수입력사항 < / font > < img src = "../images/ico_required.gif" alt = "required Field" > < / p > < div class = "joinInputArea" > < table width = "940" style = "padding: 5px 0 5px 0;" align = "center" > < tbody > < tr height = "2" bgcolor = "#FFC8C3" > < td colspan = "2" > < / td > < / tr > < tr > < tr > < th scope = "row" > 아이디 < img src = "../images/ico_required.gif" alt = "required Field" > < / th > < td > < input type = "text" name = "id" maxlength = "16" required > < button type = "button" id = "dupchk" > 중복확인 < / button > < span style = "font-size: 10px; margin-left: 7px; font-weight: bold;" > < img src = "../images/ico_required.gif" alt = "required Field" > 중복확인을 성공해야 회원가입 버튼이 생성됩니다. < / span > < / td > < / tr > < tr > < th scope = "row" > 비밀번호 < img src = "../images/ico_required.gif" alt = "required Field" > < / th > < td > < input type = "password" name = "pwd" maxlength = "16" required > < span style = "font-size: 10px; margin-left: 7px; font-weight: bold; margin-left: 83px;" > < img src = "../images/ico_required.gif" alt = "required Field" > 중복확인 후에는 아이디를 수정할 수 없습니다. < / span > < / td > < / tr > < tr > < th scope = "row" > 비밀번호 확인 < img src = "../images/ico_required.gif" alt = "required Field" > < / th > < td > < input type = "password" name = "pwd1" maxlength = "16" required > < / td > < / tr > < tr > < th scope = "row" > 이름 < img src = "../images/ico_required.gif" alt = "required Field" > < / th > < td > < input type = "text" name = "name" maxlength = "16" required > < br > < / td > < / tr > < tr > < th scope = "row" > 주소 < img src = "../images/ico_required.gif" alt = "required Field" > < / th > < td > < input type = "text" name = "zipcode" readonly name = "zipcode" > < button type = "button" id = "searchZip" > 우편번호 검색 < / button > < / td > < / tr > < tr > < th > < / th > < td > < input type = "text" name = "addr1" readonly name = "addr1" style = "width: 270px;" > < / td > < / tr > < tr > < th > < / th > < td > < input type = "text" name = "addr2" style = "width: 270px;" placeholder = "나머지 주소" > < / td > < / tr > < tr height = "2" bgcolor = "#FFC8C3" > < td colspan = "2" > < / td > < / tr > < tr > < td colspan = "2" align = "center" > < br > < input type = "submit" value = "가입완료" > < input type = "button" name = "cancel" value = "취소" > < input type = "hidden" name = "buildingno" value = "" > < / td > < / tr > < / table > < / div > < / div > < / form > <% - - 우편번호 찾기 영역 - - %> < div id = "divSearchZip" > < form > < div class = "search_pop" > < input type = "text" placeholder = "도로명 + 건물번호" > < button > 검색 < / button > < / div > < / form > < div > < table > < / table > < / div > < / div > Colored by Color Scripter cs

아마 위의 코드만 붙여넣기한다면 Servlet, Service, dao 가 없어 에러가 날 것입니다.

당장 회원가입, 로그인 기능이 필요하신분들은 아래의 war 파일을 사용하시면 될 것 같습니다.

HomeEx.war 4.11MB

2019/09/01 – [꿀팁] – eclipse 프로젝트 war파일로 import, export 하기

다음 게시물에서 이어서 진행하겠습니다.

오늘은 여기까지입니다 감사합니다 !

[JSP 게시판 만들기] 웹사이트 게시판 만들기 시작

반응형

게시판 만들기는 동빈나 님의 유튜브 강좌를 보면서 배워보았다. (광고아님)

코딩을 아예 처음 배우는 사람이 따라하기에는 강의가 좀 빠른 감이 있어서, 최소한의 공부는 하고 들으면 좋을 것 같다. (생활코딩 추천)

물론 그냥 따라서 쳐보다 막히면 찾아보는 것도 큰 도움이 될 것이다.

또한 초보자들은 프로그램들을 다운받을 때 선생님이 다운받는 것과 같은 버전을 받는 것을 추천한다.

중간중간에 화면이 다르거나, 코드를 다르게 쳐야 하는 경우가 있기 때문에 고생할 수 있다.

메인페이지와 게시판 페이지를 구현하여, 회원가입과 로그인을 할 수 있고,

게시판에서는 글쓰기, 수정, 삭제를 할 수 있게 만들어진 웹사이트를 제작부터 배포까지 하는 강의이다.

이런 강의를 유튜브에서 무료로 들을 수 있다는 것이 참 좋은 세상이다. 감사합니다.

나는 지금 15강 강의 중 14강까지 들은 상태인데,

순조롭게 잘 가다가 13강에서 왜인지 수정과 삭제가 안되어서 강의를 세번을 들어도 이유를 못찾겠어서

이것저것 만지다가 갑자기 잘되던 글쓰기마저 오류가 나서 좌절하고 모든걸 놔버리고 침대로 기어갔다가,

다시 마음을 잡고 블로그에 처음부터 차근차근 정리하면서 복습할 겸 다시 만들면서 오류를 찾아내겠다는 결심을 하고 이 글을 쓰고있다.

덕분에 블로그도 시작하고 고마워 버그새끼야 내가 너 꼭 잡는다^^

그럼 한 번 시작해보까요?

반응형

[jsp 홈페이지 만들기] 1탄. jsp개발 환경 및 배포 구성도

728×90

반응형

[ jsp 홈페이지 만들기 ] 1탄. jsp개발 환경 및 배포 구성도

*전체 목차*

1) JDK 설치

– [jsp 홈페이지 만들기] 2탄. java JDK 설치

2) Eclipse JSP 개발 환경 구축

(1) Eclipse 설치

– [jsp 홈페이지 만들기] 3탄. 이클립스 설치(Eclipse)

(2) Eclipse 개발 환경 설정

– [jsp 홈페이지 만들기] 4탄. 이클립스 JSP 개발 환경 설정(Eclipse)

(3) Eclipse Tomcat 설치

– [jsp 홈페이지 만들기] 5탄. 아파치 톰캣(apache tomcat)을 이용한 WAS 웹 서버 구축

(4) Hello World, Web application 만들기

– [jsp 홈페이지 만들기] 6탄. Hello World, Web application 만들기

3) 개발 소스 관리 서버 구축(Github)

– [jsp 홈페이지 만들기] 7탄. 개발 소스 관리 서버 구축(Github)

4) Eclipse와 Git 연동

– [jsp 홈페이지 만들기] 8탄. 이클립스 github 연동 1편 (Clone)

– [jsp 홈페이지 만들기] 9탄. 이클립스 github 연동 2편 (프로젝트 Upload)

5) 서비스 서버 구축

6) WAR파일 배포

7) 실제 서비스 되는지 확인

1. 목표

– Hello World를 인터넷상에 서비스 해보자

– Hello World개발 , 배포 , 서비스 도전!!

2. 전체 구성도

– 일반 적으로 기업에서 개발 환경을 구축할 때는 위와 같은 형식으로 개발 환경이 구축될 가능성이 크다.

1) JSP의 개발은 주로 Elipse상에서 이루어 지면 Elipse는 Window Elipse가 주로 사용된다.

2) 개발 소스 관리는 Git이란 툴로 관리 된다.

Git으로 관리 할 경우 여러 사람과 동시에 개발이 가능하기때문이다.

3) 현재 구성에서 WAS(web application serve)는 Tomcat을 사용할 것입니다.

3. 개발 환경 정보

– 개발 언어 : jsp

– 개발 환경 : Window 10

– 개발 IDE : 윈도우 eclipse

– 코드 관리 : git (linux 서버)

– 서버스 운영 : linux 서버(CentOS or 라즈베리파이)

4. 준비물

1) JDK(Java SE Development Kit)

– JSP가 Java환경에서 동작하기 때문에 필수로 필요하다.

2) 윈도우 용 elipse

– JSP는 Eplise에서 개발하는게 가장 효과 적이다.

2) web서버를 구축할 Linux서버

– Linux 가 제일 저렴 하기에 선택 되었다.

5. 개발 환경 구축 진행 순서

1) JDK 설치

– [jsp 홈페이지 만들기] 2탄. java JDK 설치

2) Eclipse JSP 개발 환경 구축

(1) Eclipse 설치

– [jsp 홈페이지 만들기] 3탄. 이클립스 설치(Eclipse)

(2) Eclipse 개발 환경 설정

– [jsp 홈페이지 만들기] 4탄. 이클립스 JSP 개발 환경 설정(Eclipse)

(3) Eclipse Tomcat 설치

– [jsp 홈페이지 만들기] 5탄. 아파치 톰캣(apache tomcat)을 이용한 WAS 웹 서버 구축

(4) Hello World, Web application 만들기

– [jsp 홈페이지 만들기] 6탄. Hello World, Web application 만들기

3) 개발 소스 관리 서버 구축(Github)

– [jsp 홈페이지 만들기] 7탄. 개발 소스 관리 서버 구축(Github)

4) Eclipse와 Git 연동

– [jsp 홈페이지 만들기] 8탄. 이클립스 github 연동 1편 (Clone)

– [jsp 홈페이지 만들기] 9탄. 이클립스 github 연동 2편 (프로젝트 Upload)

5) 서비스 서버 구축

6) WAR파일 배포

7) 실제 서비스 되는지 확인

728×90

반응형

모든 기능을 갖춘 웹 사이트(JSP) 만들기

모든 기능을 갖춘 웹 사이트(JSP) 만들기

주의 이 문서에서는 JSP를 사용하고 클래식 UI를 기반으로 웹 사이트를 만드는 방법에 대해 설명합니다. Adobe은 AEM Sites 개발 시작문서에 자세히 설명된 대로 웹 사이트에 대한 최신 AEM 기술을 활용할 것을 권장합니다.

이 자습서에서는 AEM(Adobe Experience Manager)을 사용하여 모든 기능을 갖춘 웹 사이트를 만들 수 있습니다. 웹 사이트는 일반 웹 사이트를 기반으로 하며 주로 웹 개발자를 대상으로 합니다. 모든 개발 작업은 작성 환경 내에서 수행됩니다.

이 자습서에서는 다음 방법을 설명합니다.

AEM을 설치합니다. 액세스 CRXDE Lite(개발 환경)입니다. CRXDE Lite에서 프로젝트 구조를 설정합니다. 컨텐츠 페이지를 만드는 기준으로 사용되는 템플릿, 구성 요소 및 스크립트를 만듭니다. 웹 사이트의 루트 페이지를 만든 다음 컨텐츠 페이지를 만듭니다. 페이지에서 사용할 다음 구성 요소를 만듭니다. 위쪽 탐색

하위 목록

로고

이미지

텍스트 이미지

검색 다양한 기초 구성 요소를 포함합니다.

모든 단계를 수행하면 페이지가 다음과 같이 표시됩니다.

최종 결과 다운로드

연습을 수행하지 않고 자습서와 함께 따라 하려면 웹 사이트-1.0.zip을 다운로드하십시오. 이 파일은 이 자습서의 결과를 포함하는 AEM 컨텐츠 패키지입니다. 작성자 인스턴스에 패키지를 설치하려면 패키지 관리자를 사용하십시오.

노트 이 패키지를 설치하면 이 자습서를 사용하여 만든 작성 인스턴스에 있는 리소스를 덮어씁니다.

웹 사이트 컨텐츠 패키지

파일 가져오기

Adobe Experience Manager 설치

웹 사이트 개발을 위한 AEM 인스턴스를 설치하려면 작성자 및 게시 인스턴스🔗를 사용하여 배포 환경을 설정하는 지침을 따르거나 일반 설치를 수행하십시오. 일반 설치에는 AEM Quickstart JAR 파일을 다운로드하고 JAR 파일과 동일한 디렉토리에 license.properties 파일을 지정한 다음 JAR 파일을 두 번 클릭해야 합니다.

AEM을 설치한 후 시작 페이지에서 CRXDE Lite 링크를 클릭하여 CRXDE Lite 개발 환경에 액세스합니다.

노트 기본 포트를 사용하여 로컬에 설치된 AEM 작성 인스턴스의 CRXDE Lite URL은 http://localhost:4502/crx/de/입니다.

CRXDE Lite에서 프로젝트 구조 설정

CRXDE Lite을 사용하여 저장소에서 웹 사이트 응용 프로그램 구조를 만듭니다.

CRXDE Lite 왼쪽에 있는 트리에서 /apps 폴더를 마우스 오른쪽 단추로 클릭하고 만들기 > 폴더 만들기​를 클릭합니다. 폴더 만들기 대화 상자에서 폴더 이름으로 mywebsite 를 입력하고 확인​을 클릭합니다. /apps/mywebsite 폴더를 마우스 오른쪽 단추로 클릭하고 만들기 > 폴더 만들기​를 클릭합니다. 폴더 만들기 대화 상자에서 폴더 이름으로 components 를 입력하고 확인​을 클릭합니다. /apps/mywebsite 폴더를 마우스 오른쪽 단추로 클릭하고 만들기 > 폴더 만들기​를 클릭합니다. 폴더 만들기 대화 상자에서 폴더 이름으로 templates 를 입력하고 확인​을 클릭합니다. 이제 트리의 구조가 다음과 같이 표시됩니다. 모두 저장​을 클릭합니다.

디자인 설정

이 섹션에서는 디자이너 도구를 사용하여 응용 프로그램의 디자인을 만듭니다. 이 디자인은 웹 사이트에 대한 CSS 및 이미지 리소스를 제공합니다.

노트 다음 링크를 클릭하여 mywebsite.zip 을 다운로드합니다. 아카이브에 디자인을 위한 static.css 및 이미지 파일이 포함되어 있습니다.

샘플 정적.css 파일 및 이미지

파일 가져오기

AEM 시작 페이지에서 도구​를 클릭합니다. (http://localhost:4502/libs/cq/core/content/welcome.html) 폴더 트리에서 디자인 폴더를 선택한 다음 새로 만들기 > 새 페이지​를 클릭합니다. 제목으로 mywebsite 을 입력하고 만들기​를 클릭합니다. mywebsite 항목이 테이블에 나타나지 않으면 트리 또는 테이블을 새로 고칩니다. http://localhost:4502 의 URL에 대한 WebDAVaccess를 사용하여 다운로드한 mywebsite.zip 파일의 샘플 static.css 파일 및 images 폴더를 /etc/designs/mywebsite 폴더에 복사합니다.

컨텐츠 페이지 템플릿, 구성 요소 및 스크립트 만들기

이 섹션에서 다음을 생성합니다.

예제 웹 사이트에서 컨텐츠 페이지를 만드는 데 사용할 컨텐츠 페이지 템플릿

컨텐츠의 페이지를 렌더링하는 데 사용할 컨텐츠 페이지 구성 요소입니다

콘텐츠 페이지 스크립트

컨텐츠 페이지 템플릿 만들기

사이트의 웹 페이지를 기반으로 사용할 템플릿을 만듭니다.

템플릿은 새 페이지의 기본 컨텐츠를 정의합니다. 복잡한 웹 사이트에서는 사이트에서 다른 유형의 페이지를 만드는 데 여러 템플릿을 사용할 수 있습니다. 이 연습에서는 모든 페이지가 하나의 간단한 템플릿을 기반으로 합니다.

CRXDE Lite의 폴더 트리에서 /apps/mywebsite/templates 을 마우스 오른쪽 단추로 클릭하고 만들기 > 템플릿 만들기​를 클릭하십시오. 템플릿 만들기 대화 상자에서 다음 값을 입력한 다음 다음​을 클릭합니다. 레이블 :contentpage

:contentpage 제목 :내 웹 사이트 컨텐츠 페이지 템플릿

:내 웹 사이트 컨텐츠 페이지 템플릿 설명 :내 웹 사이트 컨텐츠 페이지 템플릿입니다.

:내 웹 사이트 컨텐츠 페이지 템플릿입니다. 리소스 유형:웹 사이트/구성 요소/콘텐츠 페이지 Ranking 속성에 기본값을 사용합니다. 리소스 유형은 페이지를 렌더링하는 구성 요소를 식별합니다. 이 경우 컨텐트 페이지 템플릿을 사용하여 만든 모든 페이지는 mywebsite/components/contentpage 구성 요소에 의해 렌더링됩니다. 이 템플릿을 사용할 수 있는 페이지의 경로를 지정하려면 더하기 단추를 클릭하고 표시되는 텍스트 상자에 /content(/.*)? 을 입력합니다. 그런 다음 다음​을 클릭합니다. 허용되는 경로 속성 값은 정규 표현식입니다. 표현식과 일치하는 경로가 있는 페이지에서는 템플릿을 사용할 수 있습니다. 이 경우 정규 표현식은 /content 폴더의 경로와 모든 하위 페이지와 일치합니다. 작성자가 /content 아래에 페이지를 만들면 contentpage 템플릿이 사용할 수 있는 템플릿 목록에 표시됩니다. 허용되는 부모 및 허용되는 하위 패널에서 다음​을 클릭하고 확인​을 클릭합니다. CRXDE Lite에서 모두 저장​을 클릭합니다.

컨텐츠 페이지 구성 요소 만들기

컨텐츠를 정의하고 컨텐트 페이지 템플릿을 사용하는 페이지를 렌더링하는 구성 요소​를 만듭니다. 구성 요소의 위치는 contentpage 템플릿의 리소스 유형 속성 값과 일치해야 합니다.

CRXDE Lite에서 /apps/mywebsite/components 을 마우스 오른쪽 단추로 클릭하고 만들기 > 구성 요소 를 클릭합니다. 구성 요소 만들기 대화 상자에서 다음 속성 값을 입력합니다. 레이블 :contentpage

:contentpage 제목 :내 웹 사이트 컨텐츠 페이지 구성 요소

:내 웹 사이트 컨텐츠 페이지 구성 요소 설명:내 웹 사이트 컨텐츠 페이지 구성 요소입니다 새 구성 요소의 위치는 /apps/mywebsite/components/contentpage 입니다. 이 경로는 컨텐츠 페이지 템플릿의 리소스 유형(경로의 초기 /apps/ 부분을 뺀)에 해당합니다. 이 서신은 템플릿을 구성 요소에 연결하며 웹 사이트의 올바른 기능에 중요합니다. 대화 상자의 허용되는 하위 패널이 나타날 때까지 다음​을 클릭한 다음 확인​을 클릭합니다. CRXDE Lite에서 모두 저장​을 클릭합니다. 이제 구조가 다음과 같이 표시됩니다.

컨텐츠 페이지 구성 요소 스크립트 개발

contentpage.jsp 스크립트에 코드를 추가하여 페이지 컨텐츠를 정의합니다.

CRXDE Lite에서 /apps/mywebsite/components/contentpage 에서 contentpage.jsp 파일을 엽니다. 파일에는 기본적으로 다음 코드가 포함되어 있습니다. <%-- My Website Content Page Component component. This is My Website Content Page Component. --%><% %><%@include file="/libs/foundation/global.jsp"%><% %><%@page session="false" %><% %><% /* TODO add you code here */ %> 다음 코드를 복사하여 기본 코드 뒤에 contentpage.jsp에 붙여넣습니다. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> My title

My body

모두 저장​을 클릭하여 변경 내용을 저장합니다.

웹 사이트 페이지 및 컨텐츠 페이지 만들기

이 섹션에서는 모두 컨텐트 페이지 템플릿을 사용하는 다음 페이지를 만듭니다.내 웹 사이트, 영어, 제품, 서비스 및 고객.

AEM 시작 페이지(http://localhost:4502/libs/cq/core/content/welcome.html)에서 웹 사이트를 클릭합니다. 폴더 트리에서 웹 사이트 폴더를 선택한 다음 새로 만들기 > 새 페이지​를 클릭합니다. 페이지 만들기 창에서 다음을 입력합니다. 제목 : My Website

: 이름 : mywebsite

: 내 웹 사이트 컨텐츠 페이지 템플릿 선택 만들기​를 클릭합니다. 폴더 트리에서 /Websites/My Website 페이지를 선택하고 새로 만들기 > 새 페이지​를 클릭합니다. 페이지 만들기 대화 상자에서 다음 속성 값을 입력한 다음 만들기를 클릭합니다. 제목 :영어

:영어 이름 :en

:en 내 웹 사이트 컨텐츠 페이지 템플릿 선택 폴더 트리에서 /Websites/My Website/English 페이지를 선택하고 새로 만들기 > 새 페이지​를 클릭합니다. 페이지 만들기 대화 상자에서 다음 속성 값을 입력한 다음 만들기​를 클릭합니다. 제목 :제품

:제품 내 웹 사이트 컨텐츠 페이지 템플릿 선택 폴더 트리에서 /Websites/My Website/English 페이지를 선택하고 새로 만들기 > 새 페이지​를 클릭합니다. 페이지 만들기 대화 상자에서 다음 속성 값을 입력한 다음 만들기​를 클릭합니다. 제목 :서비스

:서비스 내 웹 사이트 컨텐츠 페이지 템플릿 선택 폴더 트리에서 /Websites/My Website/English 페이지를 선택하고 새로 만들기 > 새 페이지​를 클릭합니다. 페이지 만들기 대화 상자에서 다음 속성 값을 입력한 다음 만들기​를 클릭합니다. 제목 :고객

:고객 내 웹 사이트 컨텐츠 페이지 템플릿 선택 구조가 다음과 같습니다. 페이지를 웹 사이트 디자인에 연결하려면 CRXDE Lite에서 /content/mywebsite/en/jcr:content 노드를 선택합니다. 속성 탭에서 새 속성에 대해 다음 값을 입력한 다음 추가를 클릭합니다. 이름 :cq:designPath

:cq:designPath 유형 :문자열

:문자열 값:/etc/designs/mywebsite 새 웹 브라우저 탭 또는 창에서 http://localhost:4502/content/mywebsite/en/products.html을 열어 제품 페이지를 확인합니다.

컨텐츠 페이지 스크립트 개선

이 섹션에서는 AEM 기초 구성 요소 스크립트를 사용하여 컨텐츠 페이지 스크립트를 강화하고 스크립트를 작성하는 방법을 설명합니다.

제품 페이지는 다음과 같이 표시됩니다.

기초 페이지 스크립트 사용

이 연습에서는 상위 유형이 AEM 페이지 구성 요소되도록 Pagecontent 구성 요소를 구성합니다. 구성 요소는 상위 유형의 기능을 상속하므로 페이지 컨텐츠는 페이지 구성 요소의 스크립트와 속성을 상속합니다.

예를 들어, 구성 요소 JSP 코드에서는 수퍼 유형 구성 요소가 제공하는 스크립트를 구성 요소에 포함된 것처럼 참조할 수 있습니다.

CRXDE Lite에서 /apps/mywebsite/components/contentpage 노드에 속성을 추가합니다. /apps/mywebsite/components/contentpage 노드를 선택합니다. 속성 탭 하단에서 다음 속성 값을 입력한 다음 추가를 클릭합니다. 이름 :sling:resourceSuperType

:sling:resourceSuperType 유형 :문자열

:문자열 값:foundation/components/page 모두 저장​을 클릭합니다. /apps/mywebsite/components/contentpage 아래의 contentpage.jsp 파일을 열고 기존 코드를 다음 코드로 바꿉니다. <%@include file="/libs/foundation/global.jsp"%><% %><%@page session="false" contentType="text/html; charset=utf-8" %><% %> 변경 사항을 저장합니다. 브라우저에서 Products 페이지를 다시 로드합니다. 다음과 같습니다. 페이지 소스를 열어 head.jsp 및 body.jsp 스크립트가 생성한 javascript 및 HTML 요소를 확인합니다. 페이지를 열 때 다음 스크립트 코드 조각은 사이드 킥을 엽니다. CQ.WCM.launchSidekick(“/content/mywebsite/en/products”, {propsDialog: “/libs/foundation/components/page/dialog”, locked: false locked: false });

자신만의 스크립트 사용

이 섹션에서는 각각 페이지 본문의 일부를 생성하는 여러 스크립트를 만듭니다. 그런 다음 pagecontent 구성 요소에서 body.jsp 파일을 만들어 AEM Page 구성 요소의 body.jsp를 재정의합니다. body.jsp 파일에는 페이지 본문의 다른 부분을 생성하는 스크립트가 포함됩니다.

팁: 구성 요소에 구성 요소의 수퍼 유형에서 파일과 이름과 상대 위치가 같은 파일이 포함되어 있으면 오버레이​라고 합니다.

CRXDE Lite에서 /apps/mywebsite/components/contentpage 아래에 left.jsp 파일을 만듭니다. 노드 /apps/mywebsite/components/contentpage 를 마우스 오른쪽 단추로 클릭한 다음 만들기​를 선택하고 파일 만들기​를 선택합니다. 창에서 left.jsp 을 ​ 이름​으로 입력하고 확인​을 클릭합니다. 기존 컨텐츠를 제거하고 다음 코드로 대체하려면 left.jsp 파일을 편집합니다. <%@include file="/libs/foundation/global.jsp"%><% %>

logo
newslist
search

변경 사항을 저장합니다. CRXDE Lite에서 /apps/mywebsite/components/contentpage 아래에 center.jsp 파일을 만듭니다. 노드 /apps/mywebsite/components/contentpage 를 마우스 오른쪽 단추로 클릭하고 만들기​를 선택한 다음 파일 만들기​를 선택합니다. 대화 상자에서 center.jsp 을 이름​으로 입력하고 확인​을 클릭합니다. 기존 컨텐츠를 제거하고 다음 코드로 대체하려면 center.jsp 파일을 편집합니다. <%@include file="/libs/foundation/global.jsp"%><% %>

trail
title
parsys

변경 사항을 저장합니다. CRXDE Lite에서 /apps/mywebsite/components/contentpage 아래에 right.jsp 파일을 만듭니다. 노드 /apps/mywebsite/components/contentpage 를 마우스 오른쪽 단추로 클릭하고 만들기​를 선택한 다음 파일 만들기​를 선택합니다. 대화 상자에서 right.jsp 을 이름​으로 입력하고 확인​을 클릭합니다. 기존 컨텐츠를 제거하고 다음 코드로 대체하려면 right.jsp 파일을 편집합니다. <%@include file="/libs/foundation/global.jsp"%><% %>

iparsys

변경 사항을 저장합니다. CRXDE Lite에서 /apps/mywebsite/components/contentpage 아래에 body.jsp 파일을 만듭니다. 기존 컨텐츠를 제거하고 다음 코드로 대체하려면 body.jsp 파일을 편집합니다. <%@include file="/libs/foundation/global.jsp"%><% %>

topnav

변경 사항을 저장합니다. 브라우저에서 Products 페이지를 다시 로드합니다. 다음과 같습니다.

위쪽 탐색 구성 요소 만들기

이 섹션에서는 탐색을 쉽게 하기 위해 웹 사이트의 모든 상위 수준 페이지에 대한 링크를 표시하는 구성 요소를 만듭니다. 이 구성 요소 컨텐츠는 컨텐트 페이지 템플릿을 사용하여 만든 모든 페이지의 맨 위에 나타납니다.

위쪽 탐색 구성 요소의 첫 번째 버전(위쪽 탐색)에서는 탐색 항목이 텍스트 링크만 됩니다. 두 번째 버전에서는 이미지 탐색 링크를 사용하여 위쪽 탐색을 구현합니다.

위쪽 탐색은 다음과 같습니다.

위쪽 탐색 구성 요소 만들기

CRXDE Lite에서 /apps/mywebsite/components 을 마우스 오른쪽 단추로 클릭하고 만들기​를 선택한 다음 구성 요소 만들기​를 선택합니다. 구성 요소 만들기 창에서 다음을 입력합니다. 레이블 : topnav

: 제목 : My Top Navigation Component

: 설명: This is My Top Navigation Component 다음​을 클릭하여 확인​을 클릭하는 마지막 창으로 이동할 때까지 클릭합니다. 변경 사항을 저장합니다.

위쪽 탐색에 렌더링 스크립트를 추가하여 하위 페이지에 대한 텍스트 링크를 생성합니다.

CRXDE Lite에서 /apps/mywebsite/components/topnav 아래의 topnav.jsp 파일을 엽니다. 다음 코드를 복사하여 붙여 넣어 해당 코드를 바꿉니다. <%@include file="/libs/foundation/global.jsp"%><% %><%@ page import="java.util.Iterator, com.day.text.Text, com.day.cq.wcm.api.PageFilter, com.day.cq.wcm.api.Page" %><% /* get starting point of navigation */ Page navRootPage = currentPage.getAbsoluteParent(2); if (navRootPage == null && currentPage != null) { navRootPage = currentPage; } if (navRootPage != null) { Iterator children = navRootPage.listChildren(new PageFilter(request)); while (children.hasNext()) { Page child = children.next(); %>topnav

with: 변경 사항을 저장합니다. 브라우저에서 Products 페이지를 다시 로드합니다. 위쪽 탐색은 다음과 같이 나타납니다.

자막 을 사용하여 페이지 개선

Page 구성 요소는 페이지에 자막을 제공할 수 있는 속성을 정의합니다. 페이지 컨텐츠에 대한 정보를 제공하는 자막을 추가합니다.

브라우저에서 제품 페이지를 엽니다. 사이드 킥의 페이지 탭에서 페이지 속성​을 클릭합니다. 대화 상자의 기본 탭에서 더 많은 제목 및 설명​을 확장하고 부제목 속성에 대해 what we do 을 입력합니다. 확인​을 클릭합니다. 이전 단계를 반복하여 서비스​에 대한 부제목​을 서비스 페이지에 추가합니다. 이전 단계를 반복하여 Customers 페이지에 도달하는 신뢰 를 추가합니다. 팁: CRXDE Lite에서 /content/mywebsite/en/products/jcr:content 노드를 선택하여 자막 속성이 추가되었는지 확인합니다.

탐색 컨트롤에 하이퍼텍스트 대신 이미지 링크를 사용하도록 topnav 구성 요소의 렌더링 스크립트를 개선합니다. 이미지에는 링크 대상의 제목과 부제가 포함됩니다.

이 연습에서는 Sling 요청 처리를 보여 줍니다. topnav.jsp 스크립트는 페이지 탐색 링크에 사용할 이미지를 동적으로 생성하는 스크립트를 호출하도록 수정되었습니다. 이 연습에서 Sling은 이미지 소스 파일의 URL을 구문 분석하여 이미지를 렌더링하는 데 사용할 스크립트를 결정합니다.

예를 들어 제품 페이지에 대한 이미지 링크의 소스는 http://localhost:4502/content/mywebsite/en/products.navimage.png일 수 있습니다. Sling은 이 URL을 구문 분석하여 리소스 유형과 리소스를 렌더링하는 데 사용할 스크립트를 결정합니다.

Sling은 리소스의 경로를 /content/mwebysite/en/products.png. 으로 결정합니다 Sling은 /content/mywebsite/en/products 노드를 사용하여 이 경로와 일치합니다. Sling은 이 노드의 sling:resourceType 을 mywebsite/components/contentpage 으로 결정합니다. Sling은 URL 선택기( navimage ) 및 파일 이름 확장자( png )와 가장 일치하는 스크립트를 이 구성 요소에서 찾습니다.

이 연습에서 Sling은 이러한 URL을 사용자가 작성하는 /apps/mywebsite/components/contentpage/navimage.png.java 스크립트에 연결합니다.

CRXDE Lite에서 /apps/mywebsite/components/topnav. 앵커 요소의 컨텐츠 찾기(14줄)에서 topnav.jsp 를 엽니다. <%=child.getTitle() %> 앵커 컨텐츠를 다음 코드로 바꿉니다. <%= child.getTitle() %>” src=”<%= child.getPath() %>.navimage.png”> 변경 사항을 저장합니다. /apps/mywebsite/components/contentpage 노드를 마우스 오른쪽 단추로 클릭하고 만들기 > 파일 만들기​를 클릭합니다. 파일 만들기 창의 이름​에 navimage.png.java 를 입력합니다. .java 파일 이름 확장자는 Apache Sling Scripting Java 지원을 사용하여 스크립트를 컴파일하고 서블릿을 만들어야 함을 Sling에 나타냅니다. 다음 코드를 navimage.png.java. 에 복사합니다. 이 코드는 AbstractImageServlet 클래스를 확장합니다. 🔗 AbstractImageServlet은 현재 리소스의 속성을 저장하는 ImageContext 개체를 만듭니다.</p>
<p>리소스의 상위 페이지는 ImageContext 개체에서 추출됩니다. 그러면 페이지 제목과 부제목을 얻습니다.</p>
<p>🔗 ImageHelperis는 사이트 디자인의 navimage_bg.jpg 파일, 페이지 제목 및 페이지 자막에서 이미지를 생성하는 데 사용됩니다. package apps.mywebsite.components.contentpage; import java.awt.Color; import java.awt.Paint; import java.awt.geom.Rectangle2D; import java.io.IOException; import javax.jcr.RepositoryException; import com.day.cq.wcm.api.Page; import com.day.cq.wcm.api.PageManager; import com.day.cq.wcm.api.components.Component; import com.day.cq.wcm.api.designer.Designer; import com.day.cq.commons.SlingRepositoryException; import com.day.cq.wcm.commons.WCMUtils; import com.day.cq.wcm.commons.AbstractImageServlet; import com.day.cq.commons.ImageHelper; import com.day.image.Font; import com.day.image.Layer; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.servlets.SlingSafeMethodsServlet; /** * Renders the navigation image */ public class navimage_png extends AbstractImageServlet { protected Layer createLayer(ImageContext ctx) throws RepositoryException, IOException { PageManager pageManager = ctx.resolver.adaptTo(PageManager.class); Page currentPage = pageManager.getContainingPage(ctx.resource); /* constants for image appearance */ int scale = 6; int paddingX = 24; int paddingY = 24; Color bgColor = new Color(0x004a565c, true); /* obtain the page title */ String title = currentPage.getTitle(); if (title == null) { title = currentPage.getName(); } /* format the title text */ title = title.toUpperCase(); Paint titleColor = Color.WHITE; Font titleFont = new Font(“Myriad Pro”, 10 * scale, Font.BOLD); int titleBase = 10 * scale; /* obtain and format the page subtitle */ String subtitle = currentPage.getProperties().get(“subtitle”, “”); Paint subtitleColor = new Color(0xffa9afb1, true); Font subTitleFont = new Font(“Tahoma”, 7); int subTitleBase = 20; /* create a layer that contains the background image from the mywebsite design */ Designer dg = ctx.resolver.adaptTo(Designer.class); String imgPath = new String(dg.getDesignPath(currentPage)+”/images/navimage_bg.jpg”); Layer bg = ImageHelper.createLayer(ctx.resolver.resolve(imgPath)); /* draw the title text (4 times bigger) */ Rectangle2D titleExtent = titleFont.getTextExtent(0, 0, 0, 0, title, Font.ALIGN_LEFT, 0, 0); Rectangle2D subtitleExtent = subTitleFont.getTextExtent(0, 0, 0, 0, subtitle, Font.ALIGN_LEFT, 0, 0); /* ensure subtitleExtent is wide enough */ if ( subtitle.length() > 0 ) { int titleWidth = (int)titleExtent.getWidth() / scale; if ( subtitleExtent.getWidth() > titleWidth && subtitleExtent.getWidth() + 2 * paddingX > bg.getWidth() ) { int charWidth = (int)subtitleExtent.getWidth() / subtitle.length(); int maxWidth = (bg.getWidth() > titleWidth + 2 * paddingX ? bg.getWidth() – 2 * paddingX : titleWidth); int len = (maxWidth – ( 2 * charWidth) ) / charWidth; subtitle = subtitle.substring(0, len) + “…”; subtitleExtent = subTitleFont.getTextExtent(0, 0, 0, 0, subtitle, Font.ALIGN_LEFT, 0, 0); } } int width = Math.max((int) titleExtent.getWidth(), (int) subtitleExtent.getWidth()); /* create the text layer */ Layer text = new Layer(width, (int) titleExtent.getHeight() + 40, new Color(0x01ffffff, true)); text.setPaint(titleColor); text.drawText(0, titleBase, 0, 0, title, titleFont, Font.ALIGN_LEFT | Font.ALIGN_BASE, 0, 0); text.resize(text.getWidth() / scale, text.getHeight() / scale); text.setX(0); text.setY(0); if (subtitle.length() > 0) { /* draw the subtitle normal sized */ text.setPaint(subtitleColor); text.drawText(0, subTitleBase, 0, 0, subtitle, subTitleFont, Font.ALIGN_LEFT | Font.ALIGN_BASE, 0, 0); } /* merge the image and text layers */ text.setY(paddingY); text.setX(paddingX); text.setBackgroundColor(bgColor); int bgWidth = bg.getWidth(); if ( text.getWidth() + 2 * paddingX > bgWidth ) { bgWidth = text.getWidth() + 2 * paddingX; bg.resize(bgWidth, bg.getHeight()); } bg.merge(text); return bg; } } 변경 사항을 저장합니다. 브라우저에서 Products 페이지를 다시 로드합니다. 이제 위쪽 탐색이 다음과 같이 나타납니다.</p>
<p>목록 하위 구성 요소 만들기</p>
<p>제목, 설명 및 페이지 날짜(예: 제품 페이지)를 포함하는 페이지 링크 목록을 생성하는 목록 하위 구성 요소를 만듭니다. 링크는 현재 페이지의 하위 페이지나 구성 요소 대화 상자에 지정된 루트 페이지의 하위 페이지를 타겟팅합니다.</p>
<p>제품 페이지 만들기</p>
<p>Products 페이지 아래에 있는 두 페이지를 만듭니다. 두 가지 특정 제품을 설명하는 각 페이지에 대해 제목, 설명 및 날짜를 설정합니다.</p>
<p>웹 사이트 페이지의 폴더 트리에서 웹 사이트/내 웹 사이트/영어/제품 항목을 선택하고 새로 만들기 > 새 페이지​를 클릭합니다. 대화 상자에서 다음 속성 값을 입력한 다음 만들기​를 클릭합니다. 제목 :제품 1.</p>
<p>:제품 1. 이름 :product1.</p>
<p>:product1. 내 웹 사이트 컨텐츠 페이지 템플릿 선택 다음 속성 값을 사용하여 제품 아래에 다른 페이지를 만듭니다. 제목 :제품 2</p>
<p>:제품 2 이름 :product2</p>
<p>:product2 내 웹 사이트 컨텐츠 페이지 템플릿 선택 CRXDE Lite에서 제품 1 페이지의 설명 및 날짜를 설정합니다. /content/mywebsite/en/products/product1/jcr:content 노드를 선택합니다. 속성 탭에서 다음 값을 입력합니다. 이름 : jcr:description</p>
<p>: 유형 : String</p>
<p>: 값: This is a description of the Product 1!. 추가​를 클릭합니다. 속성 탭에서 다음 값을 사용하여 다른 속성을 만듭니다. 이름 :날짜</p>
<p>:날짜 유형 :문자열</p>
<p>:문자열 값 :02/14/2008</p>
<p>:02/14/2008 추가​를 클릭합니다. 모두 저장​을 클릭합니다. CRXDE Lite에서 제품 2 페이지의 설명 및 날짜를 설정합니다. /content/mywebsite/en/products/product2/jcr:content 노드를 선택합니다. 속성 탭에서 다음 값을 입력합니다. 이름 :jcr:description</p>
<p>:jcr:description 유형 :문자열</p>
<p>:문자열 값:제품 2! 추가​를 클릭합니다. 동일한 텍스트 상자에서 이전 값을 다음 값으로 바꿉니다. 이름 :날짜</p>
<p>:날짜 유형 :문자열</p>
<p>:문자열 값 :05/11/2012</p>
<p>:05/11/2012 추가​를 클릭합니다. 모두 저장​을 클릭합니다.</p>
<p>목록 하위 구성 요소 만들기</p>
<p>listchildren 구성 요소를 만들려면</p>
<p>CRXDE Lite에서 /apps/mywebsite/components 을 마우스 오른쪽 단추로 클릭하고 만들기​를 선택한 다음 구성 요소 만들기​를 선택합니다. 대화 상자에서 다음 속성 값을 입력한 다음 다음​을 클릭합니다. 레이블 :목록을 작성하십시오.</p>
<p>:목록을 작성하십시오. 제목 :내 Listchildren 구성 요소입니다.</p>
<p>:내 Listchildren 구성 요소입니다. 설명:My Listchildren 구성 요소입니다. 허용되는 하위 패널이 나타날 때까지 다음​을 계속 클릭하고 확인​을 클릭합니다.</p>
<p>목록 하위 스크립트 만들기</p>
<p>listchildren 구성 요소에 대한 스크립트를 개발합니다.</p>
<p>CRXDE Lite에서 /apps/mywebsite/components/listchildren 아래의 listchildren.jsp 파일을 엽니다. 기본 코드를 다음 코드로 바꿉니다. <%@include file=<% %><%@ page import="java.util.Iterator, com.day.cq.wcm.api.PageFilter"%><% /* Create a new Page object using the path of the current page */ String listroot = properties.get("listroot", currentPage.getPath()); Page rootPage = pageManager.getPage(listroot); /* iterate through the child pages and gather properties */ if (rootPage != null) { Iterator children = rootPage.listChildren(new PageFilter(request)); while (children.hasNext()) { Page child = children.next(); String title = child.getTitle() == null ? child.getName() : child.getTitle(); String date = child.getProperties().get(“date”,””); %>

<% } } %> 변경 사항을 저장합니다.

하위 목록 대화 상자 만들기

listchildren 구성 요소 속성을 구성하는 데 사용되는 대화 상자를 만듭니다.

listchildren 구성 요소 아래에 대화 상자 노드를 만듭니다. CRXDE Lite에서 /apps/mywebsite/components/listchildren 노드를 마우스 오른쪽 단추로 클릭하고 만들기 > 대화 상자 만들기​를 클릭합니다. 대화 상자에서 다음 속성 값을 입력하고 확인을 클릭합니다 레이블 : dialog

: 제목: Edit Component 확인을 클릭합니다. 다음 속성을 사용합니다. /apps/mywebsite/components/listchildren/dialog/items/items/tab1 노드를 선택합니다. 속성 탭에서 title 속성의 값을 List Children 로 변경합니다 tab1 노드를 선택하고 만들기 > 노드 만들기​를 클릭하고 다음 속성 값을 입력한 다음 확인​을 클릭합니다. 이름 :항목

:항목 유형:cq:WidgetCollection 다음 속성 값을 사용하여 항목 노드 아래에 노드를 만듭니다. 이름 :listroot

:listroot 유형:cq:Widget 목록 루트 노드에 대한 속성을 추가하여 텍스트 필드로 구성합니다. 다음 테이블의 각 행은 속성을 나타냅니다. 완료되면 모두 저장​을 클릭합니다. 이름 유형 값 fieldLabel 문자열 목록 루트의 경로 이름 문자열 ./listroot xtype 문자열 텍스트 필드

컨텐트 페이지 구성 요소에 목록 하위 포함

컨텐트 페이지 구성 요소에 listchildren 구성 요소를 포함하려면 다음과 같이 진행하십시오.

CRXDE Lite에서 /apps/mywebsite/components/contentpage 아래의 left.jsp 파일을 열고 다음 코드(4행)를 찾습니다.

newslist

해당 코드를 다음 코드로 바꿉니다. 변경 사항을 저장합니다.

페이지에서 목록 하위 보기

이 구성 요소의 전체 작업을 보려면 제품 페이지를 볼 수 있습니다.

상위 페이지(“목록 루트의 경로”)가 정의되지 않은 경우.

상위 페이지(“목록 루트의 경로”)가 정의된 경우

브라우저에서 Products 페이지를 다시 로드합니다. listchildren 구성 요소는 다음과 같이 나타납니다. 목록 루트의 경로로 다음을 입력합니다. /content/mywebsite/en 확인​을 클릭합니다. 이제 페이지의 listchildren 구성 요소는 다음과 같습니다.

로고 구성 요소 만들기

회사 로고를 표시하고 사이트의 홈 페이지에 대한 링크를 제공하는 구성 요소를 만듭니다. 구성 요소에는 속성 값이 사이트 디자인(/etc/designs/mywebsite?lang=ko)에 저장되도록 디자인 모드 대화 상자가 포함되어 있습니다.

속성 값은 디자인을 사용하는 페이지에 추가되는 구성 요소의 모든 인스턴스에 적용됩니다.

속성은 디자인을 사용하는 페이지에 있는 구성 요소의 모든 인스턴스를 사용하여 구성할 수 있습니다.

디자인 모드 대화 상자에는 이미지와 링크 경로를 설정하기 위한 속성이 포함되어 있습니다. 로고 구성 요소는 웹 사이트에 있는 모든 페이지의 왼쪽 상단에 배치됩니다.

다음과 같이 표시됩니다.

노트 Adobe Experience Manager은 더 많은 기능을 갖춘 로고 구성 요소( /libs/foundation/components/logo )를 제공합니다.

로고 구성 요소 노드 만들기

로고 구성 요소를 만들려면 다음 단계를 수행합니다.

CRXDE Lite에서 /apps/mywebsite/components를 마우스 오른쪽 단추로 클릭하고 만들기​를 선택한 다음 구성 요소 만들기​를 선택합니다. 구성 요소 만들기 대화 상자에서 다음 속성 값을 입력한 다음 다음을 클릭합니다. 레이블 : logo .

: . 제목 : My Logo Component .

: . 설명: This is My Logo Component . 대화 상자의 최종 패널에 도달할 때까지 다음 을 클릭한 다음 확인​을 클릭합니다.

로고 스크립트 만들기

이 섹션에서는 홈 페이지 링크와 함께 로고 이미지를 표시하는 스크립트를 만드는 방법을 설명합니다.

CRXDE Lite에서 /apps/mywebsite/components/logo 아래의 logo.jsp 파일을 엽니다. 다음 코드는 사이트 홈 페이지에 대한 링크를 만들고 로고 이미지에 참조를 추가합니다. 코드를 logo.jsp 에 복사합니다. <%@include file="/libs/foundation/global.jsp"%><% %><%@ page import="com.day.text.Text, com.day.cq.wcm.foundation.Image, com.day.cq.commons.Doctype" %><% /* obtain the path for home */ long absParent = currentStyle.get("absParent", 2L); String home = Text.getAbsoluteParent(currentPage.getPath(), (int) absParent); /* obtain the image */ Resource res = currentStyle.getDefiningResource("imageReference"); if (res == null) { res = currentStyle.getDefiningResource("image"); } /* if no image use text link, otherwise draw the image */ %> 변경 사항을 저장합니다.

로고 디자인 대화 상자 만들기

디자인 모드에서 로고 구성 요소를 구성하는 대화 상자를 만듭니다. 디자인 모드 대화 상자 노드의 이름은 design_dialog 으로 지정해야 합니다.

로고 구성 요소 아래에 대화 상자 노드를 만듭니다. /apps/mywebsite/components/logo 노드를 마우스 오른쪽 단추로 클릭하고 만들기 > 대화 상자 만들기​를 클릭합니다. 다음 속성 값을 입력한 다음 확인​을 클릭합니다. 레이블 design_dialog

제목 Logo (Design) design_dialog 분기에서 tab1 노드를 마우스 오른쪽 버튼으로 클릭하고 삭제를 클릭합니다. 모두 저장​을 클릭합니다. design_dialog/items/items 노드 아래에 cq:Widget 유형의 img 이라는 새 노드를 만듭니다. 다음 속성을 추가하고 모두 저장​을 클릭합니다. 이름 유형 값 fileNameParameter 문자열 ./imageName fileReferenceParameter 문자열 ./imageReference 이름 문자열 ./이미지 제목 문자열 이미지 xtype 문자열 html5smartimage

로고 렌더링 스크립트 만들기

로고 이미지를 검색하고 페이지에 기록하는 스크립트를 만듭니다.

로고 구성 요소 노드를 마우스 오른쪽 단추로 클릭하고 만들기 > 파일 만들기 를 클릭하여 img.GET.java라는 스크립트 파일을 만듭니다. 파일을 열고 다음 코드를 파일에 복사한 다음 모두 저장​을 클릭합니다.

package apps.mywebsite.components.logo; import java.io.IOException; import java.io.InputStream; import javax.jcr.RepositoryException; import javax.jcr.Property; import javax.servlet.http.HttpServletResponse; import com.day.cq.wcm.foundation.Image; import com.day.cq.wcm.commons.RequestHelper; import com.day.cq.wcm.commons.WCMUtils; import com.day.cq.wcm.commons.AbstractImageServlet; import com.day.cq.commons.SlingRepositoryException; import com.day.image.Layer; import org.apache.commons.io.IOUtils; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.servlets.SlingSafeMethodsServlet; /** * Renders an image */ public class img_GET extends AbstractImageServlet { protected Layer createLayer(ImageContext c) throws RepositoryException, IOException { /* don’t create the layer yet. handle everything later */ return null; } protected void writeLayer(SlingHttpServletRequest req, SlingHttpServletResponse resp, ImageContext c, Layer layer) throws IOException, RepositoryException { Image image = new Image(c.resource); image.setItemName(Image.NN_FILE, “image”); image.setItemName(Image.PN_REFERENCE, “imageReference”); if (!image.hasContent()) { resp.sendError(HttpServletResponse.SC_NOT_FOUND); return; } /* get pure layer */ layer = image.getLayer(false, false, false); /* do not re-encode layer, just spool */ Property data = image.getData(); InputStream in = data.getStream(); resp.setContentLength((int) data.getLength()); String contentType = image.getMimeType(); if (contentType.equals(“application/octet-stream”)) { contentType=c.requestImageType; } resp.setContentType(contentType); IOUtils.copy(in, resp.getOutputStream()); in.close(); resp.flushBuffer(); } }

Contentpage 구성 요소에 로고 구성 요소 추가

CRXDE Lite에서 /apps/mywebsite/components/contentpage file 아래에서 left.jsp 을 열고 다음 코드 행을 찾습니다.

logo

해당 코드를 다음 코드 줄로 바꿉니다. 변경 사항을 저장합니다. 브라우저에서 Products 페이지를 다시 로드합니다. 로고는 현재 기본 링크만 표시되지만 다음과 같이 보입니다.

페이지에서 로고 이미지 설정

이 섹션에서는 디자인 모드 대화 상자를 사용하여 이미지를 로고로 설정하는 방법을 설명합니다.

브라우저에 제품 페이지가 열려 있는 상태에서 사이드킥의 하단에 있는 디자인 단추를 클릭하여 디자인 모드로 들어갑니다. 로고 디자인 표시줄에서 편집​을 클릭하여 대화 상자를 사용하여 로고 구성 요소의 설정을 편집합니다. 대화 상자에서 이미지 탭의 패널을 클릭하고 mywebsite.zip 파일에서 추출한 logo.png 이미지를 찾은 다음 확인​을 클릭합니다. 사이드킥의 제목 표시줄에서 삼각형을 클릭하여 편집 모드로 돌아갑니다. CRXDE Lite에서 다음 노드로 이동하여 저장된 속성 값을 확인합니다. /etc/designs/mywebsite/jcr:content/contentpage/logo

탐색 표시 구성 요소 포함

이 섹션에서는 기초 구성 요소 중 하나인 탐색 표시(추적) 구성 요소를 포함합니다.

CRXDE Lite에서 /apps/mywebsite/components/contentpage (으)로 이동하여 center.jsp 파일을 열고 바꿉니다.

trail

사용: 변경 사항을 저장합니다. 브라우저에서 Products 1 페이지를 다시 로드합니다. 추적 구성 요소는 다음과 같습니다.

제목 구성 요소 포함

이 섹션에서는 기초 구성 요소 중 하나인 제목 구성 요소를 포함합니다.

CRXDE Lite에서 /apps/mywebsite/components/contentpage (으)로 이동하여 center.jsp 파일을 열고 바꿉니다.

title

사용: 변경 사항을 저장합니다. 브라우저에서 Products 페이지를 다시 로드합니다. 제목 구성 요소는 다음과 같습니다.

노트 편집 모드에서 다른 제목 및 유형/크기를 설정할 수 있습니다.

단락 시스템 구성 요소 포함

단락 시스템(parsys)은 단락 목록을 관리하기 때문에 웹 사이트의 중요한 부분입니다. 작성자가 페이지에 단락 구성 요소를 추가하고 구조를 제공할 수 있도록 해줍니다.

컨텐트 페이지 구성 요소에 parsys 구성 요소(기본 구성 요소 중 하나)를 추가합니다.

CRXDE Lite에서 /apps/mywebsite/components/contentpage 로 이동하여 center.jsp 파일을 열고 다음 코드 행을 찾습니다.

parsys

해당 코드 행을 다음 코드로 바꾼 다음 변경 사항을 저장합니다. 브라우저에서 제품 페이지를 새로 고칩니다. 이제 parsys 구성 요소가 있으며, 다음과 같이 표시됩니다.

이미지 구성 요소 만들기

단락 시스템에 이미지를 표시하는 구성 요소를 만듭니다. 시간을 절약하기 위해 이미지 구성 요소는 일부 속성이 변경된 로고 구성 요소의 사본으로 만들어집니다.

노트 Adobe Experience Manager은 더 많은 전체 기능을 갖춘 이미지 구성 요소( /libs/foundation/components/image )를 제공합니다.

이미지 구성 요소 만들기

/apps/mywebsite/components/logo 노드를 마우스 오른쪽 단추로 클릭하고 복사​를 클릭합니다. /apps/mywebsite/components 노드를 마우스 오른쪽 단추로 클릭하고 붙여넣기​를 클릭합니다. Copy of logo 노드를 마우스 오른쪽 단추로 클릭하고 이름 바꾸기​를 클릭하고 기존 텍스트를 삭제하고 image 를 입력합니다. image 구성 요소 노드를 선택하고 다음 속성 값을 변경합니다. jcr:title: 내 이미지 구성 요소.

내 이미지 구성 요소. jcr:description :내 이미지 구성 요소입니다. 다음 속성 값을 사용하여 image 노드에 속성을 추가합니다. 이름 :componentGroup

:componentGroup 유형 :문자열

:문자열 값:MyWebsite image 노드 아래에 있는 design_dialog 노드의 이름을 dialog 로 변경합니다. logo.jsp 이름을 image.jsp. 로 변경합니다. img.GET.java를 열고 패키지를 apps.mywebsite.components.image (으)로 변경합니다.

이미지 스크립트 만들기

이 섹션에서는 이미지 스크립트를 만드는 방법을 설명합니다.

열기 /apps/mywebsite/components/image/ image.jsp 기존 코드를 다음 코드로 바꾼 다음 변경 사항을 저장합니다. <%@include file="/libs/foundation/global.jsp"%><% %><%@ page import="com.day.cq.commons.Doctype, com.day.cq.wcm.foundation.Image, com.day.cq.wcm.api.components.DropTarget, com.day.cq.wcm.api.components.EditConfig, com.day.cq.wcm.commons.WCMUtils" %><% /* global.jsp provides access to the current resource through the resource object */ Image img = new Image(resource); img.setItemName(Image.NN_FILE, "image"); img.setItemName(Image.PN_REFERENCE, "imageReference"); img.setSelector("img"); img.setDoctype(Doctype.fromRequest(request)); img.setAlt("Home"); img.draw(out); %> 변경 사항을 저장합니다.

이미지 cq:editConfig 노드 만들기

cq:editConfig 노드 유형을 사용하면 속성을 편집할 때 구성 요소의 특정 동작을 구성할 수 있습니다.

이 섹션에서는 cq:editConfig 노드를 사용하여 Content Finder에서 이미지 구성 요소로 자산을 드래그할 수 있습니다.

CRXDE Lite의 /apps/mywebsite/components/image 노드에서 다음과 같이 새 노드를 만듭니다. 이름 :cq:editConfig

:cq:editConfig 유형:cq:EditConfig. cq:editConfig 노드에서 다음과 같이 새 노드를 만듭니다. 이름 :cq:dropTargets.

:cq:dropTargets. 유형:cq:DropTargetConfig입니다. cq:dropTargets 노드 아래에 다음과 같이 새 노드를 만듭니다. 이름 :이미지.

:이미지. 유형:nt:구조화되지 않습니다. CRXDE에서 속성을 다음과 같이 설정합니다.

이름 유형 값 동의 문자열 image/(gif) 그룹 문자열 미디어 propertyName 문자열 ./imageReference

아이콘 추가

이 섹션에서는 사이드 킥에 이미지 구성 요소가 나열되면 이미지 구성 요소 옆에 표시되는 아이콘을 추가합니다.

CRXDE Lite에서 /libs/foundation/components/image/icon.png 파일을 마우스 오른쪽 단추로 클릭하고 복사​를 선택합니다. 노드 /apps/mywebsite/components/image 를 마우스 오른쪽 단추로 클릭하고 붙여넣기​를 클릭한 다음 모두 저장​을 클릭합니다.

이미지 구성 요소 사용

이 섹션에서는 제품 페이지를 보고 이미지 구성 요소를 단락 시스템에 추가합니다.

브라우저에서 Products 페이지를 다시 로드합니다. 사이드 킥에서 디자인 모드 아이콘을 클릭합니다. 편집 단추를 클릭하여 단락 디자인 대화 상자를 편집합니다. 대화 상자에 허용된 구성 요소 목록이 표시됩니다.MyWebsite​로 이동하여 내 이미지 구성 요소​를 선택하고 확인​을 클릭합니다. 편집 모드​로 돌아갑니다. parsys 프레임을 두 번 클릭합니다( 구성 요소나 자산을 여기로 드래그하십시오.). 새 구성 요소 삽입 및 사이드 킥이나 선택기는 다음과 같습니다.

도구 모음 구성 요소 포함

이 섹션에서는 기초 구성 요소 중 하나인 도구 모음 구성 요소를 포함합니다.

디자인 모드와 편집 모드에 있는 여러 가지 옵션이 있습니다.

CRXDE Lite에서 /apps/mywebsite/components/contentpage 로 이동하여 body.jsp 파일을 열고 다음 코드를 찾습니다.

toolbar

해당 코드를 다음 코드로 바꾸고 변경 내용을 저장합니다. AEM 웹 사이트 페이지의 폴더 트리에서 Websites/My Website/English 을 선택한 다음 새로 만들기 > 새 페이지​를 클릭합니다. 다음 속성 값을 지정하고 생성을 누릅니다. 제목 :도구 모음

:도구 모음 내 웹 사이트 컨텐츠 페이지 템플릿 선택 페이지 목록에서 도구 모음 페이지를 마우스 오른쪽 단추로 클릭하고 속성​을 클릭합니다. 탐색에서 숨기기​를 선택하고 확인​을 클릭합니다. 탐색 시 숨기기 옵션은 위쪽 탐색 및 listchildren과 같은 탐색 구성 요소에 페이지가 표시되지 않도록 합니다. 도구 모음​에서 다음 페이지를 만듭니다. 연락처

피드백

로그인

검색 브라우저에서 Products 페이지를 다시 로드합니다. 다음과 같습니다.

검색 구성 요소 만들기

이 섹션에서는 웹 사이트에서 컨텐츠를 검색하는 구성 요소를 만듭니다. 이 검색 구성 요소는 페이지의 단락 시스템(예: 전문 검색 결과 페이지)에 배치할 수 있습니다.

검색 입력 상자는 English 페이지에서 다음과 같이 표시됩니다.

검색 구성 요소 만들기

CRXDE Lite에서 /apps/mywebsite/components 을 마우스 오른쪽 단추로 클릭하고 만들기​를 선택한 다음 구성 요소 만들기​를 선택합니다. 대화 상자를 사용하여 구성 요소를 구성합니다. 첫 번째 패널 중 하나에서 다음 속성 값을 지정합니다. 레이블 :검색

:검색 제목 :내 검색 구성 요소

:내 검색 구성 요소 설명 :내 검색 구성 요소입니다

:내 검색 구성 요소입니다 그룹:MyWebsite 다음​을 클릭한 다음 다음​을 다시 클릭합니다. 허용되는 부모 패널에서 + 단추를 클릭하고 */parsys 를 입력합니다. 다음​을 클릭한 다음 확인​을 클릭합니다. 모두 저장​을 클릭합니다. 다음 노드를 복사하여 apps/mywebsite/components/search 노드에 붙여넣습니다. /libs/foundation/components/search/dialog

“ /libs/foundation/components/search/i18n

/libs/foundation/components/search/icon.png 모두 저장​을 클릭합니다.

검색 스크립트 만들기

이 섹션에서는 검색 스크립트를 만드는 방법을 설명합니다.

/apps/mywebsite/components/search/search.jsp 파일을 엽니다. 다음 코드를 search.jsp 에 복사합니다. <%@ page import="com.day.cq.wcm.foundation.Search,com.day.cq.tagging.TagManager" %> <%@include file="/libs/foundation/global.jsp" %><% %><% Search search = new Search(slingRequest); String searchIn = (String) properties.get("searchIn"); String requestSearchPath = request.getParameter("path"); if (searchIn != null) { /* only allow the "path" request parameter to be used if it is within the searchIn path configured */ if (requestSearchPath != null && requestSearchPath.startsWith(searchIn)) { search.setSearchIn(requestSearchPath); } else { search.setSearchIn(searchIn); } } else if (requestSearchPath != null) { search.setSearchIn(requestSearchPath); } pageContext.setAttribute("search", search); TagManager tm = resourceResolver.adaptTo(TagManager.class); %><% %>

” type=”submit” />


“>

Results ${result.startIndex + 1} – ${result.startIndex + fn:length(result.hits)} of ${result.totalMatches} for ${fn:escapeXml(search.query)}. (${result.executionTime} seconds)

${hit.title}

${hit.excerpt}
${hit.URL}

Languages

Leave a Comment