본문 바로가기

Java/jsp&servlet

[jsp] 회사 홈페이지 만들기 (4) - 캘린더-

https://blog.naver.com/PostView.naver?blogId=small_240&logNo=10110358120 님의 코드를 연습해 보았다.

 

이전 회사에서 휴가나 병가 등의 관리를 어플로 했었고 무지 편했던 기억이 있어서

사이트에 일정관리 기능을 넣고 싶었다.

 

 

 

 

 

<%@ page contentType="text/html;charset=euc-kr" pageEncoding="euc-kr" import="java.sql.*"%>
<%
request.setCharacterEncoding("euc-kr");
%>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
  
  Connection conn= null;
  PreparedStatement pstmt = null;
  
  String jdbc_driver= "oracle.jdbc.driver.OracleDriver";
  String jdbc_url= "jdbc:oracle:thin:@localhost:1521:ORCL";
  
  Class.forName("oracle.jdbc.driver.OracleDriver");
   
  conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "C##LINAJUNG", "1234");
  if (conn== null) {
   out.println("No connection is made!");
  }
  %>
 <%
  java.util.Calendar cal=java.util.Calendar.getInstance();
  int currentYear=cal.get(java.util.Calendar.YEAR); 
  int currentMonth=cal.get(java.util.Calendar.MONTH);
  int currentDate=cal.get(java.util.Calendar.DATE);
  String Year=request.getParameter("year");
  String Month=request.getParameter("month");
  int year, month;
  if(Year == null && Month == null){
  year=currentYear;
  month=currentMonth;
  }
  else {
   year=Integer.parseInt(Year);
   month=Integer.parseInt(Month);
   if(month<0) { month=11; year=year-1; }
   if(month>11) { month=0; year=year+1; }
  }
  %>

<html lang="ko">
<head>
<title>사내 행사 및 휴가일정</title>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<link rel="stylesheet" type="text/css" href="signin.css">
<link rel="stylesheet" type="text/css" href="main_c.css">
<link rel="stylesheet" type="text/css" href="calendar.css">
<script src="https://kit.fontawesome.com/cc268d4c6a.js" crossorigin="anonymous"></script>
</head>

