지구정복

[Spring] 02/05 | Model2 앨범게시판 Spring-myBatis이용해서 만들기 본문

데이터 엔지니어링 정복/HTML-CSS-JavaScript-Spring-Node.js

[Spring] 02/05 | Model2 앨범게시판 Spring-myBatis이용해서 만들기

eeaarrtthh 2021. 2. 7. 02:53
728x90
반응형

- 참고 1 : servlet에 정적파일 매핑시키기(get ~ 404 에러)

스프링에서 정적인 파일(사진, css, html, xml 등)을 불러오려면 servlet-context.xml에서 매핑을 시켜줘야한다.

현재 이미지 파일과 css파일은 아래 사진처럼 webapp 밑에 있다.

파일위치가 있는 곳을 설정해야 한다. 아래처럼 수정한다.

 

만약 매핑시키지 않으면 해당 파일을 찾을 수 없다는 아래와 같은 에러가 나온다.

GET http://localhost:8080/폴더명/파일명 404

 

매핑후에 사용하려면 아래 예시와 같이 사용한다.

<img src='images/icon_new.gif' alt='NEW'>

 

 

- 참고 2 : sqlSession nullpointexception 에러 뜰 때

 

0) 기본적인 라이브러리 설치여부 확인

 

 

1) root-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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	<!-- 데이터베이스 연결정보설정  -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="org.mariadb.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3307/project" />
		<property name="username" value="project" />
		<property name="password" value="123456" />
	</bean>

	<!-- sqlSessionFactory불러와서 위에 설정한 DB설정 속성추가하고 mapper.xml과 매핑한다.  -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mapperLocations" value="classpath:mappers/mapper.xml" />
	</bean>
	
	<!-- SqlSessionTemplate는 myBatis쿼리문 실행해준다. 위에 sqlSessionFactory 객체를 선언한다. -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactory" />
	</bean>
</beans>

 

2) web.xml 내용 확인

 

3) 매핑되는 mapper.xml 내용과 경로 확인

 

4) DAO에서 Autowired 확인

 

5) Controller.java에서 dao Autowired 확인

 

- 참고 3 : 자바스크립트에서 현재 PC 위치로 위도경도 알아내기

window.navigator.geolocation.getCurrentPosition( function(position) {
		var lat = position.coords.latitude;
		var lng = position.coords.longitude;
		
		console.log( lat + "/" + lng );
		document.wfrm.latitude.value = lat;
		document.wfrm.longitude.value = lng;
	}, 
	function(error) {
		switch(error.code){
		case error.PERMISSION_DENIED:
			str = "사용자 거부";
			break;
		case error.POSITION_UNAVAILABLE:
			str = "지리정보 없음";
			break;
		case error.TIMEOUT:
			str = "시간 초과";
			break;
		case error.UNKOWN_ERROR:
			str = "알 수 없는 에러";
			break;
		}
	})

 

 

최종 결과 및 코드

더보기

 

1. 결과

list.do

 view.do

 write.do

 modify.do

 delete.do

 

2. 소스코드

 

 

먼저 전자정부프레임워크에서 Spring Legacy Project에서 Spring MVC Project를 만든다.

 그리고 빌드패스, 페이스셋 설정을 한다.

 

-pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.exam</groupId>
	<artifactId>album</artifactId>
	<name>AlbumSpringEx01</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.8</java-version>
		<org.springframework-version>5.2.8.RELEASE</org.springframework-version>
		<org.aspectj-version>1.9.5</org.aspectj-version>
		<org.slf4j-version>1.7.30</org.slf4j-version>
	</properties>
	<dependencies>
		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework-version}</version>
			<exclusions>
				<!-- Exclude Commons Logging in favor of SLF4j -->
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				 </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<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>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
		<dependency>
		    <groupId>org.mariadb.jdbc</groupId>
		    <artifactId>mariadb-java-client</artifactId>
		    <version>2.7.1</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-jdbc</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.5.6</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>2.0.6</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/servlets.com/cos -->
		<dependency>
		    <groupId>servlets.com</groupId>
		    <artifactId>cos</artifactId>
		    <version>05Nov2002</version>
		</dependency>
		
		

	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<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>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	
	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

</web-app>

-root-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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	<!-- 데이터베이스 연결정보설정  -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="org.mariadb.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3307/project" />
		<property name="username" value="project" />
		<property name="password" value="123456" />
	</bean>

	<!-- sqlSessionFactory불러와서 위에 설정한 DB설정 속성추가하고 mapper.xml과 매핑한다.  -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="mapperLocations" value="classpath:mappers/mapper.xml" />
	</bean>
	
	<!-- SqlSessionTemplate는 myBatis쿼리문 실행해준다. 위에 sqlSessionFactory 객체를 선언한다. -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactory" />
	</bean>
</beans>

-servlet-context.xml

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

	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<!-- 정적인 파일이 있는 위치  -->
	<resources mapping="/webapp/**" location="src/main/webapp/" />

	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<context:component-scan base-package="com.exam.album" />
	<context:component-scan base-package="com.exam.album.model1" />
	
</beans:beans>

 

스프링게시판과제.zip
1.31MB

 

그리고 src/main/webapp에 css, mariadb, upload 폴더를 만들고 views에 게시판 jsp 파일을 넣는다.

예전에 앨범게시판 만들었을 때의 jsp를 가져온다.

 

그리고 데이터베이스 설정을 해준다.

(al_comment1 테이블만들 때 longitude 컬럼을 logitude로 오타내서 게시판 코딩할 때 logitude로 쓴 부분이 있음)

 

-MariaDB DML

create table al_board2 (
seq int not null primary key auto_increment,
subject varchar(150) not null,
writer varchar(12) not null,
mail varchar(50),
password varchar(12)	 not null,
content varchar(2000),
filename varchar(200),
filesize int,
logitude varchar(12),
latitude varchar(12),
cmt int not null,
hit int not null,
wip varchar(15) not null,
wdate datetime not null
);

create table al_comment1(
seq int not null primary key auto_increment,
pseq int not null,
writer varchar(12) not null,
password varchar(12) not null,
content varchar(2000) not null,
wdate datetime not null
);

다음으로 기본적인 데이터추가를 위해 board_inser1_ok.jsp를 만들고

context.xml을 잠깐 추가해준다.

-context.xml

<?xml version="1.0" encoding="utf-8" ?>
<Context>
	<Resource
		name = "jdbc/mariadb2"
		auth = "Container"
		type = "javax.sql.DataSource"
		driverClassName = "org.mariadb.jdbc.Driver"
		url = "jdbc:mysql://localhost:3307/project"
		username = "project"
		password = "123456"
	/>
</Context>

-board_insert1_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming.NamingException" %>
<%@ page import="javax.sql.DataSource" %>

<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.SQLException" %>

