본문 바로가기
교육/Java&Spring

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 30

by Renechoi 2023. 2. 2.

 

쿠키는 로그인 용도로 적절하지는 않다.

세션으로 로그인 처리 할 때 db에서 가져와서 비교한다. 

 

파일 전송하기 

form태그와 input 태그를 사용 

기존의 form 태그는 query스트링만을 사용하기 위함이었지만 file 전송을 위해서는 

enctype이 필요. 

 

input type = file 

 

 

jsp - servlet

멤버 회원 가입 예제 

 

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head>
    <title>회원가입</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="script.js"></script>
    <script type="text/javascript">
        function idCheck(id) {
            frm = document.regFrm;
            if (id == "") {
                alert("아이디를 입력해 주세요.");
                frm.id.focus();
                return;
            }
            url = "idCheck.jsp?id=" + id;
            window.open(url, "IDCheck", "width=300,height=150");
        }

        function zipSearch() {
            url = "zipSearch.jsp?search=n";
            window.open(url, "ZipCodeSearch", "width=500,height=300,scrollbars=yes");
        }
    </script>
</head>
<body bgcolor="#FFFFCC" onLoad="regFrm.id.focus()">
<div align="center">
    <br/><br/>
    <form name="regFrm" method="post" action="memberProc.jsp">
        <table cellpadding="5">
            <tr>
                <td bgcolor="#FFFFCC">
                    <table border="1" cellspacing="0" cellpadding="2" width="600">
                        <tr bgcolor="#996600">
                            <td colspan="3"><font color="#FFFFFF"><b>회원 가입</b></font></td>
                        </tr>
                        <tr>
                            <td width="20%">아이디</td>
                            <td width="50%">
                                <input name="id" size="15">
                                <input type="button" value="ID중복확인" onClick="idCheck(this.form.id.value)">
                            </td>
                            <td width="30%">아이디를 적어 주세요.</td>
                        </tr>
                        <tr>
                            <td>패스워드</td>
                            <td><input type="password" name="pwd" size="15"></td>
                            <td>패스워드를 적어주세요.</td>
                        </tr>
                        <tr>
                            <td>패스워드 확인</td>
                            <td><input type="password" name="repwd" size="15"></td>
                            <td>패스워드를 확인합니다.</td>
                        </tr>
                        <tr>
                            <td>이름</td>
                            <td><input name="name" size="15">
                            </td>
                            <td>이름을 적어주세요.</td>
                        </tr>
                        <tr>
                            <td>성별</td>
                            <td>
                                남<input type="radio" name="gender" value="1" checked>
                                여<input type="radio" name="gender" value="2">
                            </td>
                            <td>성별을 선택 하세요.</td>
                        </tr>
                        <tr>
                            <td>생년월일</td>
                            <td><input name="birthday" size="6">
                                ex)830815
                            </td>
                            <td>생년월일를 적어 주세요.</td>
                        </tr>
                        <tr>
                            <td>Email</td>
                            <td><input name="email" size="30">
                            </td>
                            <td>이메일를 적어 주세요.</td>
                        </tr>
                        <tr>
                            <td>우편번호</td>
                            <td><input name="zipcode" size="5" readonly>
                                <input type="button" value="우편번호찾기" onClick="zipSearch()">
                            </td>
                            <td>우편번호를 검색하세요.</td>
                        </tr>
                        <tr>
                            <td>주소</td>
                            <td><input name="address" size="45"></td>
                            <td>주소를 적어 주세요.</td>
                        </tr>
                        <tr>
                            <td>취미</td>
                            <td>인터넷<input type="checkbox" name="hobby" value="인터넷">
                                여행<input type="checkbox" name="hobby" value="여행"> 게임<input
                                        type="checkbox" name="hobby" value="게임"> 영화<input
                                        type="checkbox" name="hobby" value="영화"> 운동<input
                                        type="checkbox" name="hobby" value="운동">
                            </td>
                            <td>취미를 선택 하세요.</td>
                        </tr>
                        <tr>
                            <td>직업</td>
                            <td><select name=job>
                                <option value="0" selected>선택하세요.
                                <option value="회사원">회사원
                                <option value="프로그래머">프로그래머
                                <option value="연구전문직">연구전문직
                                <option value="교수학생">교수학생
                                <option value="일반자영업">일반자영업
                                <option value="공무원">공무원
                                <option value="의료인">의료인
                                <option value="법조인">법조인
                                <option value="종교,언론,에술인">종교.언론/예술인
                                <option value="농,축,수산,광업인">농/축/수산/광업인
                                <option value="주부">주부
                                <option value="무직">무직
                                <option value="기타">기타
                            </select></td>
                            <td>직업을 선택 하세요.</td>
                        </tr>
                        <tr>
                            <td colspan="3" align="center">
                                <input type="button" value="회원가입" onclick="inputCheck()">
                                &nbsp; &nbsp;
                                <input type="reset" value="다시쓰기">
                                &nbsp; &nbsp;
                                <input type="button" value="로그인" onClick="javascript:location.href='login.jsp'">
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>

 

 

 

 

