3월 9일 SpringSamples

2020. 6. 21. 20:16프론트엔드 & 백엔드 개발자 과정/spring

<< SpringSamples pom.xml >>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SpringSamples</groupId>
  <artifactId>SpringSamples</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
    <dependencies>
  	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <version>5.2.0.RELEASE</version>
	</dependency>
	
	<dependency>
	    <groupId>log4j</groupId>
	    <artifactId>log4j</artifactId>
	    <version>1.2.17</version>
	</dependency>
	
	<dependency>
	    <groupId>org.slf4j</groupId>
	    <artifactId>slf4j-simple</artifactId>
	    <version>1.7.25</version>	    
	</dependency>
	
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>servlet-api</artifactId>
		<version>2.5</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>javax.servlet.jsp</groupId>
		<artifactId>jsp-api</artifactId>
		<version>2.1</version>
		<scope>provided</scope>
	</dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>
		
	<!-- 런타임에 동적으로 자바 클래스의 프록시(대리(인))를 생성해주는 기능을 제공한다 -->
	<dependency>
	    <groupId>cglib</groupId>		
	    <artifactId>cglib</artifactId>
	    <version>3.3.0</version>
	</dependency>
	<dependency>
	    <groupId>commons-digester</groupId>
	    <artifactId>commons-digester</artifactId>
	    <version>1.8</version>
	</dependency>
	
	<dependency>
  		<groupId>commons-logging</groupId>
  		<artifactId>commons-logging</artifactId>
  		<version>1.1.3</version>
  	</dependency>
	
	<!-- Ajax 사용 설정[jackson] -->
  	<dependency>
  		<groupId>org.codehaus.jackson</groupId>	
  		<artifactId>jackson-core-asl</artifactId>
  		<version>1.9.12</version>
  	</dependency>
  	<dependency>
  		<groupId>org.codehaus.jackson</groupId>
  		<artifactId>jackson-mapper-asl</artifactId>
  		<version>1.9.12</version>
  	</dependency>
  	
  	<!-- 의존성을 추가 --> 
  	<dependency>
  		<groupId>javax.inject</groupId>
  		<artifactId>javax.inject</artifactId>
  		<version>1</version>
  	</dependency>
  	
  	<!-- JCL(자카르타 커먼스 로깅)을 사용 --> 	
  	<dependency>
  		<groupId>org.slf4j</groupId>
  		<artifactId>jcl-over-slf4j</artifactId>
  		<version>1.7.30</version>
  	</dependency>

	<!-- XML 파싱 -->
  	<dependency>
	    <groupId>jdom</groupId>
	    <artifactId>jdom</artifactId>
	    <version>1.0</version>
	</dependency>
	
	<!-- 마이 바티스 스프링 사용시 -->
  	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>2.0.3</version>
	</dependency>
	
  	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.5.3</version>
	</dependency>
	
	<!-- 마이 SQL 사용시 -->	
  	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>8.0.18</version>
	</dependency>
	
	<!-- XML 파싱 -->
  	<dependency>
	    <groupId>org.jdom</groupId>
	    <artifactId>jdom</artifactId>
	    <version>2.0.1</version>
	</dependency>

	<!-- SLF4J API를 사용하도록 -->
  	<dependency>
  		<groupId>org.slf4j</groupId>
  		<artifactId>slf4j-api</artifactId>
  		<version>1.7.30</version>
  	</dependency>

	<!-- log4j -->
  	<!-- <dependency>
  		<groupId>ant</groupId>
  		<artifactId>ant-apache-log4j</artifactId>
  		<version>1.9.4</version>
  	</dependency> -->
  	
  	<dependency>
	    <groupId>commons-dbcp</groupId>
	    <artifactId>commons-dbcp</artifactId>
	    <version>1.4</version>
	</dependency>
  	
  	<!-- Map을 Bean객체로 바꾸어주는 클래스 -->
  	<dependency>
  		<groupId>commons-beanutils</groupId>
  		<artifactId>commons-beanutils-core</artifactId>
  		<version>1.8.2</version>
  	</dependency>
  	
  	<!-- DBCP : DB Connection Poll 사용 --> 
  	<dependency>
  		<groupId>com.kenai.nbpwr</groupId>
  		<artifactId>org-apache-commons-dbcp</artifactId>
  		<version>1.2.2-201002241055</version>
  		<type>nbm</type>
  	</dependency>
  	
  	<!-- IO 기능 개발을 지원하는 유틸리티 라이브러리  다운안됨 -->
  	<dependency>
  		<groupId>org.apache.commons</groupId>
  		<artifactId>commons-io</artifactId>
  		<version>1.3.2</version>
  	</dependency>
  	
  	<dependency>
  		<groupId>org.apache.commons</groupId>
  		<artifactId>commons-lang3</artifactId>
  		<version>3.9</version>
  	</dependency>
  	
 	<dependency>
  		<groupId>org.apache.commons</groupId>
  		<artifactId>commons-pool2</artifactId>
  		<version>2.8.0</version>
  	</dependency>
  	<dependency>
  		<groupId>org.slf4j</groupId>
  		<artifactId>slf4j-log4j12</artifactId>
  		<version>1.7.30</version>
  	</dependency>
  	
  	<!-- spring -->
	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-aop</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-beans</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-context</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>  	
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-context-support</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>  	
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-core</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-expression</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-jdbc</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-orm</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-test</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-tx</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-web</artifactId>
  		<version>5.2.0.RELEASE</version>
  	</dependency>
  	
  	<!-- Java용 json 라이브러리(XML/YAM/CSV) data-processing 툴 -->
  	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-core</artifactId>
	    <version>2.10.1</version>
	</dependency>
	
	<dependency>
	    <groupId>com.fasterxml.jackson.core</groupId>
	    <artifactId>jackson-databind</artifactId>
	    <version>2.10.1</version>
	</dependency>
		
	<dependency>
	    <groupId>com.oracle</groupId>
	    <artifactId>ojdbc6</artifactId>
	    <version>12.1.0.2</version>
	</dependency>
  
    <dependency>
	    <groupId>org.aspectj</groupId>
	    <artifactId>aspectjweaver</artifactId>
	    <version>1.9.4</version>
	</dependency>
	
	<dependency>
	    <groupId>org.aspectj</groupId>
	    <artifactId>aspectjrt</artifactId>
	    <version>1.9.4</version>
	</dependency>
	
	<!-- tiles -->
	<dependency>
	    <groupId>org.apache.tiles</groupId>
	    <artifactId>tiles-api</artifactId>
	    <version>3.0.7</version>
	</dependency>
	
	<dependency>
	    <groupId>org.apache.tiles</groupId>
	    <artifactId>tiles-core</artifactId>
	    <version>3.0.7</version>
	</dependency>
	
	<dependency>
	    <groupId>org.apache.tiles</groupId>
	    <artifactId>tiles-jsp</artifactId>
	    <version>3.0.7</version>
	</dependency>
	
	<dependency>
	    <groupId>org.apache.tiles</groupId>
	    <artifactId>tiles-servlet</artifactId>
	    <version>3.0.7</version>
	</dependency>
	
	<dependency>
	    <groupId>org.apache.tiles</groupId>
	    <artifactId>tiles-template</artifactId>
	    <version>3.0.7</version>
	</dependency>
	
	<dependency>
  		<groupId>org.apache.tiles</groupId>
  		<artifactId>tiles-autotag-core-runtime</artifactId>
  		<version>1.1.0</version>
  	</dependency>

	<dependency>
  		<groupId>org.apache.tiles</groupId>
  		<artifactId>tiles-request-api</artifactId>
  		<version>1.0.6</version>
  	</dependency>
  	
  	<dependency>
  		<groupId>org.apache.tiles</groupId>
  		<artifactId>tiles-request-jsp</artifactId>
  		<version>1.0.6</version>
  	</dependency>
  	
  	<dependency>
  		<groupId>org.apache.tiles</groupId>
  		<artifactId>tiles-request-servlet</artifactId>
  		<version>1.0.6</version>
  	</dependency>
  	
  </dependencies>

