Archive

2021-03-06 TIL

|

2021-03-06 TIL


  • 오늘 한 것
    1. MVC2 게시판 시험 - 소스코드를 하나하나 다 캡쳐뜨고 실행화면도 캡쳐뜨고… 보고서 형식으로 소스코드 해설하고… 하루 반나절은 여기에 매달린것 같다… 가뜩이나 시간없는데ㅠ 시험 스트레스
    2. 팀 프로젝트 구상 - 예제나 사이드 프로젝트를 맨날 로컬로만 만들어서 도대체 백엔드랑 어떻게 연결을 하는것인지 이걸 알지 못하면 프로젝트 구상자체를 못할것 같아서 무작정 인터넷을 찾아헤맸다. 결론은 RESTful하게 API 통신으로 JSON이나 XML 같은 파일에 담아서 프론트, 백이 서로 데이터를 주고받는다는 것을 알았다. 그리고 프론트엔드도 서버가 있다는 사실을 알고 놀라웠다. 이건 케바케인듯한데 웹서버와 API 서버를 나눠서 할 수도 있고 하나로 퉁쳐서 URL을 다르게 갈 수도 있고 방법은 여러가지인듯하다. 배포시점에서도 프론트 따로 배포하고 백 따로 배포하고 둘이 API로 통신하면 장땡인듯하다. 다른 사람들 프로젝트도 많이보고 어디 클론프로젝트 할거 없나 돌아다녔지만 역시나 사람들 만든게 다 비슷비슷하다. 쇼핑몰이 가장 무난한듯 싶으나 막상 진지하게 구현하려면 어렵겠지.. 기본 기능은 다 다둘수 있어서 쇼핑몰이 적합하다는 사람도 있고 너무 널리고 널려서 포폴에 도움이 안된다는 사람도 있고 의견이 갈리는듯하다.



  • 내일 할 것
    1. 팀 프로젝트 자료수집
    2. 자바 웹스킬



  • 끝으로

그래서 JSP는 프론트 언어인가 백 언어인가..

리액트 공부는 잠시 미뤄두고 팀프로젝트를 위해 JSP로 화면구현을 하는 연습을 해야겠다.

오늘의 한 줄 총평 : JSP 공부를 하자


2021-03-05 TIL

|

2021-03-05 TIL


  • 오늘 한 것
    1. 학원 대면수업(15:30~22:00) JSP - MVC2 패턴을 이용한 게시판 구현을 했다. 저번 방식과는 다르게 이번에는 property를 이용해서 명령어를 읽어 해당 명령클래스를 수행하는 방식이었다. 메인 컨트롤러의 init 에서 명령어와 해당 명령클래스의 인스턴스 객체를 맵에 저장하여 service에서 인스턴스 객체의 실행 메소드를 실행하고 반환한 URL 문자열로 dispatcher가 forward 시킨다. 각 작업을 처리할 Action이 있고 액션은 view에서 submit한 데이터를 DAO의 메소드로 처리하고 URL 문자열을 리턴하면 해당 view로 이동하는 형태이다. 와 어제꺼보다 더 어렵네.. 이 구조도 이해하는데 꽤나 시간이 걸렸다..



  • 내일 할 것
    1. MVC2 게시판 시험
    2. 팀 프로젝트 구상



  • 끝으로

하 시험이라고?

오늘의 한 줄 총평 : 배운거 강제 복습인가


JSP - 파일 업로드

|