<body>
<jsp:include page="nav_top.jsp"/>
<center><div style="font-family: GmarketSansBold; font-size:2.1em; font-weight:bolder; margin-top:4%; margin-bottom:3%; color:#6d6d6d">행사 및 휴가 현황</div></center>
	
	
	
  <table class="tbl_head" style="font-family:ChosunSg; font-size:1.5em; font-weight:bolder;color:white;">
   <tr>
    <td align=left width=200> <!-- 년 도-->
    <a href="calendar.jsp?year=<%out.print(year-1);%>&month=<%out.print(month);%>">◀</a>
    <% out.print(year); %>년
    <a href="calendar.jsp?year=<%out.print(year+1);%>&month=<%out.print(month);%>">▶</a>
    </td>
    <td align=center width=300> <!-- 월 -->
    <a href="calendar.jsp?year=<%out.print(year);%>&month=<%out.print(month-1);%>">◀</a>
    <% out.print(month+1); %>월
    <a href="calendar.jsp?year=<%out.print(year);%>&month=<%out.print(month+1);%>">▶</a>
    </td>
    <td align=right width=200><% out.print(currentYear + "-" + (currentMonth+1) + "-" + currentDate); %></td>
   </tr>
  </table>
  <table class="tbl_week" cellspacing=0 style="color:white; font-weight:bolder; font-size:1.2em"> <!-- 달력 부분 -->
   <tr>
    <td style="height:50px;">일요일</td> <!-- 일=1 -->
    <td style="height:50px;">월요일</td> <!-- 월=2 -->
    <td style="height:50px;">화요일</td> <!-- 화=3 -->
    <td style="height:50px;">수요일</td> <!-- 수=4 -->
    <td style="height:50px;">목요일</td> <!-- 목=5 -->
    <td style="height:50px;">금요일</td> <!-- 금=6 -->
    <td style="height:50px;">토요일</td> <!-- 토=7 -->
   </tr>
   </table>
   <table class="tbl_day" cellspacing=0 style="font-family:ChosunSg; text-align:center">
   <%
   cal.set(year, month, 1);
   int startDay=cal.get(java.util.Calendar.DAY_OF_WEEK);
   int end=cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH);
   int br=0; 
   for(int i=0; i<(startDay-1); i++) { 
    out.println("<td>&nbsp;</td>");
    br++;
    if((br%7)==0) {
     out.println("<br>");
    }
   }
   for(int i=1; i<=end; i++) {
    out.println("<td><div style='min-height:85px;'>&nbsp;" + i + "<br>");
      
      int memoyear, memomonth, memoday;
      try{
        
       String sql= "SELECT calendar.year, calendar.month, calendar.day, calendar.contents, calendar.cate, calendar.empno, member.empno, member.name FROM calendar,member WHERE calendar.empno = member.empno";
       pstmt= conn.prepareStatement(sql);
        
       ResultSet rs= pstmt.executeQuery();
       while (rs.next()) { 
        
        memoyear=rs.getInt("year");
        memomonth=rs.getInt("month");
        memoday=rs.getInt("day");
        if(year==memoyear && month+1==memomonth && i==memoday) {
         out.println("<div style='font-size:9pt'>&nbsp;⊙" + "<font style='color:red'>"+ rs.getString("cate") + "</font>" + "&nbsp;" + rs.getString("contents") + "&nbsp;" + "(" + rs.getString("name") + ")</div>" + "<br>"); 
        }
       }
       rs.close();
      }
      catch(Exception e) {
       System.out.println(e);
      };
    out.println("</td>");
    br++;
    if((br%7)==0 && i!=end) {
     out.println("</tr><tr>");
    }
   }
   while((br++)%7!=0)
    out.println("<td>&nbsp;</td>");
   %>
  </table>   
  <center><input type="button" value="상신서류 쓰러가기" onclick="location.href='holiday.jsp'"/></center>
</html>

 

db의 값을 읽어와 달력에 보여주고

상신서류 쓰러가기를 하면 db에 일정을 입력할 수 있다.

 

 

 

상신하기 페이지는 이런 모습이다. 

휴가기간과 세부사항은 직접 입력해 주어야 하고 나머지는 세션의 정보를 db로 보내 db의 정보를 가져온다.

최대한서류st로 만들어 보려고 했는데 역시나 아쉽,,,

 

 

db에 년 월 일 칼럼이 전부 다르게 해줬기 때문에 3일을 신청하면 3일 하나하나 입력해줘야 하는 귀찮음이 있다 (ㅜㅜ 역량 부족...)

 

 

<%@ page contentType="text/html;charset=euc-kr" pageEncoding="euc-kr" import="java.sql.*"%>
<%
request.setCharacterEncoding("euc-kr");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Donkey Base</title>
      <link rel="stylesheet" type="text/css" href="main_c.css">
      <link rel="stylesheet" type="text/css" href="holiday.css">
      <script src="https://kit.fontawesome.com/cc268d4c6a.js" crossorigin="anonymous"></script>
 </head>
 </head>
 <body>
 <body>