<repositories>
  	<repository>
		<id>codelds</id>		<!-- ojdbc6 와 함께 추가 -->
		<url>https://code.lds.org/nexus/content/groups/main-repo</url>
	</repository>
</repositories> 
    
</project>

< index.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
response.sendRedirect("login.do");    
%>

< web.xml >

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>testSample</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<servlet-class>
  		org.springframework.web.servlet.DispatcherServlet
  	</servlet-class>
  	
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>
  			/WEB-INF/spring/servlet-context.xml
  			/WEB-INF/spring/aop-context.xml
  		</param-value>  		
  	</init-param>
  	
  	<load-on-startup>1</load-on-startup>
  	
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>  	
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>
  		/WEB-INF/spring/applicationContext.xml
  	</param-value>
  </context-param>
  
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>  
  
  <!-- 한글 설정 -->
  <filter>
  	<filter-name>encodingFilter</filter-name>
  	<filter-class>
  		org.springframework.web.filter.CharacterEncodingFilter
  	</filter-class>
  	
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  	
  	<init-param>
  		<param-name>forceEncoding</param-name>
  		<param-value>true</param-value>
  	</init-param>
  	
  </filter>
  
  <filter-mapping>
  	<filter-name>encodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
</web-app>

< layouts-tiles.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- 화면 배치용 jsp -->

<table border="1" width="100%" height="100%" bordercolor="Gray">

<tr align="center">		<!-- header -->
	<td height="10%" colspan="2">
		<tiles:insertAttribute name="header"/>
	</td>
</tr>

<tr>	<!-- menu main -->
	<td width="30%" align="left" valign="top">
		<tiles:insertAttribute name="menu"/>
	</td>
	
	<td>
		<tiles:insertAttribute name="content"/>
	</td>
</tr>

<tr align="center">		<!-- footer -->
	<td height="10%" colspan="2">
		<tiles:insertAttribute name="footer"/>
	</td>
</tr>

</table>



</body>
</html>

< layouts.xml >

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>

<definition name="login.tiles" template="/WEB-INF/views/login/login.jsp">
</definition>

<definition name="regi.tiles" template="/WEB-INF/views/login/regi.jsp">
</definition>


</tiles-definitions>

< regi.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<fmt:requestEncoding value="utf-8"/>      
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" type="text/css" />  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>  
<script src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" type="text/css" href="css/style.css"/>

<!-- cookie -->
<script src="http://lab.alexcican.com/set_cookies/cookie.js" type="text/javascript" ></script>

<style type="text/css">
#login_wrap {
	margin:10px;
}
#login_wrap th {
	font-weight:bold;
}
#main_wrap { 
	width:800px; 
	margin-left:auto; 
	margin-right:auto; padding:0px; 
}			
#content_wrap { 
	width: 100%; 
	height: 500px; 
	background-image:url("image/backa.jpg"); 
	background-repeat:no-repeat; 
	background-position:top center;  
}
			
.login_title_warp {
	width:500px; 
	color:#FFFFFF; 
	text-align:center; 
	background-color:#3e5fba; 
	border:solid 1px #EFEFEF; 
	font-weight:bold; 
	height:60px;
}

/* table셋팅 */
.content_table { width:98%; border-bottom:1px solid #EFEFEF; border-right:1px solid #EFEFEF; border-collapse:collapse; margin-left:auto; margin-right:auto;  clear:both; }
.content_table td, .content_table th { text-align:center; border-top:1px solid #EFEFEF; border-left:1px solid #EFEFEF; padding:0.3em; }
.content_table th { background-color:#4D6BB3; color:#FFFFFF; line-height: 1.7em; font-weight:normal;}
.content_table td { padding-left:5px; text-align:left; line-height: 1.7em; }
.content_table td.contents { width:100%; height:400px; overflow:auto; }
.content_table th, .content_table td { vertical-align:middle; }

.content_table select { height:19px; border:#CCCCCC solid 1px; vertical-align:middle; line-height: 1.8em; padding-left:0px; }
.content_table select option { margin-right:10px; }

</style>

</head>
<body>

<div id="main_wrap">
	<div id="middle_wrap">
		<div id="content_wrap">
			
			<div style="width: 502px; height: 166px; margin-left: auto; margin-right: auto;
						position: relative; top: 100px;">
								
			<div class="login_title_warp">
				<div style="margin-top: 15px">
					<h2>회원가입</h2>
				</div>
			</div>
				
			<div id="login_wrap">
				<form action="" method="post" id="_frmForm" name="frmForm">
				
				<table class="content_table" style="width: 75%">
				<colgroup>
					<col style="width:30%">
					<col style="width:70%">
				</colgroup>
				
				<tr>
					<th>아이디 체크</th>
					<td>
						<input type="text" name="sid" id="_id" size="30">
						<a href="#none" id="_btnGetId" title="id체크">
							<img alt="" src="./image/idcheck.png">
						</a>
						<div id="_rgetid"></div>
					</td>
				</tr>
				
				<tr>
					<th>아이디</th>
					<td>
						<input type="text" name="id" id="_userid" size="30" readonly="readonly">
					</td>
				</tr>
				
				<tr>
					<th>패스워드</th>
					<td>
						<input type="text" name="pwd" id="_pwd" size="30">
					</td>
				</tr>
				
				<tr>
					<th>이름</th>
					<td>
						<input type="text" name="name" id="_name" size="30">
					</td>
				</tr>
				
				<tr>
					<th>이메일</th>
					<td>
						<input type="text" name="email" id="_email" size="30">
					</td>
				</tr>
				
				<tr>
					<td colspan="2" style="height: 50px; text-align: center;">
					
					<a href="#none" id="_btnRegi" title="회원가입">
						<img alt="" src="./image/regi.jpg">
					</a>
					
					<a href="#none" id="_btnLogin" title="로그인">
						<img alt="" src="./image/login_btn.jpg">
					</a>
					
					</td>
				</tr>
				
				</table>
				
				</form>
			
			</div>
				
				
				
			</div>		
		</div>	
	</div>
</div>

</body>
</html>

< login.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<fmt:requestEncoding value="utf-8"/>      
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" type="text/css" />  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>  
<script src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" type="text/css" href="css/style.css"/>

<!-- cookie -->
<script src="http://lab.alexcican.com/set_cookies/cookie.js" type="text/javascript" ></script>

<style type="text/css">
#login_wrap {
	margin:10px;
}
#login_wrap th {
	font-weight:bold;
}
#main_wrap { 
	width:800px; 
	margin-left:auto; 
	margin-right:auto; padding:0px; 
}			
#content_wrap { 
	width: 100%; 
	height: 500px; 
	background-image:url("image/backa.jpg"); 
	background-repeat:no-repeat; 
	background-position:top center;  
}
			
.login_title_warp {
	width:500px; 
	color:#FFFFFF; 
	text-align:center; 
	background-color:#3e5fba; 
	border:solid 1px #EFEFEF; 
	font-weight:bold; 
	height:60px;
}