jsp - servlet

게시판 만들기 예제 

 

<%@ page contentType="text/html; charset=UTF-8" %>
<%@page import="ch15.BoardBean"%>
<%@page import="java.util.Vector"%>
<jsp:useBean id="bMgr" class="ch15.BoardMgr" />
<% 
     request.setCharacterEncoding("UTF-8");
     
    int totalRecord=0; //전체레코드수
     int numPerPage=10; // 페이지당 레코드 수 
     int pagePerBlock=15; //블럭당 페이지수 
     
     int totalPage=0; //전체 페이지 수
     int totalBlock=0;  //전체 블럭수 

     int nowPage=1; // 현재페이지
     int nowBlock=1;  //현재블럭
     
     int start=0; //디비의 select 시작번호
     int end=10; //시작번호로 부터 가져올 select 갯수
     
     int listSize=0; //현재 읽어온 게시물의 수

   String keyWord = "", keyField = "";
   Vector<BoardBean> vlist = null;
   if (request.getParameter("keyWord") != null) {
      keyWord = request.getParameter("keyWord");
      keyField = request.getParameter("keyField");
   }
   if (request.getParameter("reload") != null){
      if(request.getParameter("reload").equals("true")) {
         keyWord = "";
         keyField = "";
      }
   }
   
   if (request.getParameter("nowPage") != null) {
      nowPage = Integer.parseInt(request.getParameter("nowPage"));
   }
    start = (nowPage * numPerPage)-numPerPage;
    end = numPerPage;
    
   totalRecord = bMgr.getTotalCount(keyField, keyWord);
   totalPage = (int)Math.ceil((double)totalRecord / numPerPage);  //전체페이지수
   nowBlock = (int)Math.ceil((double)nowPage/pagePerBlock); //현재블럭 계산
     
   totalBlock = (int)Math.ceil((double)totalPage / pagePerBlock);  //전체블럭계산
%>
<html>
<head>
<title>JSP Board</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
   function list() {
      document.listFrm.action = "list.jsp";
      document.listFrm.submit();
   }
   
   function pageing(page) {
      document.readFrm.nowPage.value = page;
      document.readFrm.submit();
   }
   
   function block(value){
       document.readFrm.nowPage.value=<%=pagePerBlock%>*(value-1)+1;
       document.readFrm.submit();
   } 
   
   function read(num){
      document.readFrm.num.value=num;
      document.readFrm.action="read.jsp";
      document.readFrm.submit();
   }
   
   function check() {
        if (document.searchFrm.keyWord.value == "") {
         alert("검색어를 입력하세요.");
         document.searchFrm.keyWord.focus();
         return;
        }
     document.searchFrm.submit();
    }