<jsp:include page="nav_top2.jsp"/>
  <center>
  <div class="title_h">휴가상신</div>
  <form id="form" name=memoAdd method=post action=holiday_action.jsp>
  <TABLE class="holiday_tbl" cellspacing=0 style="width:60%;">
     <TR>
        <TD id="tbl_title" style="height:70px; background:#fbfbee"> 유형 </TD>
        <TD> <select class="holiday_cate" name="memoType">
            <option value="연차">연차(유급)</option>
            <option value="월차">월차(유급)</option>
            <option value="반차">반차(유급)</option>
            <option value="출산">출산(유급)</option>
            <option value="돌봄">돌봄(무급)</option>
            <option value="약정">약정(무급)</option>
            <option value="보상">보상(무급)</option>
            <option value="보건">보건(무급)</option>
        </select> </TD>
        <TD style="background:#e7e7e4"> 부서 </TD>
        <TD> <% out.print(session.getAttribute("user_dept"));%> </TD>
     </TR>
     <TR>
        <TD style="height:70px; background:#e7e7e4"> 성명 </TD>
        <input type="hidden" name="memoName" value="<% out.print(session.getAttribute("user_empno"));%>"/>
        <TD> <% out.print(session.getAttribute("user_name"));%></TD>
        
        <TD style="background:#fbfbee"> 직급 </TD>
        <TD> <% out.print(session.getAttribute("user_position"));%> </TD>
     </TR>
     <TR>
     	<TD style="height:60px; background:#fbfbee"> 휴가기간 </TD>
		<TD colspan="3"> 
		<input type=text name=memoYear size=4>&nbsp;년&nbsp;
   		<input type=text name=memoMonth size=2>&nbsp;월&nbsp;
   		<input type=text name=memoDay size=2>&nbsp;일&nbsp; 
   		</TD>
     </TR>
     
     <TR>
        <TD style="background:#e7e7e4"> 세부사항 </TD>
        <TD colspan="3"> <input type=text name=memoContents style="width:90%; height:400px; border: white; margin:2%;"> </TD>
     </TR>
     <TR>
     
        <TD colspan="4" style="height:100px"> 
        <br><br><span>위와 같이 휴가를 신청합니다.</span><br><br><br>
        <div style="text-align:right; padding-right:30px">신청자 : <% out.print(session.getAttribute("user_name"));%>&nbsp;&nbsp;(인)</div><br><br>
        </TD>
     </TR>   
    </TABLE>
   <input type=submit value="상신">
  </form>
  <div class="bottom">
  <span>*휴가 상신 전 필독*</span><br>
  <span>본 상신 양식은 딱 하루만 등록이 됩니다! 여러날을 원하는 경우 일일히 등록해주셔야해요.</span><br>
  <span>ex. 2022년 3월22일~24일 휴가를 신청할 경우엔 22일, 23일,24일 각각 신청해야함. (세부사항에 표기)</span>
  </div>
</center>
</body>
</html>

 

 

<%@ page contentType="text/html;charset=euc-kr" pageEncoding="euc-kr" import="java.sql.*"%>
<%request.setCharacterEncoding("euc-kr");%>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.Statement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.sql.SQLException" %>
<%

	String getType = request.getParameter("memoType");
	String getContents = request.getParameter("memoContents");
	String getYear = request.getParameter("memoYear");
	String getMonth = request.getParameter("memoMonth");
	String getDay =  request.getParameter("memoDay");
	String getEmpno =  request.getParameter("memoName");

	Class.forName("oracle.jdbc.driver.OracleDriver");
  	Connection conn= null;
  	PreparedStatement pstmt = null;
  	
  	String jdbcDriver = "jdbc:oracle:thin:@localhost:1521:ORCL";
  	String dbUser = "C##LINAJUNG";
    String dbPass = "1234";
    
    conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
    
    if (conn == null) {
    	   out.println("No connection is made!");
    	  }
    
 	try{
    pstmt = conn.prepareStatement("INSERT INTO CALENDAR (CATE, CONTENTS, YEAR, MONTH, DAY, EMPNO) VALUES (?,?,?,?,?,?)");
    pstmt.setString(1, getType);
    pstmt.setString(2, getContents);
    pstmt.setString(3, getYear);
    pstmt.setString(4, getMonth);
    pstmt.setString(5, getDay);
    pstmt.setString(6, getEmpno);
    
    pstmt.executeUpdate();
 	}catch(SQLException e){}
    pstmt.close();
    conn.close();
   %>
<script type="text/javascript">
            alert('상신 되었습니다.');
            location.replace('calendar.jsp');
        	</script>

db에 입력되는 코드는 간단하다.