<%
	request.setCharacterEncoding("utf-8");

	Connection conn = null;
	PreparedStatement pstmt = null;
	
	try {
		//커넥션 풀로 DB에 연결하기
		Context initCtx = new InitialContext();
		Context envCtx = (Context)initCtx.lookup( "java:comp/env" );
		DataSource dataSource = (DataSource)envCtx.lookup( "jdbc/mariadb2" );
		conn = dataSource.getConnection();
		
		String sql = "insert into al_board2 values (0, ?, ?, ?, ?, ?, ?, 0, 1, 1, 1, 0, ?, now())";
		pstmt = conn.prepareStatement(sql);
		for( int i=1; i<=50; i++ ) {
			pstmt.setString( 1, "제목" + i );
			pstmt.setString( 2, "글쓴이" );
			pstmt.setString( 3, "test@test.com" );
			pstmt.setString( 4, "123" );
			pstmt.setString( 5, "내용" + i );
			pstmt.setString( 6, "607927_1.jpg" );
			pstmt.setString( 7, "000.000.000.000" );
			
			pstmt.executeUpdate();
		}
		
	} catch(NamingException e) {
		System.out.println( "error: " + e.getMessage() );
	} catch(SQLException e) {
		System.out.println( "error: " + e.getMessage() );
	} finally {
		if ( pstmt != null ) pstmt.close();
		if ( conn != null ) conn.close();
	}
	
	out.println( " <script type='text/javascript'> " );
	out.println( " alert('글쓰기에 성공했습니다.'); " );
	out.println( " location.href='board_list1.jsp;' " );
	out.println( " </script> " );
	

%>

board_insert1_ok.jsp를 바로 실행시켜서 임의의 데이터 50개를 넣어준다. 

 

이제 모델2 컨트롤러와 모델1을 코딩한다.