</script>
</head>
<body bgcolor="#FFFFCC">
<div align="center">
   <br/>
   <h2>JSPBoard</h2>
   <br/>
   <table align="center" width="600">
         <tr>
            <td>Total : <%=totalRecord%>Articles(<font color="red">
            <%=nowPage%>/<%=totalPage%>Pages</font>)</td>
         </tr>
   </table>
   <table align="center" width="600" cellpadding="3">
      <tr>
         <td align="center" colspan="2">
         <%
              vlist = bMgr.getBoardList(keyField, keyWord, start, end);
              listSize = vlist.size();//브라우저 화면에 보여질 게시물 번호
              if (vlist.isEmpty()) {
               out.println("등록된 게시물이 없습니다.");
              } else {
         %>
              <table width="100%" cellpadding="2" cellspacing="0">
               <tr align="center" bgcolor="#D0D0D0" height="120%">
                  <td>번 호</td>
                  <td>제 목</td>
                  <td>이 름</td>
                  <td>날 짜</td>
                  <td>조회수</td>
               </tr>
               <%
                    for (int i = 0;i<numPerPage; i++) {
                     if (i == listSize) break;
                     BoardBean bean = vlist.get(i);
                     int num = bean.getNum();
                     String name = bean.getName();
                     String subject = bean.getSubject();
                     String regdate = bean.getRegdate();
                     int depth = bean.getDepth();
                     int count = bean.getCount();
               %>
               <tr>
                  <td align="center">
                     <!-- <%=totalRecord-((nowPage-1)*numPerPage)-i%> --><%=num%>
                  </td>
                  <td>
                  <%
                       if(depth>0){
                        for(int j=0;j<depth;j++){
                           out.println("&nbsp;&nbsp;");
                           }
                        }
                  %>
                    <a href="javascript:read('<%=num%>')"><%=subject%></a>
                  </td>
                  <td align="center"><%=name%></td>
                  <td align="center"><%=regdate%></td>
                  <td align="center"><%=count%></td>
                  </tr>
               <%  }//for%>
            </table> <%
         }//if
      %>
         </td>
      </tr>
      <tr>
         <td colspan="2"><br /><br /></td>
      </tr>
      <tr>
         <td>
         <!-- 페이징 및 블럭 처리 Start--> 
         <%
                  int pageStart = (nowBlock -1)*pagePerBlock + 1 ; //하단 페이지 시작번호
                  int pageEnd = ((pageStart + pagePerBlock ) <= totalPage) ?  (pageStart + pagePerBlock): totalPage+1; 
                  //하단 페이지 끝번호
                  if(totalPage !=0){
                if (nowBlock > 1) {%>
                   <a href="javascript:block('<%=nowBlock-1%>')">prev...</a><%}%>&nbsp; 
                   <%for ( ; pageStart < pageEnd; pageStart++){%>
                    <a href="javascript:pageing('<%=pageStart %>')"> 
                   <%if(pageStart==nowPage) {%><font color="blue"> <%}%>
                   [<%=pageStart %>] 
                   <%if(pageStart==nowPage) {%></font> <%}%></a> 
                   <%}//for%>&nbsp; 
                   <%if (totalBlock > nowBlock ) {%>
                   <a href="javascript:block('<%=nowBlock+1%>')">.....next</a>
                <%}%>&nbsp;  
                <%}%>
            <!-- 페이징 및 블럭 처리 End-->
            </td>
            <td align="right">
               <a href="post.jsp">[글쓰기]</a> 
               <a href="javascript:list()">[처음으로]</a>
            </td>
         </tr>
      </table>
   <hr width="600"/>
   <form  name="searchFrm"  method="get" action="list.jsp">
   <table width="600" cellpadding="4" cellspacing="0">
      <tr>
         <td align="center" valign="bottom">
                <select name="keyField" size="1" >
                <option value="name"> 이 름</option>
                <option value="subject"> 제 목</option>
                <option value="content"> 내 용</option>
                </select>
                <input size="16" name="keyWord">
                <input type="button"  value="찾기" onClick="javascript:check()">
                <input type="hidden" name="nowPage" value="1">
         </td>
      </tr>
   </table>
   </form>
   <form name="listFrm" method="post">
      <input type="hidden" name="reload" value="true"> 
      <input type="hidden" name="nowPage" value="1">
   </form>
   <form name="readFrm" method="get">
      <input type="hidden" name="num"> 
      <input type="hidden" name="nowPage" value="<%=nowPage%>"> 
      <input type="hidden" name="keyField" value="<%=keyField%>"> 
      <input type="hidden" name="keyWord" value="<%=keyWord%>">
   </form>
</div>
</body>
</html>
반응형