JSP - 파일 업로드


  1. form 태그

    <form method="post" enctype="multipart/form-data">
        <input type="file" name="filename" />
    </form>
    
    • form 태그의 인코딩 타입을 multipart/form-data로 지정한다. get, post 방식은 용량이 제한되어있기 때문이다
    • 이렇게 하면 일반적으로 2GB까지 업로드가 가능하다
    • 서버에서는 넘어온 데이터를 받아서 파일로 만드는 작업을 하게 된다
  2. COS 라이브러리

    • www.servlets.com 에 접속하여 cos 라이브러리를 다운받는다

    COS

    • MultipartRequest의 생성자

    생성자

    • MultipartRequest의 메소드

    메소드

    <%@ page import="com.oreilly.servlet.MultipartRequest" %>
    <%@ page import="com.oreilly.servlet.multipart.*" %>
    <%@ page import="java.util.*" %>
       
    <%
    	String uploadPath = application.getRealPath("upload");
    	int size = 10*1024*1024;
    	String name = "";
    	String subject = "";
    	String fileName1 = "";
    	String originalName1 = "";
    	try {
    		MultipartRequest multi = new MultipartRequest(request, uploadPath, size, "utf-8", new DefaultFileRenamePolicy());
    		name = multi.getParameter("name");
    		subject = multi.getParameter("subject");
    		Enumeration files = multi.getFileNames();
    		String file1 = (String) files.nextElement();
    		fileName1 = multi.getFilesystemName(file1);
    		originalName1 = multi.getOriginalFileName(file1);
    	} catch(Exception e) {
    		e.printStackTrace();
    	}
    %>
       
    <body>
    	<form name="filecheck" action="fileCheck.jsp" method="post">
    		<input type="hidden" name="name" value="<%=name %>" />
    		<input type="hidden" name="subject" value="<%=subject %>" />
    		<input type="hidden" name="filename1" value="<%=fileName1 %>" />
    		<input type="hidden" name="originalname1" value="<%=originalName1 %>" />
    	</form>
    	<a href="#" onClick="javascript:filecheck.submit()">업로드 확인 및 다운로드 페이지 이동</a>
    </body>
    
    <%
    	request.setCharacterEncoding("utf-8");
    	String name = request.getParameter("name");
    	String subject = request.getParameter("subject");
    	String fileName1 = request.getParameter("filename1");
    	String originalName1 = request.getParameter("originalname1");
    %>
    <body>
    올린이 : <%=name %><br>
    제목 : <%=subject %><br>
    파일명1 : <%=originalName1 %><br>
    </body>
    


  3. 자카르타 FileUpload API를 이용한 파일 업로드

    • http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi https://commons.apache.org/proper/commons-io/download_io.cgi
    • 라이브러리를 다운받는다
    • 파일을 서버에 올리면 서버의 지정된 폴더에 저장하고 그걸 복사해오는 방식을 이용
    • FileUpload API 사용방법
    • FileUpload.isMultipartContent() 메소드로 웹 브라우저가 Multipart/form-data 인코딩 타입으로 데이터를 전송했는지 판단한다
    • multipart/form-data 인코딩 타입인 경우 DiskFileUpload 객체를 생성한다
    • DiskFileUpload.parseRequest() 메소드를 사용해 웹 브라우저가 전송한 데이터를 추출한다
    • DiskFileUpload.parseRequest() 메소드가 리턴한 FileItem 목록을 사용해 파일 및 파라미터를 처리한다
    • DiskFileUpload 관련 메소드

    메소드

    • FileItem 관련 메소드

    메소드


    • 서버에서는 일반적으로 FileItem.write(File file) 메소드로 업로드를 처리한다
    • 업로드 처리가 완료되는 순간 임시파일을 삭제하고 싶으면 FileItem.delete() 메소드를 사용한다



참고 자료


KG 아이티뱅크 강의 자료

처음해보는 JSP&Servlet 웹 프로그래밍

2021-03-04 TIL

|

2021-03-04 TIL


  • 오늘 한 것
    1. 학원 대면수업(15:30~22:00) JSP - MVC2 패턴을 이용한 회원가입 구현을 했다. 클라이언트의 요청을 받는 servlet에서 cmd 파라미터를 읽어 액션팩토리에서 해당 명령어를 수행할 액션 객체를 불러온다. 액션은 overriding 되어있는 excute 메소드를 실행하고 그 리턴값으로 이동할 uri 문자열을 반환한다. servlet에서 dispatcher로 해당 URL로 forward를 시켜준다. Model의 VO, DAO는 MVC1 패턴때 그대로인데 페이지 이동이나 form 태그의 action에서 *.do?cmd=”name”의 형태로 URL을 주면 dd의 서블릿 매핑에 의해 servlet이 받아서 처리하는 구조이다. 이 구조를 이해하는데 시간이 좀 걸렸다.



  • 내일 할 것
    1. 학원 대면수업(15:30~22:00) JSP MVC2 게시판



  • 끝으로

내용이 점점 어려워지고 코딩양이 많아졌다.

오늘의 한 줄 총평 : 어렵다


JSP - Cookie & Session