/* table셋팅 */
.content_table { width:98%; border-bottom:1px solid #EFEFEF; border-right:1px solid #EFEFEF; border-collapse:collapse; margin-left:auto; margin-right:auto;  clear:both; }
.content_table td, .content_table th { text-align:center; border-top:1px solid #EFEFEF; border-left:1px solid #EFEFEF; padding:0.3em; }
.content_table th { background-color:#4D6BB3; color:#FFFFFF; line-height: 1.7em; font-weight:normal;}
.content_table td { padding-left:5px; text-align:left; line-height: 1.7em; }
.content_table td.contents { width:100%; height:400px; overflow:auto; }
.content_table th, .content_table td { vertical-align:middle; }

.content_table select { height:19px; border:#CCCCCC solid 1px; vertical-align:middle; line-height: 1.8em; padding-left:0px; }
.content_table select option { margin-right:10px; }

</style>

</head>
<body>

<div id="main_wrap">
	<div id="middle_wrap">
		<div id="content_wrap">
			
			<div style="width: 502px; height: 166px; margin-left: auto; margin-right: auto;
						position: relative; top: 100px;">
								
			<div class="login_title_warp">
				<div style="margin-top: 15px">
					<h2>My Home Page</h2>
				</div>
			</div>
				
			<div id="login_wrap">
				<form action="loginAf.do" name="frmForm" id="_frmForm" method="post">
				
					<table class="content_table" style="width: 75%">
					<cogroup>
						<col style="width:30%">
						<col style="width:70%">
					</cogroup>
					
					<tbody>
					<tr>
						<th style="background: #eeeeee; color: #3e5fba">아이디</th>	<!-- ↓  javascript에서 msg 쓰려고  -->
						<td>&nbsp;<input type="text" id="_userid" name="id" data-msg="ID를 "
									size="20px" title="아이디" style="border: 1px solid #dddddd">
							<input type="checkbox" id="chk_save_id">ID 저장
						</td>
					</tr>
					
					<tr>
						<th style="background: #eeeeee; color: #3e5fba">패스워드</th>
						<td>&nbsp;<input type="password" id="_pwd" name="pwd" data-msg="패스워드를 "
									size="20px" title="패스워드" style="border: 1px solid #dddddd">							
						</td>
					</tr>
					
					<tr>
						<td colspan="2" style="height:50px; text-align:center;">
						<span>
							<a href="#nome" id="_btnLogin" title="로그인">
								<img alt="" src="./image/login_btn.jpg">
							</a>
						
							<a href="#none" id="_btnRegi" title="회원가입">
								<img alt="" src="./image/regi.jpg">
							</a>
						</span>
						</td>
					</tr>
					
					</tbody>
					
					</table>
				
				</form>
			
			</div>	
				
				
			</div>		
		</div>	
	</div>
</div>

<script type="text/javascript">

$("#_btnLogin").click(function(){
//	alert("Login 클릭");
	if($("#_userid").val().trim() == ""){
		alert("id를 입력해 주십시오");
		$("#_userid").focus();
	}
	else if($("#_pwd").val().trim() == ""){
		alert("Password를 입력해 주십시오");
		$("#_pwd").focus();
	}
	else{
		$("#_frmForm").attr({ "action":"loginAf.do", "target":"_self" }).submit();
	}
});

var user_id = $.cookie("user_id");
if(user_id != null){
	alert("쿠키 있음");
	$("#_userid").val( user_id );
	$("#chk_save_id").attr("checked", "checked");
}

$("#chk_save_id").click(function(){
	if( $("#chk_save_id").is(":checked") ){ // 체크되었을 때
		if($("#_userid").val().trim() == ""){
			alert("id를 입력해 주십시오");
			$("#chk_save_id").prop("checked", false);
		}else{
			$.cookie("user_id", $("#_userid").val(), {expires:356, path:'/'});
		}
	}
	else{
		$.removeCookie("user_id", {path:'/'});
	}
});

$("#_btnRegi").click(function(){
	location.href = "regi.do";
});


</script>

</body>
</html>

< aop-context.xml >

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

	<!-- service로 끝나는 모든 bean을 기본 트렌젝션 설정을 활성화 -->
	<!-- <tx:annotation-driven transaction-manager="transactionManager"/> -->
	
	<!-- AOP -->
	<aop:aspectj-autoproxy/>
	
	<!-- AOP 해당 클래스를 생성 -->
	<bean id="testAspect" class="bit.com.a.aop.LogAop"/>

</beans>

< applicationContext.xml >

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- Database 설정 -->
	
	<!-- db 설정 파일의 위치 -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:properties/jdbc.properties</value>
			</list>
		</property>
	</bean>
	
	<!-- DBMS -->
	<!-- 
	BasicDataSource dataSource = new BasicDataSource();
	driverClassName = jdbc.driverClassName;
	
	 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driverClassName}"/>
		<property name="url" value="${jdbc.url}"/>
		<property name="username" value="${jdbc.username}"/>
		<property name="password" value="${jdbc.password}"/>
		<property name="initialSize" value="${jdbc.initialSize}"/>
		<property name="maxActive" value="${jdbc.maxActive}"/>
		<property name="minIdle" value="${jdbc.initialSize}"/>
		<property name="maxWait" value="3000"/>
		<property name="poolPreparedStatements" value="true"/>
		<property name="maxOpenPreparedStatements" value="50"/>
	</bean>
	
	<!-- mybatis setting -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<property name="mapperLocations" value="classpath:sqls/*.xml"/>
	</bean>
	
	<!-- sqlSession 취득 -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory"/>
		<constructor-arg index="1" value="SIMPLE"/>	<!-- SIMPLE/BATCH -->
	</bean>
	
	<!-- jdbc -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>

</beans>

< servlet-context.xml >

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- spring MVC annotation(주석문, 지시문)을 사용하기 위한 설정 -->
	<context:annotation-config/>
	
	<!-- viewResolver 설정(사용자의 view의 위치, 확장자명) -->
	<!-- 
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean> -->
	
	 
	  <!-- tiles --> 
	 <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
	 	<property name="definitions">
	 		<list>
	 			<value>/WEB-INF/views/layouts.xml</value>
	 		</list>	 	
	 	</property>	 
	 </bean>
	 
	 <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
	 	<property name="requestContextAttribute" value="requestContext"/>
	 	<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
	 </bean>
	
	<!-- java 공통 패키지 -->
	<context:component-scan base-package="bit.com.a"/>
	
	<!-- ajax 주석문 사용을 허가 -->
	<mvc:annotation-driven/>
	
	<!-- spring에서 처리할 수 없는 요청은 tomcat에 위임 -->
	<mvc:default-servlet-handler/>
	
</beans>

< button.css >

@CHARSET "UTF-8";

/* Button Reset */
.button,
.button a,
.button button,
.button input { position:relative; margin:0; padding:0; border:0; display:inline-block; text-decoration:none !important; white-space:nowrap; background:url("../image/buttonWhite.gif") no-repeat; overflow:visible; color:#333;}
.button { height:23px; padding:0; vertical-align:middle; margin-right:2px; background-position:left top;}
.button a,
.button button,
.button input{ left:2px; vertical-align:top; cursor:pointer;}

/* Button Size */
.button.large { height:29px; background-position:left -30px; }
.button.xLarge { height:35px; background-position:left -65px; }
.button.small { height:18px; background-position:left -107px; }
.button a,
.button button,
.button input { height:23px; padding:0 10px 0 8px; font-size:12px; line-height:24px; background-position:right top;}
.button.large a,
.button.large button,
.button.large input { height:30px; padding:0 10px 0 8px; font-size:16px; line-height:29px; background-position:right -30px;}
.button.xLarge a,
.button.xLarge button,
.button.xLarge input { height:35px; padding:0 10px 0 8px; font-size:20px; line-height:35px; background-position:right -65px;}
.button.small a,
.button.small button,
.button.small input { height:18px; padding:0 6px 0 4px; font-size:11px; line-height:18px; background-position:right -107px;}

/* Button Text Color */
.button *:hover,
.button *:active,
.button *:focus{ color:#690;}
.button.green,
.button.green a,
.button.green button,
.button.green input { background-image:url("../image/buttonGreen.gif"); color:#fff;}
.button.green *:hover,
.button.green *:active,
.button.green *:focus{ color:#ff0;}
.button.black,
.button.black a,
.button.black button,
.button.black input { background-image:url("../image/buttonBlack.gif"); color:#fff;}
.button.black *:hover,
.button.black *:active,
.button.black *:focus{ color:#ff0;}
.button.red,
.button.red a,
.button.red button,
.button.red input {  background-image:url("../image/buttonRed.gif"); color:#fff;}
.button.red *:hover,
.button.red *:active,
.button.red *:focus{ color:#ff0;}
.button.blue,
.button.blue a,
.button.blue button,
.button.blue input { position:center; background-image:url("../image/buttonBlue.gif"); color:#fff;}
.button.blue *:hover,
.button.blue *:active,
.button.blue *:focus{ color:#ff0;}

/* Button Text Strong */
.button.strong * { font-weight:bold !important;}

< initial.css >

@CHARSET "UTF-8";

/* http://meyerweb.com/eric/tools/css/reset/ 
   v2.0 | 20110126
   License: none (public domain)
*/

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
	margin: 0;
	padding: 0;
	border: 0;
	font-size: 100%;
	font: inherit;
	vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
	display: block;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
	content: '';
	content: none;
}
table {
	border-collapse: collapse;
	border-spacing: 0;
}

< main_style.css >

@CHARSET "utf-8";
	#header {
    background-color:black;
    color:white;
    text-align:center;
    padding:5px;
}
#nav {
    line-height:30px;
     background-color:#eeeeee;
    height:500px;
    width:200px;
     float:left;
     padding:5px; 
}
#section {
    width:600px;
    float:left;
    padding:10px; 
}
#footer {
    background-color:black;
     color:white;
    clear:both;
    text-align:center;
     padding:5px; 
}
.msgig1 {
     color:blue;
    text-align:center;
}
.divnav{
    border: 2px solid #a1a1a1;
    padding: 10px 10px; 
    background: #dddddd;
    width: 200px;
    height:100px;
    border-radius: 25px;
    text-align:left;
}
#titleshow{
	background: #ddccaa;
}
 #tbs table td
  {
 border:1px solid black;
 border-collapse:collapse;
 }
 #tbs2 table td
  {
 border:1px solid black;
 border-collapse:collapse;
 } 

< popup.css >

@CHARSET "UTF-8";

body {font-family:"돋움", dotum; font-size:0.75em; width:100%; padding:0; margin:0; }
caption {display:none;}

a { text-decoration:none; color:#445F9D; }

label { padding:0; margin:0; position:relative; top:1px; left:0px; }
input, select {  vertical-align:middle; font-size:1em; font-family:"돋움", dotum; }	
input { border:solid 1px #D5D5D5; padding:0.2em; }
input[type="checkbox"], input[type="radio"] { border:0; padding:0; margin:0; }

< style.css >

@CHARSET "UTF-8";

	body {font-family:"돋움", dotum; font-size:0.75em; }

	a { text-decoration:none; color:#445F9D; }
	
	label { padding:0; margin:0; position:relative; top:1px; left:0px; }
	input, select {  vertical-align:middle; font-size:1em; font-family:"돋움", dotum; }	
	input { border:solid 1px #D5D5D5; padding:0.2em; }
	input[type="checkbox"], input[type="radio"] { border:0; padding:0; margin:0; }
	
	#body_wrap { width:1150px; margin-left:auto; margin-right:auto; padding:0px;}	
	#header_wrap { width:100%; height:90px; margin:0px; border:solid 0px navy; }
	#middle_wrap { display:inline-block; clear:both; width:100%; padding:0px; margin:0px; text-align:center; border:solid 1px #EFEFEF;}
	#footer_wrap { width:100%; border:solid 0px navy; clear:both; background-color:#f1eff0; text-align:center; }
			
	#top_menu_wrap { width:100%; }
	#sidebar_wrap { float:left; width:150px; margin:0px; padding:3px; }
	#content_wrap { float:left; width:980px; margin-right:0px; border-left:solid 1px #EFEFEF; padding: 5px; }

	#buttons_wrap { text-align:center; margin-top:10px; margin-left:auto; margin-right:auto; margin-bottom:5px; width:98%; clear:both; padding:5px; }
	#paging_wrap { width:98%; border:0; margin-left:auto; margin-right:auto; margin-top:10px; }
		
	#content_title_wrap { height:27px; width:100%; background-color:#EFEFEF; text-align:left; font-weight:normal; line-height:2.5em; _line-height:2.7em; margin-bottom:10px; }
	#content_title_wrap div.title { padding-left:25px; background-image:url("../image/ico_sub_sb.gif"); background-repeat:no-repeat; background-position:10px 9px; font-weight:bold; }
	
	.menu_table { width:100%; padding:0; margin:0; color:#FFFFFF; text-align:left; }
	.menu_table ul { list-style:none; }	
	.menu_table li { margin-bottom: 2px;}
	.menu_table li.title { padding-left:5px; font-weight:bold; text-align:center; height:25px; background-color:#EFEFEF; padding-top:2px; color:#000000; border:1px solid #f1eff0; line-height:2em;}
	.menu_table li.subtitle { border:solid 1px #919191; background-color:#4D6BB3; padding-left: 5px;  padding-top:0.2em; line-height: 1.8em; text-align:left; }
	.menu_table li.menu_item { line-height: 1.8em; }
	.menu_table li.menu_item a { display:block; border:solid 1px #77B5FF; background-color:#d1e7fc; padding-left: 15px; padding-top:0.2em; text-decoration:none; color:#000000;}
	.menu_table li.menu_item a:hover { background-image:url("../image/arrow.gif"); background-repeat:no-repeat; background-position:5px 7px; background-color:#FFFFFF; }
		
	#_top_menu { width:100%; }	
	#_top_menu ul.navi { margin:0; padding:0; list-style:none; background-color:#4D6BB3; padding:1px;}
	#_top_menu ul.navi li { display:inline; color:#FFFFFF; font-weight:bold; }
	#_top_menu ul.navi li a { display:inline-block; color:#FFFFFF; padding-top:10px; padding-bottom:9px; padding-left:20px; padding-right:20px; margin-bottom:1px;}
	#_top_menu ul.navi li a:hover { background-color:#97CBFF; color:#000000; }

< table.css >

@CHARSET "UTF-8";
		
	.list_table { width:98%; border-bottom:1px solid #EFEFEF; border-right:1px solid #EFEFEF; border-collapse:collapse; margin-left:auto; margin-right:auto; clear:both; }
	.list_table2 { width:98%; border-bottom:1px solid #EFEFEF; border-right:1px solid #EFEFEF; border-collapse:collapse; margin-left:auto; margin-right:auto; clear:both; vertical-align:middle; text-align: center}
	.list_table td,.list_table th { text-align:center; border-top:1px solid #EFEFEF; border-left:1px solid #EFEFEF; padding:0.3em; }
	.list_table th { background-color:#4D6BB3; color:#FFFFFF; line-height:1.7em; font-weight:normal;}
	.list_table tr td { padding-top:0.5em; padding-bottom:0.5em;}	
	.list_table td.title { padding-left:0.5em; text-align:left; }
	.list_table td.title a:hover { text-decoration:underline; }
	.list_table th, .list_table td { vertical-align:middle; }	

	.list_table select { height:19px; border:#CCCCCC solid 1px; vertical-align:middle; line-height: 1.8em; padding-left:0px; }
	.list_table select option { margin-right:10px; }
	.list_table .selected_row { border:solid 0px #EFEFEF; }
	.list_table .sele { padding:0; margin:0; }
			
	.content_table { width:98%; border-bottom:1px solid #EFEFEF; border-right:1px solid #EFEFEF; border-collapse:collapse; margin-left:auto; margin-right:auto;  clear:both; }
	.content_table td, .content_table th { text-align:center; border-top:1px solid #EFEFEF; border-left:1px solid #EFEFEF; padding:0.3em; }
	.content_table th { background-color:#4D6BB3; color:#FFFFFF; line-height: 1.7em; font-weight:normal;}
	.content_table td { padding-left:5px; text-align:left; line-height: 1.7em; }
	.content_table td.contents { width:100%; height:400px; overflow:auto; }
	
	.content_table th, .content_table td { vertical-align:middle; }

	.content_table select { height:19px; border:#CCCCCC solid 1px; vertical-align:middle; line-height: 1.8em; padding-left:0px; }
	.content_table select option { margin-right:10px; }
			
	#files_wrap { width:99.5%; margin-left:auto; margin-right:auto; }
	#files_wrap #_file_list_item { list-style-type:disc; }
	
	.box_border { width:98%; border-width:1px; border-style:solid; border-color:#EFEFEF; background-color:#FFFFFF; text-align:right; padding:2px; margin-top:5px; margin-bottom:10px; margin-left:auto; margin-right:auto;}
	.search_box { width:98%; border-width:1px; border-style:solid; border-color:#EFEFEF; background-color:#FFFFFF; padding:2px; padding-top:7px; padding-bottom:7px; margin-top:5px; margin-bottom:10px; margin-left:auto; margin-right:auto; margin-top:5px; margin-bottom:10px; text-align:center; line-height:2.1em;}

	.items_title { text-align:left; margin-left:auto; margin-right:auto; padding-left:28px; padding-top:3px; background-image:url("../image/shape_square.png"); background-repeat:no-repeat; background-position:10px 0px; margin-top:25px; margin-bottom:1px; font-size:12px; font-weight:bold; }
	.items_description { width:98%; border-width:1px; border-style: solid; border-color:#EFEFEF; background-color:#FFFFFF; text-align:left; line-height:2.5; padding:2px; margin:0px;}

	.checkbox_lable {
		vertical-align:2px; margin-left:5px; margin-right:5px;
		_vertical-align:4px; _margin-left:0px; _margin-right:2px;   /* IE6 Hack */
	}

	.go_view { cursor:pointer; text-align:left; padding-left:3px;}
	
	.calendar_icon { cursor:pointer; border:0; width:22px; vertical-align:-6px; *vertical-align:-6px; }

< tables.css >

/* ��������: 2008.01.03 */
/* 
�系�Խ��� ���� CSS �Դϴ�. ������ �ܿ� ������ ���մϴ�.
*/


/* base elements */
body, td	{font-size:12px; color:#333333;}
body		{margin:0px; text-align:left;}
form		{margin:0px;}
td			{padding:0px;}
img			{border:none;}
p			{margin-bottom:0px;}

.dm	{font-family:'����';}
.g	{font-family:'����';}
.bt	{font-family:'����';}
.b	{font-weight:bold;}
.u	{text-decoration:underline;}

a			{text-decoration:none; color:#333333;}
a:hover		{text-decoration:underline; color:#333333;}
a:visited	{}

/* input elements */
input		{font-size:12px;}
textarea	{font-size:12px;}
input.txt	{padding-top:3px; height:18px;}
select		{font-size:12px; height:20px;}

/* size */
.f4		{font-size:4px;}
.f8		{font-size:8px;}
.f9		{font-size:9px;}
.f10	{font-size:10px;}
.f11	{font-size:11px;}
.f12	{font-size:12px;}
.f13	{font-size:13px;}
.f14	{font-size:14px;}
.f15	{font-size:15px;}
.f16	{font-size:16px;}
.f17	{font-size:17px;}
.f18	{font-size:18px;}
.f19	{font-size:19px;}
.f20	{font-size:20px;}
.f21	{font-size:21px;}
.f22	{font-size:22px;}
.f23	{font-size:23px;}
.f24	{font-size:24px;}
.f25	{font-size:25px;}

/* table td */
.td15	{padding:1 0 0 0px;}
.td16	{padding:2 0 0 0px;}
.td17	{padding:3 0 0 0px;} /* Ȧ�����̰� �� ���س���*/
.td18	{padding:4 0 0 0px;} /* ¦�����̴� �ٷξ� ���س��̿��� top 1 �߰� */
.td19	{padding:4 0 1 0px;}
.td20	{padding:5 0 1 0px;}
.td21	{padding:5 0 2 0px;}
.td22	{padding:6 0 2 0px;}
.td23	{padding:6 0 3 0px;}
.td24	{padding:7 0 3 0px;}
.td25	{padding:7 0 4 0px;}
.td26	{padding:8 0 4 0px;}
.td27	{padding:8 0 5 0px;}
.td28	{padding:9 0 5 0px;}
.td29	{padding:9 0 6 0px;}
.td30	{padding:10 0 6 0px;}
.td31	{padding:10 0 7 0px;}
.td32	{padding:11 0 7 0px;}
.td33	{padding:11 0 8 0px;}
.td34	{padding:12 0 8 0px;}
.td35	{padding:12 0 9 0px;}
.td36	{padding:13 0 9 0px;}
.td37	{padding:13 0 10 0px;}
.td38	{padding:14 0 10 0px;}
.td39	{padding:14 0 11 0px;}
.td40	{padding:15 0 11 0px;}

/* input style */
.input01	{font-size:12px; border:solid 1px #CDCDCD; height:20px;}
.input_bd	{font-size:12px; border:solid 1px #BDBDBD; height:20px;}


/* colors */
.red	{color:#CC0000;}
.blu	{color:#0F128B;}
.blu2	{color:#0033CC;}
.blu3	{color:#15406D;}
.blu4	{color:#000090;}
.blu5	{color:#16416C;}
.blu6   {color:#3B4DB9;}
.blu7   {color:#5E70C1;}
.blu8   {color:#216DB5;}    /* ���������� */
.blu9   {color:#518ECA;}    /* ������ �Ѹ��� */
.org	{color:#FF6716;}
.org2	{color:#F26521;}
.org3	{color:#D76C37;}
.blk	{color:#000000;}
.pink	{color:#993399;}
.pink a	{color:#993399;}
.wh		{color:#FFFFFF;}
.g1		{color:#BABCB1;}
.g2		{color:#6A6A6A;}
.g3		{color:#333333;}
.g4		{color:#444444;}
.g5		{color:#555555;}
.g6		{color:#666666;}
.g7		{color:#777777;}
.g8		{color:#888888;}
.g9		{color:#999999;}
.g10	{color:#AEAEAE;}
.g11	{color:#747474;}
.g12	{color:#676767;}
.g13	{color:#4F4F4F;}
.gc		{color:#CCCCCC;}
.gd		{color:#DDDDDD;}
.ystarh	{color:#8B8B8B;}	/* ���л���Ÿ���� help �÷� */

.gld1	{color:#D06608;}
.gld2	{color:#A2712B;}
.gld3	{color:#956D18;}

.y1		{color:#EF7C00;}

.gre	{color:#49802D;}
.gre2	{color:#5C8700;}

.grn	{color:#1E805A;}
.grn2	{color:#228959;}
.grn3	{color:#329F76;}

.grbl			{color:#257991;}	/* �ε��� �ؽ�Ʈ Į�� */
.grbl2			{color:#3794A3;}	/* �ε��� �ؽ�Ʈ Į�� */
.grbl2 a		{color:#3794A3;}
.grbl2 a:hover	{color:#3794A3;}
.grbl3			{color:#10A2B5;}	/* �ε��� �ؽ�Ʈ Į�� */

.vio	{color:#945AA7;}

.read	{color:#296ABE;}

/* Board style */
.boardl5	{padding:8 0 5 5;}	/* 2007.02.12 ���ؿ�(�Խ��� ����) */
.boardr5	{padding:8 5 5 0;}	/* 2007.02.12 ���ؿ�(�Խ��� ����) */

/*line-height */
.he12	{line-height:12px;}
.he13	{line-height:13px;}
.he14	{line-height:14px;}
.he15	{line-height:15px;}
.he16	{line-height:16px;}
.he17	{line-height:17px;}
.he18	{line-height:18px;}
.he19	{line-height:19px;}
.he20	{line-height:20px;}
.he21	{line-height:21px;}
.he22	{line-height:22px;}
.he23	{line-height:23px;}
.he24	{line-height:24px;}
.he25	{line-height:25px;}
.he26	{line-height:26px;}
.he30	{line-height:30px;}

/* letter spacing */
.sp1	{letter-spacing:1;}
.sp0	{letter-spacing:0;}
.sp01	{letter-spacing:-1;}
.sp02	{letter-spacing:-2;}
.sp03	{letter-spacing:-3;}

/* indent */
.noidt	{text-indent:0px;}
.idt1	{text-indent:-1px;}
.idt2	{text-indent:-2px;}
.idt5	{text-indent:-5px;}
.idt6	{text-indent:-6px;}
.idt7	{text-indent:-7px;}
.idt8	{text-indent:-8px;}
.idt9	{text-indent:-9px;}
.idt10	{text-indent:-10px;}
.idt11	{text-indent:-11px;}
.idt12	{text-indent:-12px;}
.idt13	{text-indent:-13px;}
.idt14	{text-indent:-14px;}
.idt15	{text-indent:-15px;}
.idt16	{text-indent:-16px;}
.idt17	{text-indent:-17px;}
.idt18	{text-indent:-18px;}
.idt19	{text-indent:-19px;}
.idt20	{text-indent:-20px;}
.idt30	{text-indent:-30px;}

/* align */
.ac		{text-align:center;}
.al		{text-align:left;}
.al1	{text-align:left; padding-left:1px;}
.al2	{text-align:left; padding-left:2px;}
.al3	{text-align:left; padding-left:3px;}
.al4	{text-align:left; padding-left:4px;}
.al5	{text-align:left; padding-left:5px;}
.al6	{text-align:left; padding-left:6px;}
.al7	{text-align:left; padding-left:7px;}
.al8	{text-align:left; padding-left:8px;}
.al9	{text-align:left; padding-left:9px;}
.al10	{text-align:left; padding-left:10px;}
.al11	{text-align:left; padding-left:11px;}
.al12	{text-align:left; padding-left:12px;}
.al13	{text-align:left; padding-left:13px;}
.al14	{text-align:left; padding-left:14px;}
.al15	{text-align:left; padding-left:15px;}
.al16	{text-align:left; padding-left:16px;}
.al17	{text-align:left; padding-left:17px;}
.al18	{text-align:left; padding-left:18px;}
.al19	{text-align:left; padding-left:19px;}
.al20	{text-align:left; padding-left:20px;}
.al21	{text-align:left; padding-left:21px;}
.al22	{text-align:left; padding-left:22px;}
.al23	{text-align:left; padding-left:23px;}
.al24	{text-align:left; padding-left:24px;}
.al25	{text-align:left; padding-left:25px;}
.al27	{text-align:left; padding-left:27px;}
.al28	{text-align:left; padding-left:28px;}
.al29	{text-align:left; padding-left:29px;}
.al30	{text-align:left; padding-left:30px;}
.al35	{text-align:left; padding-left:35px;}
.al39	{text-align:left; padding-left:39px;}
.al40	{text-align:left; padding-left:40px;}
.al44	{text-align:left; padding-left:44px;}
.al55	{text-align:left; padding-left:55px;}
.ar		{text-align:right;}
.ar1	{text-align:right; padding-right:1px;}
.ar2	{text-align:right; padding-right:2px;}
.ar3	{text-align:right; padding-right:3px;}
.ar4	{text-align:right; padding-right:4px;}
.ar5	{text-align:right; padding-right:5px;}
.ar6	{text-align:right; padding-right:6px;}
.ar7	{text-align:right; padding-right:7px;}
.ar8	{text-align:right; padding-right:8px;}
.ar9	{text-align:right; padding-right:9px;}
.ar10	{text-align:right; padding-right:10px;}
.ar11	{text-align:right; padding-right:11px;}
.ar12	{text-align:right; padding-right:12px;}
.ar13	{text-align:right; padding-right:13px;}
.ar14	{text-align:right; padding-right:14px;}
.ar15	{text-align:right; padding-right:15px;}
.ar16	{text-align:right; padding-right:16px;}
.ar17	{text-align:right; padding-right:17px;}
.ar18	{text-align:right; padding-right:18px;}
.ar20	{text-align:right; padding-right:20px;}
.ar22	{text-align:right; padding-right:22px;}
.ar30	{text-align:right; padding-right:30px;}
.vt		{vertical-align:top;}
.vm		{vertical-align:middle;}
.vb		{vertical-align:bottom;}
.both	{text-align:justify; word-break:break-all;}
.wb		{word-break:break-all;}

/* disc */
/* �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� */
.img1, .disc01	{color:#666; font-size:4px; vertical-align:middle;}
.img2	{font-size:10px; letter-spacing:-7px; vertical-align:middle;}
.img3	{font-size:10px; vertical-align:middle;}
.img4	{color:#8B8B8B; font-size:3px; vertical-align:middle;}

/* �˻� */
.srch_sort				{color:#003FC0; font-family:'����'; font-size:12px; font-weight:bold;}
.srch_sort a			{color:#003FC0;}
.srch_sort a:hover		{color:#003FC0; text-decoration:underline;}

.srch_newslist				{color:#0000CC; font-family:'����'; font-size:13px; text-decoration:underline;}
.srch_newslist a			{color:#0000CC; text-decoration:underline;}
.srch_newslist a:hover		{color:#0000CC; text-decoration:underline;}
.srch_newslist a:visited	{color:#8D2B8D; text-decoration:underline;}

.srch_newslist01			{color:#666666; font-family:'����'; font-size:12px;}
.srch_newslist01 a			{color:#666666;}
.srch_newslist01 a:hover	{color:#666666; text-decoration:underline;}

.srch_more				{color:#0000CC; font-family:'����'; font-size:12px;}
.srch_more a			{color:#0000CC;}
.srch_more a:hover		{color:#0000CC; text-decoration:underline;}


/* ���� �޴� */
.outsubmenu {
	color:#333333;
	font-family:'����';
	font-size:12px;
	text-decoration:none;
	width:142;
	padding:5 0 2 7;
	cursor:pointer;
}
.onsubmenu {
	color:#333333;
	background-color:#E9E9E9;
	font-family:'����';
	font-size:12px;
	text-decoration:none;
	width:142;
	padding:5 0 2 7;
	cursor:pointer;
}
.submenu {
	color:#333333;
	background-color:#E9E9E9;
	font-family:'����';
	font-size:12px;
	text-decoration:none;
	width:142;
	padding:5 0 2 7;
	cursor:pointer;
}

<image 폴더>


< common.js >

function g_ValidOnlyEngNum(val) {
	if(val.length == 0){
		return true;
	}
	
	re = /[^A-Za-z0-9]/;

    return  re.test(val);
}

function g_IsValidUserId(str) {
	res1 = (/[a-z]/i).test(str);
	res2 = (/^[0-9a-z]*$/i).test(str);

	return (res1 && res2);
}

function g_IsPhone(val) {
	if(val.length == 0){
		return true;
	}
	
	re = /^\d{3,4}-\d{3,4}-\d{4}$/;

    return  re.test(val);
}

function g_IsEmail(val) {
	if(val.length == 0){
		return true;
	}
	
	re = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;

    return  re.test(val);
}

function g_IsEmailHost(val) {
	if(val.length == 0){
		return true;
	}
	
	re = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;

    return  re.test(val);
}

function g_IsNumber(val) {
	if(val.length == 0){
		return true;
	}
	
	re = /[^0-9]/gi;

    return  re.test(val);
}

function g_popUpCalendar() {

    var s_pos = "dialogWidth:250px; dialogHeight:270px; status:no; help:no; scroll:no;";
    var s_url = "/ext_yongin/common/pop_calendar.jsp";
    var ls_result = window.showModalDialog(s_url, window , s_pos) ;

    if (ls_result == "" || ls_result == null) ls_result = "";

    return ls_result;
}

function g_popUpMobileCalendar() {

    var s_pos = "width=250, height=250, resizable=no, scrollbars=no, toolbars=no, status=no, menu=no";
    var s_url = "/ext_yongin/common/pop_calendar_car.jsp";
    var ls_result = window.open(s_url, "win_zip" , s_pos) ;   
}


function g_popUpCalendar2(weekday) {

    var s_pos = "dialogWidth:250px; dialogHeight:270px; status:no; help:no; scroll:no;";
    var s_url = "/common/pop_calendar2.jsp?weekday=" + weekday;
    var ls_result = window.showModalDialog(s_url, window , s_pos) ;

    if (ls_result == "" || ls_result == null) ls_result = "";

    return ls_result;
}

function g_popConfirmPwdPop(params)
{	
    var s_pos = "dialogWidth:328px; dialogHeight:138px;status:no;help:no;scroll:no";
    var s_url = "../common/g_popConfirmPwdPop.do";
    var ls_result = window.showModalDialog(s_url, params , s_pos) ;
    if (ls_result == "" || ls_result == null) ls_result = "";
    return ls_result;
}

function g_popZip() {
    var s_url = "../common/pop_zip.do";
	var s_pos = "width=420, height=280,resizable=yes,scrollbars=yes,toolbars=no,status=yes,menu=no";
    var ls_result = window.open(s_url, "win_zip" , s_pos) ;
}

function g_mobile_popZip() {

    var s_url = "/ext_nyj/common/pop_mobile_zip.jsp";
	var s_pos = "width=420, height=280,resizable=yes,scrollbars=yes,toolbars=no,status=yes,menu=no";
    var ls_result = window.open(s_url, "win_zip" , s_pos) ;
}

function g_validate(FormName) {
	var result = true;
	
	$("#" + FormName + " input[data-validate='true'], textarea[data-validate='true'], select[data-validate='true']").each(function() {
		if($(this).val() == "") {
			alert($(this).attr("title") + "해주십시요.");
			$(this).focus();
			
			result = false;
			return false;
		}			
	});
	
	return result;
}
/*
function g_validate(FormName, lang) {
	var result = true;
	
	$("#" + FormName + " input[data-validate='true'], textarea[data-validate='true']").each(function() {
		if($(this).val() == "") {
			
			if (lang == "ko") alert($(this).attr("title") + "해주십시요.");
			if (lang == "en") alert("The " + $(this).attr("title") + " field is required.");
			
			$(this).focus();
			
			result = false;
			return false;
		}			
	});
	
	return result;
}
*/

< rolling.js >

//롤링 배너
var popup_timer3 = null;
var popup_delay_time3 = 5000;
var popup_pause3 = false;
var popup_button_pause3 = false;
var select_popup_num3 = 1;
  
function popup_display3(popupIDX, move, strid) {
	if(!popupIDX)  {
  		popupIDX = select_popup_num3;
  		if(popup_pause3==true && !move) return;
  		if(popup_button_pause3==true && !move) return;
  		if(!move) move = 'next';
  		hide_popup3(strid, popupIDX);
  	}else{
  		hide_popup3(select_popup_num3);
  	}
  	if(move=='prev') {
  		if(popupIDX==1) {
  			popupIDX = popup_object_num3;
  		} else {
  			popupIDX--;
  		}
 	} else if(move=='next') {
  		if(popupIDX==popup_object_num3) {
  			popupIDX = 1;
  		} else {
  			popupIDX++;
  		}
  	} 
  	show_popup3(strid, popupIDX);
  	select_popup_num3 = popupIDX;
}
  
function hide_popup3(strid, num) {
  	document.getElementById(strid + num).style.display = 'none';
}
  
function show_popup3(strid, num) {
  	document.getElementById(strid + num).style.display = 'block';
}

function popup_scroll3(strid) {
  	popup_timer3 = setInterval("popup_display3('','','"+strid+"')",popup_delay_time3); 
}

< LogAop.java >

package bit.com.a.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class LogAop {

	@Around("within(bit.com.a.controller.*)")
	public Object loggerAop(ProceedingJoinPoint joinpoint) throws Throwable {		
		String signatureStr = joinpoint.getSignature().toShortString();		
		
		// session check
		
		Object obj = joinpoint.proceed();	// 기능 실행
		System.out.println("loggerAOP:" + signatureStr + " 메소드호출");
		
		return obj;		
	}
}

< MemberController.java >

package bit.com.a.controller;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import bit.com.a.model.MemberDto;
import bit.com.a.service.MemberService;

@Controller
public class MemberController {

	private static Logger logger = LoggerFactory.getLogger(MemberController.class);
	
	@Autowired	// -> 의존성   Dependency Injection(DI)
	MemberService memberService;
/*
	@RequestMapping(value = "test.do", method=RequestMethod.GET)
	public String test() {		
		return "test";
	}
	*/
	@RequestMapping(value = "login.do", method=RequestMethod.GET)
	public String login(Model model) {
		logger.info("MemberController login " + new Date());			
		
		return "login.tiles";
	}
	
	 @RequestMapping(value = "regi.do", method=RequestMethod.GET) 
	 public String regi(Model model) {
		 logger.info("MemberController regi " + new Date());
		 
		 return "regi.tiles"; 
	  }
	 
	 /* 
	 * @RequestMapping(value = "regiAf.do", method=RequestMethod.POST) public String
	 * regiAf(Model model, MemberDto dto) { logger.info("MemberController regiAf " +
	 * new Date());
	 * 
	 * boolean b = memberService.addmember(dto); if(b) { logger.info("회원 가입되었습니다 " +
	 * new Date()); return "login.tiles"; } logger.info("가입되지 않았습니다 " + new Date());
	 * 
	 * return "regi.tiles"; }
	 * 
	 * @RequestMapping(value = "loginAf.do", method=RequestMethod.POST) public
	 * String loginAf(Model model, MemberDto dto, HttpServletRequest req) {
	 * logger.info("MemberController loginAf " + new Date()); //
	 * logger.info(dto.toString());
	 * 
	 * // service -> id, pwd MemberDto login = memberService.login(dto); if(login !=
	 * null && login.getId().equals("") == false) { logger.info("login success! " +
	 * new Date()); // login success req.getSession().setAttribute("login", login);
	 * req.getSession().setMaxInactiveInterval(60 * 60 * 365);
	 * 
	 * model.addAttribute("message", "1"); // return "redirect:/bbslist.do"; return
	 * "MessageAlert"; }else {
	 * 
	 * return "login.tiles"; } }
	 */
}

< MemberDao.java >

package bit.com.a.dao;

import java.util.List;

import bit.com.a.model.MemberDto;

public interface MemberDao {

	public List<MemberDto> allMember();
	
	public int getId(MemberDto mem);	
	public boolean addmember(MemberDto mem);
	
	public MemberDto login(MemberDto dto);
}

< MemberDaoImpl.java >

package bit.com.a.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import bit.com.a.dao.MemberDao;
import bit.com.a.model.MemberDto;

@Repository // == 저장소
public class MemberDaoImpl implements MemberDao {

	// DB와 통신
	@Autowired		// <- 객체 생성 (의존성)
	SqlSession sqlSession;
	
	String namespace = "Member.";

	@Override
	public List<MemberDto> allMember() {
		List<MemberDto> list = sqlSession.selectList(namespace + "allMember");		
		return list;
	}
	
	@Override
	public int getId(MemberDto mem) {		
		return sqlSession.selectOne(namespace + "getId", mem);
	}
	
	@Override
	public boolean addmember(MemberDto mem) {		
		int n = sqlSession.insert(namespace + "addmember", mem);		
		return n>0?true:false;
	}

	@Override
	public MemberDto login(MemberDto dto) {
		MemberDto mem = sqlSession.selectOne(namespace + "login", dto);
		return mem;
	}
	
	
}

< BbsDto.java >

package bit.com.a.model;

import java.io.Serializable;

/*
DROP TABLE BBS
CASCADE CONSTRAINTS;

DROP SEQUENCE SEQ_BBS;

CREATE TABLE BBS(
	SEQ NUMBER(8) PRIMARY KEY,
	ID VARCHAR2(50) NOT NULL,
	
	REF NUMBER(8) NOT NULL,
	STEP NUMBER(8) NOT NULL,
	DEPTH NUMBER(8) NOT NULL,
	
	TITLE VARCHAR2(200) NOT NULL,
	CONTENT VARCHAR2(4000) NOT NULL,
	WDATE DATE NOT NULL,
	
	DEL NUMBER(1) NOT NULL,
	READCOUNT NUMBER(8) NOT NULL
);

CREATE SEQUENCE SEQ_BBS
START WITH 1
INCREMENT BY 1;

ALTER TABLE BBS
ADD CONSTRAINT FK_BBS_ID FOREIGN KEY(ID)
REFERENCES MEMBER(ID);
*/

public class BbsDto implements Serializable {
	
	private int seq;
	private String id;	// 작성자
	
	private int ref;	// 그룹번호
	private int step;	// 행(row) 번호
	private int depth;	// 깊이
	
	private String title;
	private String content;
	private String wdate;	// 작성일
	
	private int del;
	private int readcount;
	
	public BbsDto() {
	}

	public BbsDto(int seq, String id, int ref, int step, int depth, String title, String content, String wdate, int del,
			int readcount) {
		super();
		this.seq = seq;
		this.id = id;
		this.ref = ref;
		this.step = step;
		this.depth = depth;
		this.title = title;
		this.content = content;
		this.wdate = wdate;
		this.del = del;
		this.readcount = readcount;
	}

	public BbsDto(String id, String title, String content) {
		super();
		this.id = id;
		this.title = title;
		this.content = content;
	}

	public int getSeq() {
		return seq;
	}

	public void setSeq(int seq) {
		this.seq = seq;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public int getRef() {
		return ref;
	}

	public void setRef(int ref) {
		this.ref = ref;
	}

	public int getStep() {
		return step;
	}

	public void setStep(int step) {
		this.step = step;
	}

	public int getDepth() {
		return depth;
	}

	public void setDepth(int depth) {
		this.depth = depth;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getWdate() {
		return wdate;
	}

	public void setWdate(String wdate) {
		this.wdate = wdate;
	}

	public int getDel() {
		return del;
	}

	public void setDel(int del) {
		this.del = del;
	}

	public int getReadcount() {
		return readcount;
	}

	public void setReadcount(int readcount) {
		this.readcount = readcount;
	}

	@Override
	public String toString() {
		return "BbsDto [seq=" + seq + ", id=" + id + ", ref=" + ref + ", step=" + step + ", depth=" + depth + ", title="
				+ title + ", content=" + content + ", wdate=" + wdate + ", del=" + del + ", readcount=" + readcount
				+ "]";
	}
	
}

< MemberDto.java >

package bit.com.a.model;

import java.io.Serializable;

/*
DROP TABLE MEMBER
CASCADE CONSTRAINTS;

CREATE TABLE MEMBER(
	ID VARCHAR2(50) PRIMARY KEY,
	PWD VARCHAR2(50) NOT NULL,
	NAME VARCHAR2(50) NOT NULL,
	EMAIL VARCHAR2(50) UNIQUE,
	AUTH NUMBER(1) NOT NULL
);
*/

public class MemberDto implements Serializable {

	private String id;
	private String pwd;
	private String name;
	private String email;
	private int auth;	// 사용자(3)/관리자(1)
	
	public MemberDto() {
	}

	public MemberDto(String id, String pwd, String name, String email, int auth) {
		super();
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
		this.auth = auth;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public int getAuth() {
		return auth;
	}

	public void setAuth(int auth) {
		this.auth = auth;
	}

	@Override
	public String toString() {
		return "MemberDto [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", auth=" + auth + "]";
	}
	
}

< MemberService.java >

package bit.com.a.service;

import java.util.List;

import bit.com.a.model.MemberDto;

public interface MemberService {

	public List<MemberDto> allMember();
	
	public int getId(MemberDto mem);	
	public boolean addmember(MemberDto mem);
	
	public MemberDto login(MemberDto dto);
}

< MemberServiceImpl.java >

package bit.com.a.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import bit.com.a.dao.MemberDao;
import bit.com.a.model.MemberDto;
import bit.com.a.service.MemberService;

@Service
public class MemberServiceImpl implements MemberService {

	@Autowired
	MemberDao memberDao;

	@Override
	public List<MemberDto> allMember() {		
		return memberDao.allMember();
	}
	
	@Override
	public int getId(MemberDto mem) {		
		return memberDao.getId(mem);		
	}
	
	@Override
	public boolean addmember(MemberDto mem) {		
		return memberDao.addmember(mem);		
	}

	@Override
	public MemberDto login(MemberDto dto) {		
		return memberDao.login(dto);		
	}
	
	
}

< jdbc.properties >

# Local DB

jdbc.driverClassName = oracle.jdbc.driver.OracleDriver
jdbc.url = jdbc:oracle:thin:@192.168.2.75:1521:xe
jdbc.username = hr
jdbc.password = hr
jdbc.initialSize = 5
jdbc.maxActive = 20

< BitMember.xml >

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="Member">

<select id="allMember" resultType="bit.com.a.model.MemberDto">
	SELECT * FROM MEMBER
</select>

<select id="getId" parameterType="java.lang.String" resultType="java.lang.Integer">
	SELECT NVL(COUNT(*), 0)
	FROM MEMBER
	WHERE ID=#{id}
</select>

<insert id="addmember" parameterType="bit.com.a.model.MemberDto">
	INSERT INTO MEMBER(ID, PWD, NAME, EMAIL, AUTH)
	VALUES(#{id}, #{pwd}, #{name}, #{email}, 3)
</insert>

<select id="login" parameterType="bit.com.a.model.MemberDto"
	resultType="bit.com.a.model.MemberDto">
	SELECT ID, NAME, EMAIL, AUTH
	FROM MEMBER
	WHERE ID=#{id} AND PWD=#{pwd}
</select>

</mapper>

< bbslist.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<table class="list_table" style="width: 85%">
<colgroup>
	<col style="width: 70px">
	<col style="width: auto">
	<col style="width: 100px">
</colgroup>

<thead>
	<tr>
		<th>번호</th><th>제목</th><th>작성자</th>
	</tr>
</thead>

<tbody>
	<c:if test="${empty bbslist }">
	<tr>
		<td colspan="3">작성된 글이 없습니다</td>
	</tr>
	</c:if>
	
	<c:forEach items="${bbslist }" var="bbs" varStatus="vs">
	
	<tr class="_hover_tr">
		<td>${vs.count }</td>
		<td style="text-align: left;">
			<a href="bbsdetail.do?seq=${bbs.seq }">${bbs.title }</a>
		</td>
		<td>${bbs.id }</td>		
	</tr>	
	
	</c:forEach>
	
	



</tbody>

</table>  

< left_bbslist.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<div class="menu_table">
	<ul style="width: 100%">
		<li class="title">답변형 게시판</li>
		<li class="subtitle">게시판</li>
		<li class="menu_item">
			<a href="bbslist.do" title="글목록">글목록</a>
		</li>
		<li class="menu_item">
			<a href="bbswrite.do" title="글쓰기">글쓰기</a>
		</li>
	</ul>
</div> 

< bottom_inc.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<div>
	<img alt="" src="./image/bbsbottom1.jpg" border="0">
</div>   

< header.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/initial.css">
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/table.css">
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/button.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> 
 
<script src="http://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>   

< top_inc.jsp >

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:requestEncoding value="utf-8"/>    

<jsp:useBean id="nows" class="java.util.Date"/>
<%--
Date nows = new Date();
--%>

<div style="width: 100%;height: 53px; border-bottom: 1px solid #5e5e5e">
	<div style="width: 100%; height: 100%; clear: both; display: inline-block; ">
	
	<div id="_title_image" style="width: 30%; float: left; display: inline;">
		<img alt="" src="./image/bbslogo1.jpg" style="height: 53px">
	</div>
	
	<div id="_title_today" style="width: 70%; float: left; text-align: right;">
		<div style="position: relative; top: 27px">
			
			<c:if test="${login.id ne '' }">
				<a href="logout.do" title="로그아웃">[로그아웃]</a>&nbsp;&nbsp;&nbsp;
			</c:if>
			
			<c:if test="${login.name ne ''}">
				[${login.name }]님 환영합니다
			</c:if>
			
			<fmt:formatDate value="${nows }" var="now" pattern="yyyy/MM/dd"/>
			${now }
		
		</div>	
	</div>
	
	</div>
</div> 

< top_menu.jsp >

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<div id="top_menu_wrap">
	<div id="_top_menu">
		<ul class="navi">
			<li><a href="bbslist.do" title="HOME">HOME</a></li>
			<li><a href="bbslist.do" title="답변형게시판">게시판</a></li>
			<!-- 일정관리 -->
			<!-- 자료실 -->
			<!-- 투표하기 -->
			<!-- 채팅 -->
			<!-- Youtube -->
						
			<!-- 투표만들기(관리자) -->			
		</ul>	
	</div>
</div>
​