-mapper.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="mybatis">
	<select id="select1" resultType="String">
		select * from al_board2 where seq = 10
	</select>

	<!-- paging board_list1  -->
	<select id="boardList" resultType="com.exam.album.model1.BoardTO">
		select seq, subject, filename, writer, date_format(wdate, '%Y-%m-%d') wdate, 
				hit, datediff(now(), wdate) wgap, cmt
		from al_board2 
		order by seq desc
	</select>
	
	<!-- board_write1_ok  -->
	<insert id="boardWriteOk" parameterType="com.exam.album.model1.BoardListTO">
		insert into al_board2
		values(0, #{subject}, #{writer}, #{mail}, #{password}, #{content}, 
			#{filename}, #{filesize}, #{logitude}, #{latitude}, 0, 0, #{wip}, now() )
	</insert>
	
	<!-- board_view1  -->
	<update id="boardViewHit" parameterType="com.exam.album.model1.BoardTO">
		update al_board2
		set hit = hit + 1 
		where seq = #{seq}
	</update>
	
	<insert id="boardViewCommentOk" parameterType="com.exam.album.model1.CommentTO">
		insert into al_comment1
		values(0, #{pseq}, #{writer}, #{password}, #{content}, now() )
	</insert>
	
	<update id="commentNum" parameterType="com.exam.album.model1.BoardTO">
		update al_board2
		set cmt = ( select count(*) 
				from al_comment1
				where pseq = #{seq} )
		where seq = #{seq}
	</update>
	
	<select id="boardView" parameterType="com.exam.album.model1.BoardTO" 
			resultType="com.exam.album.model1.BoardTO">
		select seq, subject, writer, mail, content, filename, logitude, latitude, hit, wip, wdate
		from al_board2
		where seq = #{seq}
	</select>
	
	<select id="boardViewComment" parameterType="com.exam.album.model1.CommentTO"
		resultType="com.exam.album.model1.CommentTO">
		select seq, pseq, writer, wdate, content
		from al_comment1
		where pseq = #{pseq}
	</select>
	
	<!-- board_delete1  -->
	<select id="boardDelete" parameterType="com.exam.album.model1.BoardTO" 
		resultType="com.exam.album.model1.BoardTO">
		select seq, subject, writer 
		from al_board2 
		where seq = #{ seq }
	</select>
	
	<!-- board_delete1_ok  -->
	<select id="boardDeleteOkFile" parameterType="com.exam.album.model1.BoardTO"
		resultType="String">
		select filename
		from al_board2
		where seq = #{seq}
	</select>
	
	<delete id="boardDeleteOk" parameterType="com.exam.album.model1.BoardTO">
		delete
		from al_board2
		where seq = #{ seq } and password = #{ password }
	</delete>
	
	<!-- board_modify1  -->
	<select id="boardModify" parameterType="com.exam.album.model1.BoardTO" 
		resultType="com.exam.album.model1.BoardTO">
		select seq, subject, writer, mail, content, filename
		from al_board2 
		where seq = #{ seq }
	</select>
	
	<!-- board_modify_ok  -->
	<update id="boardModifyOk1" parameterType="com.exam.album.model1.BoardTO">
		update al_board2
		set subject = #{subject}, mail = #{mail}, content = #{content}, filename = #{filename},
			logitude = #{logitude}, latitude = #{latitude}
		where seq = #{seq} and password = #{password}
	</update>
	
	<update id="boardModifyOk2" parameterType="com.exam.album.model1.BoardTO">
		update al_board2
		set subject = #{subject}, mail = #{mail}, content = #{content},
			logitude = #{logitude}, latitude = #{latitude}
		where seq = #{seq} and password = #{password}
	</update>
	
</mapper>

 -HomeController.java

package com.exam.album;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.exam.album.model1.BoardDAO;
import com.exam.album.model1.BoardListTO;
import com.exam.album.model1.BoardTO;
import com.exam.album.model1.CommentTO;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;

@Controller
public class HomeController {
	@Autowired
	private BoardDAO dao;
	
	@RequestMapping( value = "/list.do" )
	public String board_list1( HttpServletRequest request, HttpServletResponse response ) {
		int cpage = 1;
		if ( request.getParameter( "cpage" ) != null && !request.getParameter( "cpage" ).equals("") ) {
			cpage = Integer.parseInt( request.getParameter( "cpage" ) );
		}
		
		BoardListTO listTO = new BoardListTO();
		listTO.setCpage(cpage);
		
		listTO = dao.boardList(listTO);
		
		request.setAttribute( "listTO", listTO );
		request.setAttribute( "cpage", cpage );
		
		return "board_list1";
	}
	
	@RequestMapping( value="/write.do" )
	public String board_write1() {
		return "board_write1";
	}
	
	@RequestMapping( value="/write_ok.do" )
	public String board_write1_ok( HttpServletRequest request, HttpServletResponse response ) throws IOException {
		String uploadPath = "C:/eGovFrameDev-3.9.0-64bit/workspace/AlbumSpringEx01/src/main/webapp/upload";
		int maxFileSize = 1024 * 1024 * 20;
		String encType = "utf-8";
		MultipartRequest multi 
			= new MultipartRequest( request, uploadPath, maxFileSize, encType, new DefaultFileRenamePolicy() );
		
		String cpage = multi.getParameter( "cpage" );
		
		String subject = multi.getParameter( "subject" );
		String writer = multi.getParameter( "writer" );
		String mail = "";
		if ( !multi.getParameter( "mail1" ).equals("") && !multi.getParameter( "mail2" ).equals("") ) {
			mail = multi.getParameter( "mail1" ) +  "@" + multi.getParameter( "mail2" );
		}
		String password = multi.getParameter( "password" );
		String content = multi.getParameter( "content" );
		String wip = request.getRemoteAddr();	//환경값만 request사용
		String filename = multi.getFilesystemName( "upload" );
		File file = multi.getFile( "upload" );
		long filesize = 0;
		if ( file != null ) {
			filesize = file.length();
		}
		String latitude = multi.getParameter( "latitude" );
		String longitude = multi.getParameter( "longitude" );
		
		BoardTO to = new BoardTO();
		
		to.setSubject(subject);
		to.setWriter(writer);
		to.setMail(mail);
		to.setPassword(password);
		to.setContent(content);
		to.setWip(wip);
		to.setLatitude(latitude);
		to.setLogitude(longitude);
		to.setFilename(filename);
		to.setFilesize(filesize);
		
		int flag = dao.boardWriteOk(to);
		
		request.setAttribute( "flag", flag );
		request.setAttribute( "cpage", cpage );
		
		return "board_write1_ok";
	}
	
	@RequestMapping( value="/view.do" )
	public String board_view1( HttpServletRequest request, HttpServletResponse response ) {
		String seq = request.getParameter( "seq" );
		String cpage = request.getParameter( "cpage" );
		
		BoardTO to = new BoardTO();
		to.setSeq( seq );
		to = dao.boardView(to);
		request.setAttribute( "to", to );
		
		CommentTO commentTo = new CommentTO();
		commentTo.setPseq( seq );
		ArrayList<CommentTO> lists = dao.boardViewComment(commentTo);
		request.setAttribute( "lists", lists );
		request.setAttribute( "cpage", cpage);
		
		return "board_view1";
	}
	
	@RequestMapping( value="/commentOk.do" )
	public String board_view1_comment_ok( HttpServletRequest request, HttpServletResponse response ) {
		String cpage = request.getParameter( "cpage" );
		
		String pseq = request.getParameter( "seq" );
		String writer = request.getParameter( "cwriter" );
		String password = request.getParameter( "cpassword" );
		String content = request.getParameter( "ccontent" );
		
		CommentTO commentTo = new CommentTO();
		commentTo.setPseq(pseq);
		commentTo.setWriter(writer);
		commentTo.setPassword(password);
		commentTo.setContent(content);

		int flag = dao.boardViewCommentOk(commentTo);
		request.setAttribute( "flag", flag );
		request.setAttribute( "cpage", cpage );
		request.setAttribute( "seq", pseq );
		
		return "board_view1_comment_ok";
	}
	
	@RequestMapping( value="/delete.do" )
	public String board_delete1( HttpServletRequest request, HttpServletResponse response ) {
		String seq = request.getParameter( "seq" );
		String cpage = request.getParameter( "cpage" );
		BoardTO to = new BoardTO();
		to.setSeq(seq);
		to = dao.boardDelete(to);
		
		request.setAttribute( "to", to );
		request.setAttribute( "cpage", cpage );
		
		return "board_delete1";
	}
	
	@RequestMapping( value="/delete_ok.do" )
	public String board_delete1_ok( HttpServletRequest request, HttpServletResponse response ) {
		String cpage = request.getParameter( "cpage" );
		String seq = request.getParameter( "seq" );
		String password = request.getParameter( "password" );
		
		BoardTO to = new BoardTO();
		to.setSeq(seq);
		to.setPassword(password);
		
		int flag = dao.boardDeleteOk( to );
		
		request.setAttribute( "flag", flag );
		request.setAttribute( "cpage", cpage );
		
		return "board_delete1_ok";
	}
	
	@RequestMapping( value="/modify.do" )
	public String board_modify1( HttpServletRequest request, HttpServletResponse response ) {
		String seq = request.getParameter( "seq" );
		
		BoardTO to = new BoardTO();
		to.setSeq(seq);
		to = dao.boardModify(to);
		
		request.setAttribute("to", to);
		
		return "board_modify1";
	}
	
	@RequestMapping( value="/modify_ok.do" )
	public String board_modify1_ok( HttpServletRequest request, HttpServletResponse response ) throws IOException {
		String uploadPath = "C:/eGovFrameDev-3.9.0-64bit/workspace/AlbumSpringEx01/src/main/webapp/upload";
		int maxFileSize = 1024 * 1024 * 20;
		String encType = "utf-8";
		MultipartRequest multi 
			= new MultipartRequest( request, uploadPath, maxFileSize, encType, new DefaultFileRenamePolicy() );
		
		String seq = multi.getParameter( "seq" );
		String cpage = multi.getParameter( "cpage" );
		String password = multi.getParameter( "password" );
		String subject = multi.getParameter( "subject" );
		String content = multi.getParameter( "content" );
		String latitude = multi.getParameter( "latitude" );
		String logitude = multi.getParameter( "longitude" );
		String mail = "";
		if ( !multi.getParameter( "mail1" ).equals("") && !multi.getParameter( "mail2" ).equals("") ) {
			mail = multi.getParameter( "mail1" ) + "@" + multi.getParameter( "mail2" );
		}
		String newFilename = multi.getFilesystemName( "upload" );
		File newFile = multi.getFile( "upload" );
		
		BoardTO to = new BoardTO();
		to.setSeq(seq);
		to.setPassword(password);
		to.setSubject(subject);
		to.setContent(content);
		to.setMail(mail);
		to.setFilename( newFilename );
		to.setLatitude(latitude);
		to.setLogitude(logitude);
		
		int flag = dao.boardModifyOk( to );
		
		request.setAttribute( "flag", flag );
		request.setAttribute( "seq", seq );
		request.setAttribute( "cpage", cpage );
		
		return "board_modify1_ok";
	}
}

-BoardTO.java

package com.exam.album.model1;

public class BoardTO {
	private String seq;
	private String subject;
	private String writer;
	private String mail;
	private String password;
	private String content;
	private String filename;
	private long filesize;
	private String logitude;
	private String latitude;
	private int cmt;
	private String hit;
	private String wip;
	private String wdate;
	private int wgap;
	
	private String cseq;
	private String cpseq;
	private String cwriter;
	private String cpassword;
	private String ccontent;
	private String cwdate;
	
	public String getCseq() {
		return cseq;
	}
	public void setCseq(String cseq) {
		this.cseq = cseq;
	}
	public String getCpseq() {
		return cpseq;
	}
	public void setCpseq(String cpseq) {
		this.cpseq = cpseq;
	}
	public String getCwriter() {
		return cwriter;
	}
	public void setCwriter(String cwriter) {
		this.cwriter = cwriter;
	}
	public String getCpassword() {
		return cpassword;
	}
	public void setCpassword(String cpassword) {
		this.cpassword = cpassword;
	}
	public String getCcontent() {
		return ccontent;
	}
	public void setCcontent(String ccontent) {
		this.ccontent = ccontent;
	}
	public String getCwdate() {
		return cwdate;
	}
	public void setCwdate(String cwdate) {
		this.cwdate = cwdate;
	}
	public String getLogitude() {
		return logitude;
	}
	public String getLatitude() {
		return latitude;
	}
	public int getCmt() {
		return cmt;
	}
	public String getSeq() {
		return seq;
	}
	public long getFilesize() {
		return filesize;
	}
	public String getSubject() {
		return subject;
	}
	public String getWriter() {
		return writer;
	}
	public String getMail() {
		return mail;
	}
	public String getPassword() {
		return password;
	}
	public String getContent() {
		return content;
	}
	public String getFilename() {
		return filename;
	}
	public String getHit() {
		return hit;
	}
	public String getWip() {
		return wip;
	}
	public String getWdate() {
		return wdate;
	}
	public int getWgap() {
		return wgap;
	}
	
	public void setCmt(int cmt) {
		this.cmt = cmt;
	}
	public void setLatitude(String latitude) {
		this.latitude = latitude;
	}
	public void setLogitude(String logitude) {
		this.logitude = logitude;
	}
	public void setFilesize(long filesize) {
		this.filesize = filesize;
	}
	public void setSeq(String seq) {
		this.seq = seq;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public void setMail(String mail) {
		this.mail = mail;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
	public void setHit(String hit) {
		this.hit = hit;
	}
	public void setWip(String wip) {
		this.wip = wip;
	}
	public void setWdate(String wdate) {
		this.wdate = wdate;
	}
	public void setWgap(int wgap) {
		this.wgap = wgap;
	}
}

-BoardListTO.java

package com.exam.album.model1;

import java.util.ArrayList;

public class BoardListTO {
	private int cpage;
	private int recordPerPage;
	private int blockPerPage;
	private int totalPage;
	private int totalRecord;
	private int startBlock;
	private int endBlock;
	private int blockRecord;
	private ArrayList<BoardTO> boardLists;
	
	public BoardListTO() {
		this.cpage = 1;
		this.recordPerPage = 5;	//한 페이지에 보일 글의 수
		this.blockPerPage = 3;	//페이지 보일 개수 3개씩
		this.totalPage = 1;
		this.totalRecord = 0;
		this.blockRecord = 0;
	}

	public int getCpage() {
		return cpage;
	}
	public int getRecordPerPage() {
		return recordPerPage;
	}
	public int getBlockPerPage() {
		return blockPerPage;
	}
	public int getTotalPage() {
		return totalPage;
	}
	public int getTotalRecord() {
		return totalRecord;
	}
	public int getStartBlock() {
		return startBlock;
	}
	public int getEndBlock() {
		return endBlock;
	}
	public int getBlockRecord() {
		return blockRecord;
	}
	public ArrayList<BoardTO> getBoardLists() {
		return boardLists;
	}
	
	public void setCpage(int cpage) {
		this.cpage = cpage;
	}
	public void setRecordPerPage(int recordPerPage) {
		this.recordPerPage = recordPerPage;
	}
	public void setBlockPerPage(int blockPerPage) {
		this.blockPerPage = blockPerPage;
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public void setTotalRecord(int totalRecord) {
		this.totalRecord = totalRecord;
	}
	public void setStartBlock(int startBlock) {
		this.startBlock = startBlock;
	}
	public void setEndBlock(int endBlock) {
		this.endBlock = endBlock;
	}
	public void setBlockRecord(int blockRecord) {
		this.blockRecord = blockRecord;
	}
	public void setBoardLists(ArrayList<BoardTO> boardLists) {
		this.boardLists = boardLists;
	}
}

-CommentTO.java

package com.exam.album.model1;

public class CommentTO {
	private String seq;
	private String pseq;
	private String writer;
	private String password;
	private String wdate;
	private String content;
	
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getSeq() {
		return seq;
	}
	public void setSeq(String seq) {
		this.seq = seq;
	}
	public String getPseq() {
		return pseq;
	}
	public void setPseq(String pseq) {
		this.pseq = pseq;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getWdate() {
		return wdate;
	}
	public void setWdate(String wdate) {
		this.wdate = wdate;
	}
}

-BoardDAO.java

package com.exam.album.model1;

import java.io.File;
import java.util.ArrayList;

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

@Repository
public class BoardDAO {
	@Autowired
	private SqlSession sqlSession;

	// write_ok
	public int boardWriteOk(BoardTO to) {
		int flag = 1;
		int result = sqlSession.insert( "boardWriteOk", to );
		if( result == 1 ) {
			flag = 0;
		}
		return flag;
	}
	
	// paging list
	public BoardListTO boardList(BoardListTO listTO) {
		ArrayList<BoardTO> totalLists = (ArrayList)sqlSession.selectList( "boardList" );
		
		// 페이지를 위한 기본 요소
		int cpage = listTO.getCpage();
		int recordPerPage = listTO.getRecordPerPage(); // 한페이지에 보이는 글의 개수 5개
		int BlockPerPage = listTO.getBlockPerPage(); // 한 화면에 보일 페이지의 수 3개

		// 총 글의 개수 얻기
		listTO.setTotalRecord( totalLists.size() );

		// 총 페이지 수 얻기
		listTO.setTotalPage(((listTO.getTotalRecord() - 1) / recordPerPage) + 1);
		int skip = (cpage * recordPerPage) - recordPerPage;
		
		ArrayList<BoardTO> lists = new ArrayList<BoardTO>();
		
		for( int i=0; i<5; i++ ) {
			if( skip+i != totalLists.size() ) {
				BoardTO to = new BoardTO();
				to.setSeq( totalLists.get(skip+i).getSeq() );
				to.setSubject( totalLists.get(skip+i).getSubject() );
				to.setWriter( totalLists.get(skip+i).getWriter() );
				to.setFilename( totalLists.get(skip+i).getFilename() );
				to.setWdate( totalLists.get(skip+i).getWdate() );
				to.setHit( totalLists.get(skip+i).getHit() );
				to.setWgap( totalLists.get(skip+i).getWgap() );
				to.setCmt( totalLists.get(skip+i).getCmt() );
				
				lists.add(to);
				
			} else { break; }
		}
		listTO.setBoardLists( lists );
		
		
		listTO.setStartBlock(((cpage - 1) / BlockPerPage) * BlockPerPage + 1);
		listTO.setEndBlock(((cpage - 1) / BlockPerPage) * BlockPerPage + BlockPerPage);
		if (listTO.getEndBlock() >= listTO.getTotalPage()) {
			listTO.setEndBlock(listTO.getTotalPage());
		}

		return listTO;
	}

	// view
	public BoardTO boardView(BoardTO to) {
		sqlSession.update( "boardViewHit", to );
		sqlSession.update( "commentNum", to );
		to = sqlSession.selectOne( "boardView", to );
		
		return to;
	}
	
	//view_comment
	public ArrayList<CommentTO> boardViewComment( CommentTO commentTo ) {
		ArrayList<CommentTO> lists = (ArrayList)sqlSession.selectList( "boardViewComment", commentTo );
		
		return lists;
	}
	
	// view_comment_ok
	public int boardViewCommentOk( CommentTO commentTo ) {
		int flag = 1;
		int result = sqlSession.insert( "boardViewCommentOk", commentTo );
		if( result == 1 ) {
			flag = 0;
		}
		return flag;
	}


	// delete
	public BoardTO boardDelete(BoardTO to) {
		to = sqlSession.selectOne( "boardDelete", to );
		return to;
	}
	

	// delete_ok
	public int boardDeleteOk(BoardTO to) {
		int flag = 2;
		String filename = null;
		
		String resultFile = sqlSession.selectOne( "boardDeleteOkFile", to );
		if( resultFile != null ) {
			filename = resultFile;
		}
		
		int result = sqlSession.delete( "boardDeleteOk", to );
		if( result == 0 ) {
			flag = 1;
		} else if ( result == 1 ) {
			flag = 0;
			if( filename != null ) {
				File file = new File("C:/eGovFrameDev-3.9.0-64bit/workspace/AlbumSpringEx01/src/main/webapp/upload/" + filename);
				file.delete();
			}
		}
		return flag;
	}

	// modify
	public BoardTO boardModify(BoardTO to) {
		to = sqlSession.selectOne( "boardModify", to );

		return to;
	}

	// modify_ok
	public int boardModifyOk(BoardTO to) {
		int flag = 2;
		String resultFile = sqlSession.selectOne( "boardDeleteOkFile", to );
		String oldFilename = null;
		if ( resultFile != null ) {
			oldFilename = resultFile;
		}
		
		int result = 2;
		if(to.getFilename() != null) {
			// 수정에서 첨부파일이 있을 때
			result = sqlSession.update( "boardModifyOk1", to );
		} else {
			// 수정에서 첨부파일이 없을 때
			result = sqlSession.update( "boardModifyOk2", to );
		}
		
		if (result == 0) {
			flag = 1;
		} else if (result == 1) {
			flag = 0;
			if (to.getFilename() != null && oldFilename != null) {
				// 기존 첨부파일이 있고 추가된 첨부파일이 있을 경우 기존 파일은 삭제한다.
				File file = new File("C:/eGovFrameDev-3.9.0-64bit/workspace/AlbumSpringEx01/src/main/webapp/upload/" + oldFilename);
				file.delete();
			}
		}
		return flag;
	}
}

 

 jsp페이지 코딩

-board_list1.jsp

<%@page import="com.exam.album.model1.BoardListTO"%>
<%@page import="com.exam.album.model1.BoardTO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	BoardListTO listTO = (BoardListTO)request.getAttribute( "listTO" );
	int cpage = (Integer)request.getAttribute( "cpage" );
	
	int recordPerPage = listTO.getRecordPerPage();
	int totalRecord = listTO.getTotalRecord();
	int totalPage = listTO.getTotalPage();
	int blockPerPage = listTO.getBlockPerPage();
	int blockRecord = listTO.getBlockRecord();
	int startBlock = listTO.getStartBlock();
	int endBlock = listTO.getEndBlock();

	StringBuffer sbHtml = new StringBuffer();
	
	for ( BoardTO to : listTO.getBoardLists()) {
		blockRecord++;
		sbHtml.append( " <td width='20%' class='last2'> ");
		sbHtml.append( " 	<div class='board'> " );
		sbHtml.append( " 		<table class='boardT'> " );
		sbHtml.append( " 		<tr> " );
		sbHtml.append( " 			<td class='boardThumbWrap'> " );
		sbHtml.append( " 				<div class='boardThumb'> " );
		sbHtml.append( " 					<a href='./view.do?cpage="+ cpage +"&seq="+to.getSeq()+"'><img src='upload/" + to.getFilename() + "' border='0' width='100%'/></a>" );
		sbHtml.append( " 				</div> " );														
		sbHtml.append( " 			</td> " );
		sbHtml.append( " 		</tr> " );
		sbHtml.append( " 		<tr> " );
		sbHtml.append( " 			<td> " );
		sbHtml.append( " 				<div class='boardItem'>	 " );
		sbHtml.append( " 					<strong>" + to.getSubject() + "</strong> " );
		sbHtml.append( " 					<span class='coment_number'><img src='images/icon_comment.png' alt='commnet'>"+ to.getCmt() +"</span>" );
		sbHtml.append( " 					<img src='images/icon_new.gif' alt='NEW'>" );
		if( to.getWgap() == 0 ) {
			sbHtml.append( "		<img src='images/icon_hot.gif' alt='HOT'> ");
		}
		sbHtml.append( " 				</div> " );
		sbHtml.append( " 			</td> " );
		sbHtml.append( " 		</tr> " );
		sbHtml.append( " 		<tr> " );
		sbHtml.append( " 			<td><div class='boardItem'><span class='bold_blue'>" + to.getWriter() + "</span></div></td> " );
		sbHtml.append( " 		</tr> " );
		sbHtml.append( " 		<tr> " );
		sbHtml.append( " 			<td><div class='boardItem'>" + to.getWdate() + " <font>|</font> Hit " + to.getHit()+ "</div></td> " );
		sbHtml.append( " 		</tr> " );
		sbHtml.append( " 		</table> " );
		sbHtml.append( " 	</div> " );
		sbHtml.append( " </td> " );
		
	}
%>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/board_list.css">
<style type="text/css">
<!--
	.board_pagetab { text-align: center; }
	.board_pagetab a { text-decoration: none; font: 12px verdana; color: #000; padding: 0 3px 0 3px; }
	.board_pagetab a:hover { text-decoration: underline; background-color:#f2f2f2; }
	.on a { font-weight: bold; }
-->
</style>
</head>

<body>
<!-- 상단 디자인 -->
<div class="contents1"> 
	<div class="con_title"> 
		<p style="margin: 0px; text-align: right">
			<img style="vertical-align: middle" alt="" src="images/home_icon.gif" /> &gt; 커뮤니티 &gt; <strong>여행지리뷰</strong>
		</p>
	</div> 
	<div class="contents_sub">	
		<div class="board_top">
			<div class="bold">
				<p>총 <span class="txt_orange"><%= blockRecord %></span>건</p>
			</div>
		</div>	
		
		<!--게시판-->
		<table class="board_list">
		<tr>
			<%= sbHtml %>
		</tr>
		</table>
		<!--//게시판-->	
		
		<div class="align_right">		
			<input type="button" value="쓰기" class="btn_write btn_txt01" style="cursor: pointer;" onclick="location.href='./write.do?cpage=<%=cpage %>'" />
		</div>
		
		<!--페이지넘버-->
		<div class="paginate_regular">
			<div class="board_pagetab">
			<%	
				if ( startBlock == 1 ) {
					out.println(" <span class='off'><a>&lt;&lt;</a></span> ");
				} else {
					out.println(" <span class='off'><a href='./list.do?cpage="+ (startBlock-blockPerPage) +"'>&lt;&lt;</a></span> ");
				}
				out.println(" &nbsp; ");
				
				if ( cpage == 1 ) {
					out.println(" <span class='off'><a>&lt;</a></span> ");
				} else {
					out.println(" <span class='off'><a href='./list.do?cpage="+ (cpage-1) +"'>&lt;</a></span> ");
				}
				out.println(" &nbsp;&nbsp; ");
				
				for ( int i=startBlock; i<=endBlock; i++ ) {
					if ( cpage == i ) { 
						out.println(" <span class='off'>[" + i + "]</span> ");
					} else {
						out.println(" <span class='off'><a href='./list.do?cpage=" + i + "'>" + i + "</a></span> ");
					}
				}
				out.println(" &nbsp;&nbsp; ");
				
				if ( cpage == totalPage ) {
					out.println(" <span class='off'><a>&gt;</a></span> ");
				} else {
					out.println(" <span class='off'><a href='./list.do?cpage="+ (cpage+1) +"'>&gt;</a></span> ");
				}
				out.println(" &nbsp; ");
				
				if ( endBlock == totalPage ) {
					out.println(" <span class='off'><a>&gt;&gt;</a></span> ");
				} else {
					out.println(" <span class='off'><a href='./list.do?cpage="+ (startBlock+blockPerPage) +"'>&gt;&gt;</a></span> ");
				}
				out.println(" &nbsp; ");
			%>
			<!-- 
				<span class="off"><a href="#">&lt;&lt;</a>&nbsp;&nbsp;</span>
				<span class="off"><a href="#">&lt;</a>&nbsp;&nbsp;</span>
				<span class="off"><a href="#">[ 1 ]</a></span>
				<span class="on"><a href="#">[ 2 ]</a></span>
				<span class="off"><a href="#">[ 3 ]</a></span>
				<span class="off">&nbsp;&nbsp;<a href="#">&gt;</a></span>
				<span class="off">&nbsp;&nbsp;<a href="#">&gt;&gt;</a></span>
				 -->
			</div>
		</div>
		<!--//페이지넘버-->	
  	</div>
</div>
<!--//하단 디자인 -->

</body>
</html>

-board_write1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	request.getParameter( "utf-8" );
	String cpage = request.getParameter( "cpage" );

%>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/board_write.css">

<script type="text/javascript">
	window.navigator.geolocation.getCurrentPosition( function(position) {
		var lat = position.coords.latitude;
		var lng = position.coords.longitude;
		
		console.log( lat + "/" + lng );
		document.wfrm.latitude.value = lat;
		document.wfrm.longitude.value = lng;
	}, 
	function(error) {
		switch(error.code){
		case error.PERMISSION_DENIED:
			str = "사용자 거부";
			break;
		case error.POSITION_UNAVAILABLE:
			str = "지리정보 없음";
			break;
		case error.TIMEOUT:
			str = "시간 초과";
			break;
		case error.UNKOWN_ERROR:
			str = "알 수 없는 에러";
			break;
		}
	})
	window.onload = function() {
		document.getElementById( 'submit1' ).onclick = function() {
			if ( document.wfrm.info.checked == false ) {
				alert( '동의를 해주세요' );
				return false;
			}
			if ( document.wfrm.writer.value.trim() == '' ) {
				alert( '글쓴이를 입력해주세요' );
				return false;
			}
			if ( document.wfrm.subject.value.trim() == '' ) {
				alert( '제목을 입력해주세요' );
				return false;
			}
			if ( document.wfrm.password.value.trim() == '' ) {
				alert( '비밀번호를 입력해주세요' );
				return false;
			}
			if ( document.wfrm.upload.value.trim() == '' ) {
				var fileValue = document.wfrm.upload.value.trim().split('\\');
				var filename = fileValue[fileValue.length-1];
				var fileEname = filename.substring(filename.length-4, filename.length);
				if ( fileEname == '.jpg' || fileEname == '.png' || fileEname == '.gif' ) {} 
				else {
					alert( '사진파일만 첨부해주세요.(jpg 또는  png, gif)' );
					document.wfrm.upload.value = '';
					return false;
				}
			}
			document.wfrm.submit();
		}
	}

	
</script>

</head>

<body>
<!-- 상단 디자인 -->
<div class="contents1"> 
	<div class="con_title"> 
		<p style="margin: 0px; text-align: right">
			<img style="vertical-align: middle" alt="" src="images/home_icon.gif" /> &gt; 커뮤니티 &gt; <strong>여행지리뷰</strong>
		</p>
	</div> 

	<form action="./write_ok.do" method="post" name="wfrm" enctype="multipart/form-data">
		<input type="hidden" name="cpage" value="<%=cpage %>" />
		<div class="contents_sub">
		<!--게시판-->
			<div class="board_write">
				<table>
				<tr>
					<th class="top">글쓴이</th>
					<td class="top" colspan="3"><input type="text" name="writer" value="" class="board_view_input_mail" maxlength="5" /></td>
				</tr>
				<tr>
					<th>제목</th>
					<td colspan="3"><input type="text" name="subject" value="" class="board_view_input" /></td>
				</tr>
				<tr>
					<th>비밀번호</th>
					<td colspan="3"><input type="password" name="password" value="" class="board_view_input_mail"/></td>
				</tr>
				<tr>
					<th>내용</th>
					<td colspan="3">
						<textarea name="content" class="board_editor_area"></textarea>
					</td>
				</tr>
				<tr>
					<th>이미지</th>
					<td colspan="3">
						<input type="file" name="upload" value="" class="board_view_input" /><br /><br />
						위도 : <input type="text" name="latitude" value="" class="board_view_input_mail" readonly/> / 
						경도 : <input type="text" name="longitude" value="" class="board_view_input_mail" readonly/>
					</td>
				</tr>
				<tr>
					<th>이메일</th>
					<td colspan="3"><input type="text" name="mail1" value="" class="board_view_input_mail"/> @ <input type="text" name="mail2" value="" class="board_view_input_mail"/></td>
				</tr>
				</table>
				
				<table>	
				<tr>
					<br />
					<td style="text-align:left;border:1px solid #e0e0e0;background-color:f9f9f9;padding:5px">
						<div style="padding-top:7px;padding-bottom:5px;font-weight:bold;padding-left:7px;font-family: Gulim,Tahoma,verdana;">※ 개인정보 수집 및 이용에 관한 안내</div>
						<div style="padding-left:10px;">
							<div style="width:97%;height:95px;font-size:11px;letter-spacing: -0.1em;border:1px solid #c5c5c5;background-color:#fff;padding-left:14px;padding-top:7px;"> 
								 1. 수집 개인정보 항목 : 회사명, 담당자명, 메일 주소, 전화번호, 홈페이지 주소, 팩스번호, 주소 <br />
								 2. 개인정보의 수집 및 이용목적 : 제휴신청에 따른 본인확인 및 원활한 의사소통 경로 확보 <br />
								 3. 개인정보의 이용기간 : 모든 검토가 완료된 후 3개월간 이용자의 조회를 위하여 보관하며, 이후 해당정보를 지체 없이 파기합니다. <br />
								 4. 그 밖의 사항은 개인정보취급방침을 준수합니다.
							</div>
						</div>
						<div style="padding-top:7px;padding-left:5px;padding-bottom:7px;font-family: Gulim,Tahoma,verdana;">
							<input type="checkbox" name="info" value="1" class="input_radio"> 개인정보 수집 및 이용에 대해 동의합니다.
						</div>
					</td>
				</tr>
				</table>
			</div>

			<div class="btn_area">
				<div class="align_left">			
					<input type="button" value="목록" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='./list.do?cpage=<%=cpage %>'" />
				</div>
				<div class="align_right">			
					<input type="button" value="쓰기" id="submit1" class="btn_write btn_txt01" style="cursor: pointer;" />					
				</div>	
			</div>	
			<!--//게시판-->
		</div>
	</form>
</div>
<!-- 하단 디자인 -->

</body>
</html>

-board_write1_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String cpage = (String)request.getAttribute( "cpage" );
	int flag = (Integer)request.getAttribute( "flag" );
	
	out.println( " <script type='text/javascript'> " );
	if( flag == 0 ) {
		out.println( " alert('글쓰기에 성공했습니다.'); " );
		out.println( " location.href='./list.do?cpage=" + cpage + "'" );
	} else {
		out.println( " alert('글쓰기에 실패했습니다.'); " );
		out.println( " history.back(); " );
	}
	out.println( " </script> " );

%>

-board_view1.jsp

<%@page import="java.util.ArrayList"%>
<%@page import="com.exam.album.model1.BoardTO"%>
<%@page import="com.exam.album.model1.CommentTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding( "utf-8" );
	String cpage = request.getParameter( "cpage" );
	String seq = request.getParameter( "seq" );
	
	BoardTO to = (BoardTO)request.getAttribute( "to" );	
	
	seq = to.getSeq();
	String subject = to.getSubject();
	String writer = to.getWriter();
	String mail = to.getMail();
	String wip = to.getWip();
	String wdate = to.getWdate();
	String hit = to.getHit();
	String latitude = to.getLatitude();
	String logitude = to.getLogitude();
	String content = to.getContent();
	String filename = to.getFilename();
	
	ArrayList<CommentTO> lists = (ArrayList)request.getAttribute( "lists" );
	StringBuffer sbHtml = new StringBuffer();
	
	for( CommentTO commentTo : lists ) {
		sbHtml.append( "<table>" );
		sbHtml.append( "	<tr>" );
		sbHtml.append( "	<td class='coment_re' width='20%'>" );
		sbHtml.append( "		<strong>"+ commentTo.getWriter() +"</strong> ("+ commentTo.getWdate() +")" );
		sbHtml.append( "		<div class='coment_re_txt'>" );
		sbHtml.append( "			"+ commentTo.getContent() +"" );
		sbHtml.append( "		</div>" );
		sbHtml.append( "	</td>" );
		sbHtml.append( "</tr>" );
		sbHtml.append( "</table>" );
	}
	
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/board_view.css">

<script type="text/javascript">
const commentOk = function() {
	if( document.cfrm.cwriter.value.trim() == '' ) {
		alert( '작성자명을 입력해주세요' );
		return false;
	}
	if ( document.cfrm.cpassword.value.trim() == '' ) {
		alert( '비밀번호를 입력해주세요' );
		return false;
	}
	if( document.cfrm.ccontent.value.trim() == '' ) {
		alert( '댓글 내용을 입력해주세요' );
		return false;
	}
	document.cfrm.submit();
}
</script>

</head>

<body>
<!-- 상단 디자인 -->
<div class="contents1"> 
	<div class="con_title"> 
		<p style="margin: 0px; text-align: right">
			<img style="vertical-align: middle" alt="" src="images/home_icon.gif" /> &gt; 커뮤니티 &gt; <strong>여행지리뷰</strong>
		</p>
	</div>

	<div class="contents_sub">	
	<!--게시판-->
		<div class="board_view">
			<table>
			<tr>
				<th width="10%">제목</th>
				<td width="60%"><%=subject %>(<%=wip%>)</td>
				<th width="10%">등록일</th>
				<td width="20%"><%=wdate %></td>
			</tr>
			<tr>
				<th>글쓴이</th>
				<td><%=writer %></td>
				<th>조회</th>
				<td><%=hit %></td>
			</tr>
			<tr>
				<th>위치정보</th>
				<td>
					위도 : (<%=latitude %>) / 경도 : (<%=logitude %>)
				</td>
				<th></th>
				<td></td>
			</tr>
			<tr>
				<td colspan="4" height="200" valign="top" style="padding:20px; line-height:160%">
					<div id="bbs_file_wrap">
						<div>
							<img src="upload/<%=filename %>" width="900" onerror="" /><br />
						</div>
					</div>
					<%=content %>
				</td>
			</tr>			
			</table>
			<%= sbHtml %>
<!-- 			<table>
			<tr>
				<td class="coment_re" width="20%">
					<strong>54545</strong> (2016.09.19 02:00)
					<div class="coment_re_txt">
						Test
					</div>
				</td>
			</tr>
			<tr>
				<td class="coment_re" width="20%">
					<strong>하오리</strong> (2016.09.19 07:54)
					<div class="coment_re_txt">
						우리는 민족 중흥의 역사적 사명을 띄고 이 땅에 태어났다. 조상의 빛난 얼을 오늘에 되살려
					</div>
				</td>
			</tr>
			</table> -->

			<form action="commentOk.do" method="post" name="cfrm">
			<input type="hidden" name="seq" value="<%=seq %>" />
			<input type="hidden" name="cpage" value="<%=cpage %>" />
			<table>
			<tr>
				<td width="94%" class="coment_re">
					글쓴이 <input type="text" name="cwriter" maxlength="5" class="coment_input" />&nbsp;&nbsp;
					비밀번호 <input type="password" name="cpassword" class="coment_input pR10" />&nbsp;&nbsp;
				</td>
				<td width="6%" class="bg01"></td>
			</tr>
			<tr>
				<td class="bg01">
					<textarea name="ccontent" cols="" rows="" class="coment_input_text"></textarea>
				</td>
				<td align="right" class="bg01">
					<input type="button" id="submit1" value="댓글등록" class="btn_re btn_txt01" onclick="commentOk()" />
				</td>
			</tr>
			</table>
			</form>
		</div>
		<div class="btn_area">
			<div class="align_left">			
				<input type="button" value="목록" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='./list.do?cpage=<%=cpage %>'" />
			</div>
			<div class="align_right">
				<input type="button" value="수정" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='./modify.do?cpage=<%=cpage%>&seq=<%=seq%>'" />
				<input type="button" value="삭제" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='./delete.do?cpage=<%=cpage%>&seq=<%=seq%>'" />
				<input type="button" value="쓰기" class="btn_write btn_txt01" style="cursor: pointer;" onclick="location.href='./write.do?cpage=<%=cpage%>'" />
			</div>
		</div>
		<!--//게시판-->
	</div>
<!-- 하단 디자인 -->
</div>

</body>
</html>

-board_view1_comment_ok.jsp

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

<%
	String cpage = (String)request.getAttribute( "cpage" );
	String seq = (String)request.getAttribute( "seq" );
	int flag = (Integer)request.getAttribute( "flag" );
	
	out.println( " <script type='text/javascript'> " );
	if( flag == 0 ) {
		out.println( " alert('댓글쓰기에 성공했습니다.'); " );
		out.println( " location.href='./view.do?cpage=" + cpage + "&seq="+ seq +"'" );
	} else {
		out.println( " alert('글쓰기에 실패했습니다.'); " );
		out.println( " history.back(); " );
	}
	out.println( " </script> " );

%>

-board_delete1.jsp

<%@page import="com.exam.album.model1.BoardTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding( "utf-8" );
	String seq = request.getParameter( "seq" );
	String cpage = (String)request.getAttribute( "cpage" );
	
	BoardTO to = (BoardTO)request.getAttribute( "to" );
	
	String writer = to.getWriter();
	String subject = to.getSubject();
%>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/board_write.css">

<script type="text/javascript">
window.onload = function() {
	document.getElementById('submit1').onclick = function() {
		if( document.dfrm.password.value.trim() == '' ) {
			alert('비밀번호를 입력해주세요');
			return false;
		}
		document.dfrm.submit();
	}
}
</script>

</head>

<body>
<!-- 상단 디자인 -->
<div class="contents1"> 
	<div class="con_title"> 
		<p style="margin: 0px; text-align: right">
			<img style="vertical-align: middle" alt="" src="images/home_icon.gif" /> &gt; 커뮤니티 &gt; <strong>여행지리뷰</strong>
		</p>
	</div> 

	<form action="delete_ok.do" method="post" name="dfrm">
		<input type="hidden" name="seq" value="<%=seq %>" />
		<input type="hidden" name="cpage" value="<%=cpage %>" />
		<div class="contents_sub">
		<!--게시판-->
			<div class="board_write">
				<table>
				<tr>
					<th class="top">글쓴이</th>
					<td class="top" colspan="3"><input type="text" name="writer" value="<%=writer %>" class="board_view_input_mail" maxlength="5" /></td>
				</tr>
				<tr>
					<th>제목</th>
					<td colspan="3"><input type="text" name="subject" value="<%=subject %>" class="board_view_input" /></td>
				</tr>
				<tr>
					<th>비밀번호</th>
					<td colspan="3"><input type="password" name="password" value="" class="board_view_input_mail"/></td>
				</tr>
				</table>
			</div>

			<div class="btn_area">
				<div class="align_left">			
					<input type="button" value="목록" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='./list.do?cpage=<%=cpage %>'" />
					<input type="button" value="보기" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='./view.do?cpage=<%=cpage %>&seq=<%=seq %>'" />
				</div>
				<div class="align_right">			
					<input type="button" value="삭제" id="submit1" class="btn_write btn_txt01" style="cursor: pointer;" />					
				</div>	
			</div>	
			<!--//게시판-->
		</div>
	</form>
</div>
<!-- 하단 디자인 -->

</body>
</html>

-board_delete1_ok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding( "utf-8" );
	String cpage = (String)request.getAttribute( "cpage" );
	int flag = (Integer)request.getAttribute( "flag" );
	
	out.println(" <script type='text/javascript'> ");
	if ( flag == 0 ) {
		out.println(" alert( '글삭제에 성공했습니다.' ); ");
		out.println( " location.href='./list.do?cpage=" + cpage + "'" );
	} else if ( flag == 1 ) {
		out.println(" alert( '비밀번호가 틀립니다.' ); ");
		out.println(" history.back(); ");
	} else {
		out.println(" alert( '글삭제에 실패했습니다.' ); ");
		out.println(" history.back(); ");
	}
	
	out.println(" </script> ");
%>

-board_modify1.jsp

<%@page import="com.exam.album.model1.BoardTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding( "utf-8" );
	String seq = request.getParameter( "seq" );
	String cpage = request.getParameter( "cpage" );
	
	BoardTO to = (BoardTO)request.getAttribute( "to" );
	
	String writer = to.getWriter();
	String subject = to.getSubject();
	String content = to.getContent();
	String filename = to.getFilename();
	String mail[] = null;
	if ( to.getMail().equals("") ) {
		mail = new String[] {"", ""};
	} else {
		mail = to.getMail().split("@");
	}

%>

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/board_write.css">

<script type="text/javascript">
window.navigator.geolocation.getCurrentPosition( function(position) {
	var lat = position.coords.latitude;
	var lng = position.coords.longitude;
	
	console.log( lat + "/" + lng );
	document.mfrm.latitude.value = lat;
	document.mfrm.longitude.value = lng;
}, function(error) {
	switch(error.code){
		case error.PERMISSION_DENIED:
			str = "사용자 거부";
			break;
		case error.POSITION_UNAVAILABLE:
			str = "지리정보 없음";
			break;
		case error.TIMEOUT:
			str = "시간 초과";
			break;
		case error.UNKOWN_ERROR:
			str = "알 수 없는 에러";
			break;
	}
})
window.onload = function() {
	document.getElementById('submit1').onclick = function() {
		if( document.mfrm.subject.value.trim() == '' ) {
			alert( '제목을 입력해주세요' );
			return false;
		}
		if ( document.mfrm.password.value.trim() == '' ) {
			alert( '비밀번호를 입력해주세요' );
			return false;
		}
		if ( document.mfrm.content.value.trim() == '' ) {
			alert( '내용을 입력해주세요' );
			return false;
		}
		document.mfrm.submit();
	}
}
</script>

</head>

<body>
<!-- 상단 디자인 -->
<div class="contents1"> 
	<div class="con_title"> 
		<p style="margin: 0px; text-align: right">
			<img style="vertical-align: middle" alt="" src="images/home_icon.gif" /> &gt; 커뮤니티 &gt; <strong>여행지리뷰</strong>
		</p>
	</div> 

	<form action="modify_ok.do" method="post" name="mfrm" enctype="multipart/form-data">
		<input type="hidden" name="seq" value="<%= seq %>">
		<input type="hidden" name="cpage" value="<%= cpage %>">
		<div class="contents_sub">
		<!--게시판-->
			<div class="board_write">
				<table>
				<tr>
					<th class="top">글쓴이</th>
					<td class="top" colspan="3"><input type="text" name="writer" value="<%= writer %>" class="board_view_input_mail" maxlength="5" /></td>
				</tr>
				<tr>
					<th>제목</th>
					<td colspan="3"><input type="text" name="subject" value="<%= subject %>" class="board_view_input" /></td>
				</tr>
				<tr>
					<th>비밀번호</th>
					<td colspan="3"><input type="password" name="password" value="" class="board_view_input_mail"/></td>
				</tr>
				<tr>
					<th>내용</th>
					<td colspan="3">
						<textarea name="content" class="board_editor_area"><%=content %></textarea>
					</td>
				</tr>
				<tr>
					<th>이미지</th>
					<td colspan="3">
						기존 이미지 : <%=filename %><br /><br />
						<input type="file" name="upload" value="<%=filename %>" class="board_view_input" /><br /><br />
						위도 : <input type="text" name="latitude" value="" class="board_view_input_mail" readonly/> / 
						경도 : <input type="text" name="longitude" value="" class="board_view_input_mail" readonly/>
					</td>
				</tr>
				<tr>
					<th>이메일</th>
					<td colspan="3"><input type="text" name="mail1" value="<%=mail[0] %>" class="board_view_input_mail"/> @ <input type="text" name="mail2" value="<%=mail[1] %>" class="board_view_input_mail"/></td>
				</tr>
				</table>
			</div>

			<div class="btn_area">
				<div class="align_left">			
					<input type="button" value="목록" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='./list.do?cpage=<%=cpage %>'" />
					<input type="button" value="보기" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='./view.do?cpage=<%=cpage %>&seq=<%=seq %>'" />
				</div>
				<div class="align_right">			
					<input type="button" id="submit1" value="수정" class="btn_write btn_txt01" style="cursor: pointer;" />
				</div>	
			</div>	
			<!--//게시판-->
		</div>
	</form>
</div>
<!-- 하단 디자인 -->

</body>
</html>

-board_modify1_ok.jsp

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

<%
	request.setCharacterEncoding( "utf-8" );
	String seq = (String)request.getAttribute( "seq" );
	String cpage = (String)request.getAttribute( "cpage" );
	int flag = (Integer)request.getAttribute( "flag" );
	
	
	out.println( " <script type='text/javascript'> " );
	if( flag == 0 ) {
		out.println( " alert('글수정에 성공했습니다.'); " );
		out.println( " location.href='./view.do?seq="+seq +"&cpage="+cpage+"'" );
	} else if ( flag == 1 ) {
		out.println( " alert('비밀번호가 틀립니다.'); " );
		out.println( " history.back(); " );
	} else {
		out.println( " alert('글수정에 실패했습니다.'); " );
		out.println( " history.back(); " );
	}
	out.println( " </script> " );
	
%>

 

마지막 실행jsp파일이다.

-index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	response.sendRedirect( "./list.do" );
%>

 

은근히 오래걸리는 과제였다...

 

 

 

 

728x90
반응형
Comments