|


  1. Cookie

    • 쿠키는 웹브라우저가 보관하고 있는 데이터로 웹서버에 요청을 보낼때 함께 전송된다

    • 쿠키 동작 방식

      • 쿠키는 JSP 웹서버에서 생성하거나 JS를 사용해서 클라이언트 측에서 생성한다

      • 생성된 쿠키는 응답 데이터와 함께 전송된다

      • 웹 브라우저에서 쿠키를 저장소에 보관한다. 종류에 따라 메모리나 파일로 저장

      • 웹 브라우저는 저장된 쿠키를 요청이 있을시 웹 서버에 전송한다. 이 쿠키를 사용해서 웹 서버에서 필요한 작업을 수행한다.

    • 쿠키 특성

      • 특정 웹 사이트에 접속할 때 생성되는 정보를 담은 임시 파일로 4KB 이하로 생성된다

      • 개인의 정보는 되도록 쿠키에 저장하지 않는 것이 좋다

      • 보안문제로 웹 브라우저 자체에 쿠키 거부 기능을 설정할 수 있다

    • 쿠키 구성요소

      • 이름 : 각각 쿠키를 구별하는데 사용되는 이름
      • 값 : 쿠키 이름과 관련된 값
      • 유효시간 : 쿠키 유지시간
      • 도메인 : 쿠키를 전송할 도메인
      • 경로 : 쿠키를 전송할 요청 경로
    • 쿠키 생성

    <%
    	Cookie cookie = new Cookie("CookieName","CookieValue");
    	response.addCookie(cookie);
    %>
    
    • cookie.getName, cookie.getValue로 값을 꺼내어 사용한다
    • 쿠키 관련 메소드

    메소드


    • 쿠키 경로
    • 쿠키는 그 쿠키를 생성한 서버에만 전송된다. 같은 도메인을 사용하는 서버에 대해서 모두 쿠키를 보내고 싶으면 setDomain() 메소드를 이용하여 처리할 수 있다
    • .xxx.co.kr : . 으로 시작하는 경우에는 관련된 도메인 모두에게 쿠키를 전송
    • www.xxx.co.kr : 특정 도메인에 대해서만 쿠키를 전송
    • 도메인뿐만 아니라 setPath() 메소드를 이용하여 경로를 지정할 수 있다
    • cookie.setPath(“/path”); => /path 또는 /path/sub 하위 경로에만 전송
    • 쿠키의 유효시간
    • 쿠키는 유효시간을 설정할 수 있다. 설정하지 않으면 웹 브라우저를 닫는 순간 삭제된다
    • 유효시간을 설정하면 브라우저를 닫더라도 삭제되지 않는다
  2. Session

    • 쿠키가 웹 브라우저 쪽에 상태를 유지하기 위한 정보를 저장했다면, 세션은 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다
    • javax.servlet.http 패키지의 HttpSession 인터페이스를 통해 세션을 사용한다
    • 웹 컨테이너는 기본적으로 하나의 웹 브라우저에 하나의 세션을 생성한다
    • 세션은 웹 브라우저마다 따로 존재하기 때문에 웹 브라우저 관련 1 대 1 정보를 저장한다
    • 서버와 관련된 정보를 노출시키지 않기 위해 쿠키보다 세션을 통한 상태관리가 효율적
    • 세션 생성
    <%@ page session = "true" %> <!-- 기본 설정이 true이므로 굳이 안해도 됨-->
    
    • 세션 내장객체의 주요 메소드

    메소드


    • 한번 생성된 세션은 종료되기 전까지 지속적으로 유지된다
    • setAttribute(), getAttribute() 메소드로 상태관리를 할 수 있다
    <%
    	session.setAttribute("name","limu");
    %>
    <%
    	String name = (String)session.getAttribute("name");
    %>
    
    • 세션 종료

    • invalidate() 메소드를 호출하여 세션을 종료할 수 있다. 기존 세션 객체는 삭제된다
    • 세션 유효시간
    • dd(web.xml)에 유효시간을 설정하는 방법
    <session-config>
    	<session-timeout>10</session-timeout>
    </session-config>
    
    • setMaxInactiveInterval() 메소드를 활용한 유효시간 설정방법
    <%
    	session.setMaxInactiveInterval(10*60);
    %>
    



참고 자료


KG 아이티뱅크 강의 자료

처음해보는 JSP&Servlet 웹 프로그래밍