미분류

230208

Berylly 2023. 2. 8. 21:04

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/

 

Index of /dist/commons/fileupload/binaries

 

archive.apache.org

 

+ 업로드 파일 입출력을 위한 오픈소스 라이브러리 다운경로

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

 

230207

T.김동식 JSP post & get 아이디 비밀번호 이름 이메일 c:choose c:when ${empty 변수}, c:otherwise 아이디 비밀번호 이름 나이 키 이름을 입력하세요!! ${id} ${pwd} ${name} ${age} ${height} c:forEach var="변수" begin="시작i

sanghee.tistory.com

Papago번역

Scrapy 다운로드 프로그램을 사용하여 URL 가져오기
genspider 사전 정의된 템플릿을 사용하여 새 스파이더 생성
runspider 프로젝트를 생성하지 않고 자체 포함된 스파이더 실행
설정설정값 가져오기
셸 대화형 스크래핑 콘솔
프로젝트 시작새 프로젝트 생성
버전 인쇄 스크래피 버전
Scrapy에서 볼 수 있듯이 브라우저에서 URL 열기 보기