#

웹 템플릿 적용

  • temp폴더 안에 템플릿 폴더 내의 파일 및 폴더 전체 복사-붙여넣기
  • index.html을 main.jsp에 붙여넣기
  • assets , vendor 폴더를 webapp 하위로 이동시키기
    • vendor 를 ../vendor로 replace all 하기
    • assets 도 ../assets로 replace all 하기

tiles.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>
  <definition name="main" template="/WEB-INF/main/main.jsp">
    <put-attribute name="header" value="/WEB-INF/main/header.jsp"/>
    <put-attribute name="content" value="/WEB-INF/main/content.jsp"/>
    <put-attribute name="footer" value="/WEB-INF/main/footer.jsp"/>
  </definition>
  <definition name="*/*" extends="main">
    <put-attribute name="content" value="/WEB-INF/{1}/{2}.jsp"/>
  </definition>
  <definition name="*/*/*" extends="main">
    <put-attribute name="content" value="/WEB-INF/{1}/{2}/{3}.jsp"/>
  </definition>
  <definition name="login" template="/WEB-INF/member/login.jsp">
  </definition>
  <!-- <definition name="login" template="/WEB-INF/member/login.jsp">
  </definition>
  <definition name="join" template="/WEB-INF/member/join.jsp">
  </definition> -->
</tiles-definitions>

pom.xml

  • 타일즈 버전 변경
<!-- tiles  -->
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-core</artifactId>
			<version>3.0.8</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-jsp</artifactId>
			<version>3.0.8</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-api</artifactId>
			<version>3.0.8</version>
		</dependency>
		
		<dependency>
			<groupId>org.apache.tiles</groupId>
			<artifactId>tiles-servlet</artifactId>
			<version>3.0.8</version>
		</dependency>

application-context.xml

  • 사용자 정의 클래스 : 메모리 할당 요청
<context:component-scan base-package="com.sist.*"/>
  • viewResolver
<!-- ViewResolver -->
<bean id="tilesViewResolver"
   class="org.springframework.web.servlet.view.UrlBasedViewResolver"
   p:requestContextAttribute="requestContext"
   p:viewClass="org.springframework.web.servlet.view.tiles3.TilesView"
   p:order="0"
 />
 <bean id="tilesConfigurer"
   class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"
   p:definitions="/WEB-INF/tiles.xml"
 />

 <bean id="viewResolver"
   class="org.springframework.web.servlet.view.InternalResourceViewResolver"
   p:prefix="/"
   p:suffix=".jsp"
   p:order="1"
 />

MainController

  • @Controller
  • main.do와 main.jsp 매핑하기
@RequestMapping("main/main.do")
	public String main_main()
	{
		return "main";
	}

webapp- index.jsp

  • main.do로 redirect해서 최초 화면 설정하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	response.sendRedirect("main/main.do");
%>

main.jsp 용도별로 분리하기

  • taglib 추가하기 : <%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
  • header부분 header.jsp로 이동시키고, tiles insert하기 : <tiles:insertAttribute name="header"/>
  • footer부분 footer.jsp로 이동시키고, tiles insert하기 : <tiles:insertAttribute name="footer"/>
  • Content부분 Content.jsp로 이동시키고, tiles insert하기 : <tiles:insertAttribute name="Content"/>

header.jsp , footer.jsp , content.jsp

  • 5버전으로 변경 : <meta charset="UTF-8">

content도 분리하기

food, recipe

db 테이블 제작

CREATE TABLE food_category(
    no NUMBER,
    title VARCHAR2(500) CONSTRAINT fc_title_nn NOT NULL,
    poster VARCHAR2(1000) CONSTRAINT fc_poster_nn NOT NULL,
    subject VARCHAR2(500) CONSTRAINT fc_subject_nn NOT NULL,
    link VARCHAR2(100),
    CONSTRAINT fc_no_nn PRIMARY KEY(no)
);
CREATE TABLE food_detail(
    no NUMBER,
    cateno NUMBER,
    poster VARCHAR2(1000) CONSTRAINT fd_poster_nn NOT NULL,
    title VARCHAR2(200) CONSTRAINT fd_title_nn NOT NULL,
    score VARCHAR2(5) CONSTRAINT fd_score_nn NOT NULL,
    addr VARCHAR2(200) CONSTRAINT fd_addr_nn NOT NULL,
    tel VARCHAR2(15) CONSTRAINT fd_tel_nn NOT NULL,
    type VARCHAR2(200) CONSTRAINT fd_type_nn NOT NULL,
    price VARCHAR2(100),
    menu VARCHAR2(500),
    good NUMBER,
    soso NUMBER,
    bad NUMBER,
    CONSTRAINT fd_no_pk PRIMARY KEY(no),
    CONSTRAINT fd_cateno_fk FOREIGN KEY(cateno)
    REFERENCES food_category(no)
);

