T.김동식
html/css
쇼핑몰 레이아웃
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>도서쇼핑몰</title>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
<style type="text/css">
*{margin: 0; padding: 0; font-family: 'Noto Sans KR', sans-serif; color:#272727}
body{background:#ededed;}
#container{width:900px; margin:0 auto; background:white;}
hgroup h2{font-size: 1rem;color:gray; font-weight: 400;}
hgroup, nav ul, .plus_stretch {display: flex;align-items: center; justify-content: space-between;}
ul{list-style: none;}
.plus_stretch{align-items: stretch;}
section, aside{width:49%; display: inline-block;border:1px solid #ddd}
section, aside{padding:1rem; box-sizing: border-box;}
.ad{background:#ededed;}
.ad+ul>li b{font-weight: 400;}
footer{background:#ededed; font-size: 13px; padding: 1.25rem;}
footer,footer *{color:gray;}
/* style */
hgroup h1{font-size: 1.5rem;}
article h1{font-size: 1rem;}
.ad, footer{text-align: center;}
body, #container, .ad{padding:2rem 3rem}
hgroup, article{border-bottom:1px solid #ddd; }
hgroup{padding-bottom:2rem;}
article, .ad+ul>li{padding-bottom:1rem;}
footer{margin-top:1rem}
hgroup, nav ul, article, .ad{margin-bottom:1rem}
article:last-child{margin-bottom:0rem;border:none;}
article:last-child{padding-bottom:0rem;}
</style>
</head>
<body>
<div id="container">
<header>
<hgroup>
<h1>책읽는 사람이 세상을 바꾼다!!</h1>
<h2>by 홍길동</h2>
</hgroup>
</header>
<nav>
<ul>
<li><span>국내도서</span></li>
<li><span>서양도서</span></li>
<li><span>베스트셀러</span></li>
<li><span>e-book</span></li>
<li><span>아동전집</span></li>
<li><span>이벤트</span></li>
<li><span>문화행사</span></li>
</ul>
</nav>
<div class="plus_stretch">
<section>
<article>
<h1> 첫 번째 도서 제목 </h1>
<p> 첫 번째 도서의 내용 </p>
</article>
<article>
<h1> 두 번째 도서 제목 </h1>
<p> 두 번째 도서의 내용 </p>
</article>
<article>
<h1> 세번째 도서 제목 </h1>
<p> 세번째 도서의 내용 </p>
</article>
</section>
<aside>
<p class="ad">문화 강좌 광고</p>
<ul>
<li><b>html5강좌</b></li>
<li><b>컴퓨터강좌</b></li>
<li><b>독서강좌</b></li>
</ul>
</aside>
</div>
<footer>
이메일:admin@test.com<br>
회사주소:서울시 강동구<br>
찾아오는 길:<a href="#">약도</a>
</footer>
</div>
</body>
</html>
파일 다운로드
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
//result로 post방식으로 전송
<form method="post" action="result.jsp" >
//전송할 param 값: 파일이름
<input type=hidden name="param1" value="sample.png" />
<input type=hidden name="param2" value="text.txt" /> <br>
<input type ="submit" value="다운로드">
</form>
</body>
</html>
package sec01.ex02;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/download.do")
public class fileDownload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
//경로+파일이름을 변수 downFile에 저장
String file_repo = "D:\\file_repo";
String fileName = (String) request.getParameter("fileName");
String downFile = file_repo + "\\" + fileName;
//경로를 File 객체로 저장
File f = new File(downFile);
//파일 기본세팅
response.setHeader("Cache-Control", "no-cache");//(덮어쓰기)기존캐시제어
response.addHeader("Content-disposition", "attachment; fileName=" + fileName);//
FileInputStream in = new FileInputStream(f);//f를 가져옴
byte[] buffer = new byte[1024 * 8];//byte배열 8메가로 우선 세팅
OutputStream out = response.getOutputStream();
while (true) {
int count = in.read(buffer);
if (count == -1)//파일이 끝날때까지
break;
out.write(buffer, 0, count);//buffer를 0부터 count까지 write
}
in.close();
out.close();
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% request.setCharacterEncoding("utf-8");%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<c:set var="file1" value="${param.param1}" />
<c:set var="file2" value="${param.param2}" />
<p>파일명: ${file1}</p>
<p>파라미터 1 :<c:out value="${file1}" /></p>
//파일이 비어있지 않을때
<p><c:if test="${not empty file1}">
<img src="${contextPath}/download.do?fileName=${file1}" width=300 /><br>
</c:if></p>
<p>파라미터 2 :<c:out value="${file2}"/></p><p>
<a href="${contextPath}/download.do?fileName=${file1}">파일 내려받기</a><br>
<a href="${contextPath}/download.do?fileName=${file2}" >파일 내려받기</a><br>
</body>
</html>
파일 업로드&다운로드
package sec01.ex01;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/upload.do")
public class fileUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request,response);
}
private void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//기본 utf-8세팅
request.setCharacterEncoding("utf-8");
String encoding = "utf-8";
//DiskFileItemFactory upload된 파일을 저장소에 저장하기 위한 세팅(경로, 크기제한)
DiskFileItemFactory factory =new DiskFileItemFactory();
//setRepository
//void org.apache.commons.fileupload.disk.DiskFileItemFactory.setRepository(File repository)
//File형 repository, 주소값이 들어와야 하기때문에 new File을 사용
File currentDirPath = new File("D:/file_repo");
factory.setRepository(currentDirPath); //경로
factory.setSizeThreshold(1024*1024); // 1M이하 크기제한
//파일업로드를 처리하는 클래스
ServletFileUpload upload = new ServletFileUpload(factory);
try {
//request객체에서 매개변수를 List로 가져옴
//FileItem multipart/form-data로 받은 객체를 처리
List<FileItem> items =upload.parseRequest(request);
for (int i = 0; i < items.size(); i++) {
//upload된 i번재 items을 가져옴
//multipart/form-data로 받은 객체를 처리하는 fileItem 객체로 생성.
FileItem fileItem = (FileItem) items.get(i);
//isFormField, FileItem오브젝트에 저장되어 있는 값이
//FORM데이터인지(true) 파일데이터인지(false)를 판단
if (fileItem.isFormField()) {
//isFormField일경우 console창에 확인
System.out.println(fileItem.getFieldName() + "=" + fileItem.getString(encoding));
} else {
//파일데이터일경우 console창에 확인
System.out.println(items);
System.out.println(fileItem);
System.out.println("파라미터명:" + fileItem.getFieldName());
System.out.println("파일명:" + fileItem.getName());
System.out.println("파일크기:" + fileItem.getSize() + "bytes");
if (fileItem.getSize() > 0) {
System.out.println("dddddd"+fileItem.getName());//ddddddsample.png
int idx = fileItem.getName().lastIndexOf("\\");
System.out.println(fileItem.getName().lastIndexOf("\\"));//-1 파일의 끝이 출력됨
if (idx == -1) {
idx = fileItem.getName().lastIndexOf("/");
System.out.println(fileItem.getName().lastIndexOf("/"));
}
String fileName = fileItem.getName().substring(idx + 1);
File uploadFile = new File(currentDirPath + "\\" + fileName);
fileItem.write(uploadFile);
} // end if
} // end if
} // end for
} catch (Exception e) {
System.out.println("파일요청관련오류");
}
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<html>
<head>
<meta charset="UTF-8">
<head>
<title>파일 업로드창</title>
</head>
<body>
<%-- taglib lib파일에 삽입후 contextPath 설정 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="contextPath" value="${pageContext.request.contextPath}" />
<p>프로젝트 경로: ${contextPath}/upload.do</p>
<form action="${contextPath}/upload.do" method="post" enctype="multipart/form-data">
<p>파일1: <br> <input type="file" name="file1"></p>
<p>파라미터1: <input type="text" name="param1"></p>
<p>
<input type="submit" value="업로드">
</p>
</form>
</body>
</html>
+파일업로드 기능을 사용하기 위한 오픈소스 라이브러리 다운경로
commons-fileupload-1.3.3.jar
http://archive.apache.org/dist/commons/fileupload/binaries/
+ 업로드 파일 입출력을 위한 오픈소스 라이브러리 다운경로
commons-io-2.6.jar
https://mvnrepository.com/artifact/commons-io/commons-io/2.6
Python
JSON JavaScript Object Notation
Javascript KEY VALUE 값이 있는 객체 문법
Scrapy를 사용한 데이터 추출
pip install scrapy
https://sanghee.tistory.com/128/#sanghee_sacrapy
Papago번역
Scrapy 다운로드 프로그램을 사용하여 URL 가져오기
genspider 사전 정의된 템플릿을 사용하여 새 스파이더 생성
runspider 프로젝트를 생성하지 않고 자체 포함된 스파이더 실행
설정설정값 가져오기
셸 대화형 스크래핑 콘솔
프로젝트 시작새 프로젝트 생성
버전 인쇄 스크래피 버전
Scrapy에서 볼 수 있듯이 브라우저에서 URL 열기 보기