FoodManager

  • jsoup 파싱하기
  • &\ 은 필터링해서 값 넣기

FoodCategoryVO

FoodDAO

  • 연결
  • foodCategoryInsert

MainClass

  • foodCategoryAllData 실행해서 오라클에 값 집어넣기

FoodMapper

application-datasource.xml

FoodController

list.jsp

상세보기

FoodVO

com.sist.data - FoodDAO

  • foodDetailInsert
  • INSERT 쿼리 문장 장석

FoodManager

FoodDAO

  • foodCategoryData

FoodManager

  • jsoup 파싱해서 값 채우기

MainClass

  • foodDetailData 실행해서 오라클에 값 넣기

food-list.jsp

  • offset
  • animate : 올라갈때, 0.4초(400/1000초) 걸리도촉 하는 이벤트

상세 페이지 출력

foodMapper

  • REGEXP_LIKE

foodDAO

SRC - FOOD - list.jsp

  • 사용자 요청 : <a href="../food/food_category.do?no=${vo.no }">

FoodController

food_detail.jsp

  • 스크립트에서 model로 넘겨진 변수 사용하는 방법 :

  • https://developers.google.com/chart/interactive/docs/gallery/piechart

식당 관련 레시피 출력하기

FoodController

  • food_detail에서 foodLikeRecipeData결과를 받음

foodMapper

  • REGEXP_LIKE

food_detail.jsp

  • <img src="cloud${vo.no }.png"/>

네이버 api 활용하기

  • 태그명과 클래스명이 일치해야 한다.
Tip

XML 파싱

  • JAXB : XML코드를 자바로 변환(언마샬) / 자바를 XML로 변환 하는 방식(마샬) => binding
  • JAXP : DOM파싱 , SAX파싱
<rss version="2.0">  // Class Rss
    <channel>        // Class Channel 
        <title>aaa</title>
        <description>bbb</description>
        <item>      // Class Item()
            <title>명예훼손 없이 <b>리뷰</b>쓰기</title>
            <link>http://openapi.naver.com/l?AAABWLyw6CMBREv+ayNJe2UrrogvJwg8aYKGvACiSUalNR/t6azGLO5Mzrrd0moVSQJZDl/6I4KIxGpx9y9P4JNANShXSzHXZLu2q3660Jw2bt0k1+aF1rgFYXfZ+c7j3QorYDkCT4JxuIEEyRUYGcxpGXMeMs3VPBOUEWGXntynUW03k7ohBYfG+mOdRqbPL6E84/apnqgaEAAAA=</link>
            <description>명예훼손 없이</description>
            <bloggername>건짱의 Best Drawing World2</bloggername>
            <bloggerlink>http://blog.naver.com/yoonbitgaram</bloggerlink>
            <postdate>20161208</postdate>
        </item>
        ...
    </channel>
</rss>

ApiExamSearchBlog.java

Rss

R

데이터 읽기

  • csv = read.csv()
  • read.table()
  • readLines
  • data<-readLines("c:/upload/naver.txt",encoding="utf-8")

  • 명사만 추출 : 세종(국어사전)
  • sapply = 2차원 배열 => 1차원 배열 = unlist
  • 단어의 언급횟수 (table) : 원하는 갯수 출력 head()
  • 그래프, wordcloud
  • 명사추출 : data1 <-sapply(data,extractNoun,USE.NAMES=F)
  • 1차원 배열로 변경 : data2<-unlist(data1)

  • data3<-Filter(function(x){nChar(x)>=2,data2})
  • tools - install Package
  • 자바와 알 연동시키려면?
  • C:\Program Files\R\R-3.6.1\library\Rserve\libs\x64 - rserve복사해서
  • bin 폴더에 붙여넣어야 함
  • 그다음 cmd에서
  • c:\Program Files\R>cd C:\Program Files\R\R-3.6.1\bin
  • C:\Program Files\R\R-3.6.1\bin>R.exe CMD Rserve.exe

지도 띄우기

로그인

header.jsp

main.jsp

ReplyDAO

LoginRestController

main.jsp