본문 바로가기
Web & Mobile/JSP

Lecture 48 - JSP(6) 필수요소이해, 리다이렉트, Session, Application, Buffer, pageContext, Model1기법 게시판

by Bennyziio 2019. 5. 23.
반응형
java                            - web
        jsp
                - html
                - java
                - class
        servlet
                - java
                - class
        분업화

JSP - 필수 요소  이해

지금까지 JSP 소스 코드를 여럿 작성하여 실행했다. 웹 브라우저에 주소를 입력하면 JSP가 실행되는 것처럼 보였지만, 실제로 JSP를 실행하는 과정은 매우 복잡하다.  웹 브라우저에 JSP 페이지에 해당하는 URL을 입력하면, 톰캣 서버는 아래 그림과 같은 과정을 거쳐 JSP 페이지를 실행한다.

WAS는 JSP 페이지에 대한 요청이 들어오면 다음과 같은 처리를 한다.

· JSP에 해당하는 서블릿이 존재하지 않을 경우 (과정 1. 1)
  - JSP 페이지로부터 자바 코드를 생성한다.(과정 1. 2)
  -  자바 코드를 컴파일해서 서블릿 클래스를 생성한다. (과정1. 3)
  - 서블릿에 클라이언트 요청을 전달한다. (과정 2. 1)
  - 서블릿이 요청을 처리한 결과를 응답으로 생선한다. (과정 2. 2)
  - 응답을 웹 브라우저에 전송한다. (과정 3)

· JSP에 해당하는 서블릿이 존재하는 경우 (즉, 이미 과정 1.1 ~ 1.3을 거친 경우)
  - 서블릿에 클라리언트 요청을 전달한다. (과정 2. 1)
  - 서블릿이 요청을 처리한 결과를 응답으로 생성한다. (과정 2. 2)
  - 응답을 웹 브라우저에 전송한다. (과정 3)

즉, JSP 페이지를 요청할 때에는 JSP를 직접 실행하는 것이 아니라, JSP를 자바 소스코드로 변환한 뒤 컴파일해서 생성한 서블릿을 실행하는 것이다. 여기서 JSP 페이지를 자바 코드로 변경하는 단계를 "변환(translation) 단계"(과정 1. 2)라고 하며, 자바 코드를 서블릿 클래스로 변경하는 단계를 "컴파일(compile) 단계" (과정 1. 3)라고 한다.

/*
 * Generated by the Jasper component of Apache Tomcat
 * Version: Apache Tomcat/8.5.32
 * Generated at: 2018-07-20 03:01:16 UTC
 * Note: The last modified time of this file was set to
 *       the last modified time of the source file after
 *       generation to assist with modification tracking.
 */
package org.apache.jsp.board2;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public final class board_005fdelete1_005fok_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  private static final java.util.Set<java.lang.String> _jspx_imports_packages;

  private static final java.util.Set<java.lang.String> _jspx_imports_classes;

  static {
    _jspx_imports_packages = new java.util.HashSet<>();
    _jspx_imports_packages.add("javax.servlet");
    _jspx_imports_packages.add("javax.servlet.http");
    _jspx_imports_packages.add("javax.servlet.jsp");
    _jspx_imports_classes = new java.util.HashSet<>();
    _jspx_imports_classes.add("javax.naming.InitialContext");
    _jspx_imports_classes.add("java.sql.SQLException");
    _jspx_imports_classes.add("java.sql.Connection");
    _jspx_imports_classes.add("javax.sql.DataSource");
    _jspx_imports_classes.add("javax.naming.Context");
    _jspx_imports_classes.add("javax.naming.NamingException");
    _jspx_imports_classes.add("java.sql.PreparedStatement");
  }

  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }

  public java.util.Set<java.lang.String> getPackageImports() {
    return _jspx_imports_packages;
  }

  public java.util.Set<java.lang.String> getClassImports() {
    return _jspx_imports_classes;
  }

  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }

  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
      return;
    }

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");

	request.setCharacterEncoding("utf-8");

	String seq = request.getParameter("seq");
	String password = request.getParameter("password");
	
	String dbUrl = text);
    }
  }
}

톰캣은 work 폴더에 JSP를 변환한 자바 소스 코드와 서블릿 클래스를 생선한다. 예를 들어 그동안 실행했던 JSP의 자바 소스 코드와 서블릿 클래스는 아래 그림과 같이 찾아볼 수 있다.

메타데이터와 톰캣의 경로가 비슷하다

메타 데이터와 워크스페이스 경로가 비슷하다

메타데이터와 워크스페이스간 소스들이 서로 하나씩 생기고 동기화를 하게 된다. 그리하여 소스를 작성하고 불러왔는데 예전 소스가 불러와진다면 기존 디렉토리를 지우고 다시 만들어주면 이런 현상이 사라진다. 이런 원인은 이클립스가 처리할 데이터가 많아서 동기화에 실패해서 생기는 버그현상이다.

NOTE
JP를 실행한다는 말은 곧 JSP 페이지를 컴파일한 결과인 서블릿 클래스를 실행한다는 의미가 된다. 정확하게 표현하기 위해서는 'JSP 페이지를 컴파일 한 서블릿'이라고 할 수 있다.

JSP 기본객체
        인스턴스화를 이미해서 객체변수를 제공하는 객체

        request <- new 없이 할 수 있는 객체변수

- Request  : 요청
    # 요청 정보(서버, 클라이언트) - header
    # 요청 파라메타
- Response : 응답
    # 헤더 정보 입력
    # 리다이렉트 하기

리다이렉트 기능의 흐름

리다이렉트는 웹 서버가 웹 브라우저에게 다른 페이지로 이동하라고 응답하는 기능이다. 예를 들어 사용자가 로그인에 성공한 후 메인 페이지로 자동 이동하는 사이트가 많은데 이렇게 특정 페이지를 실행한 후 지정한 페이지로 이동하길 원할 때 리다이렉트 기능을 사용한다.

JSPEx02.redirect - 리다이렉트 사용 법

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	response.sendRedirect("https://www.daum.net");
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//response.sendRedirect("https://www.daum.net");

	out.println("<script type='text/javascript'>");
	out.println("location.href='https://www.naver.com';");
	out.println("</script>");
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//response.sendRedirect("https://www.daum.net");

	out.println("<script type='text/javascript'>");
	out.println("alert('새로운 이동');");
	out.println("location.href='https://www.naver.com';");
	out.println("</script>");
%>


- Session : 내부 데이터 저장
- Application :  내부 데이터 저장

JSPEx02.applicaiton - application 기본 객체

web.xml은 웹에 대한 데이터파일 구성을 가지고 있는 것으로 나중엔 복사해서 붙여넣기 해도 된다
ApplicationEx01.web.xml 파일 내 context-param을 작성하여 셋팅해준다.

<?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" id="WebApp_ID" version="3.1">
  <display-name>ApplicationEx01</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>
  <context-param>
  		<description>로깅 여부</description>
  		<param-name>longEnabled</param-name>
  		<param-value>true</param-value>
  </context-param>
  
  <context-param>
  		<description>디버깅 레벨</description>
  		<param-name>debugLevel</param-name>
  		<param-value>5</param-value>
  </context-param>
</web-app>

ApplicationEx01.application

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.Enumeration"%>
<!-- application1.jsp -->
<%
	// applicaiton parameter
	Enumeration<String>	initParamEnum = application.getInitParameterNames();

	while(initParamEnum.hasMoreElements()) {
		String initParamName = initParamEnum.nextElement();
		out.println(initParamName + "<br />");
		
	}
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.Enumeration"%>
<!-- application1.jsp -->
<%
	// applicaiton parameter
	Enumeration<String>	initParamEnum = application.getInitParameterNames();

	while(initParamEnum.hasMoreElements()) {
		String initParamName = initParamEnum.nextElement();
		out.println(initParamName + "<br />");
		out.println(application.getInitParameter(initParamName) + "<br />");
	}
%>

application2를 만들어도 web.xml에 셋팅된 값으로 출력된다.

ApplicationEx01.application3

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	out.println(application.getRealPath("."));
	// eclipse
	// C:\jQuery\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ApplicationEx01
	// c:\톰캣...
	
	// jsp -> 절대 경로
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.io.FileReader"%>
<%@page import="java.io.BufferedReader"%>
<%
	out.println(application.getRealPath("."));
	// eclipse
	// C:\jQuery\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ApplicationEx01
	// c:\톰캣...
	
	// jsp -> 절대 경로
	// C:\jQuery\eclipse-workspace\ApplicationEx01\WebContent\message\notice.txt
	
	BufferedReader br = null;
	
	br = new BufferedReader(new FileReader("C:/jQuery/eclipse-workspace/ApplicationEx01/WebContent/message/notice.txt"));
	
	String line = "";
	while((line = br.readLine()) != null) {
		out.println(line + "<br />");
	}
%>

실제 코드가 돌아가는 위치는 위와 같다

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.io.FileReader"%>
<%@page import="java.io.BufferedReader"%>
<%
	out.println(application.getRealPath("./message/notice.txt"));
	// eclipse
	// C:\jQuery\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ApplicationEx01
	// c:\톰캣...
	
	// jsp -> 절대 경로
	//C:\jQuery\eclipse-workspace\ApplicationEx01\WebContent\message\notice.txt
	
	BufferedReader br = null;
	
	br = new BufferedReader(
			//new FileReader("C:/jQuery/eclipse-workspace/ApplicationEx01/WebContent/message/notice.txt"));
			new FileReader(application.getRealPath("./message/notice.txt")));
	
	String line = "";
	while((line = br.readLine()) != null) {
		out.println(line + "<br />");
	}
%>

실제 위치 경로에서 가져 오는 법

* page : 내부 데이터 저장
- Out : 출력
  : JSP 페이지가 생성하는 모든 내용은 out 기본 객체를 통해 전송된다. JSP 페이지 내에서 사용하는 비-스크립트 요소들(HTML 코드와 텍스트)은 out 기본 객체에 그대로 전달된다. 값을 출력하는 표현식의 결과값도 out 기본 객체에 전달된다.
    # print() : 데이터를 출력한다.
    # println() : 데이터를 출력하고, 줄바꿈문자(\r\n 또는 \n)를 출력한다.
    # newLine() : 줄바꿈문자 (\r\n 또는 \n)를 출력한다.

out 기본 객체의 버퍼 관련 메서드

기본적으로 버퍼가 다 차면 자동으로 데이터를 전송

Flush
: 버퍼가 다 찼을 때, 버퍼에 쌓인 데이터를 실제로 전송되어야 할 곳(또는 저장되어야 할 곳)에 전송하고(또는 저장하고) 버퍼를 비우는 것을 플러시라고 한다.
autoFlush
- true : 버퍼가 다 차면 버퍼를 플러시하고 계속해서 작업을 진행한다.
- false : 버퍼가 다 차면 익셉션을 발생시키고 작업을 중지한다.

JSPEx02.buffer1 - out 기본 객체의 버퍼 기능

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

<%
	out.println("버퍼 크기 : " + out.getBufferSize());
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page buffer = "16kb" %>
<%
	out.println("버퍼 크기 : " + out.getBufferSize());
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page buffer = "16kb" %>
<%
	out.println("버퍼 크기 : " + out.getBufferSize() + "<br />");
	out.println("버퍼 남은 크기 : " + out.getRemaining() + "<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("버퍼 남은 크기 : " + out.getRemaining());
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	out.println("버퍼 크기 : " + out.getBufferSize() + "<br />");
	out.println("버퍼 남은 크기 : " + out.getRemaining() + "<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("Hello World<br />");
	out.println("버퍼 남은 크기 : " + out.getRemaining());
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page buffer = "1kb" autoFlush="false"%>
<%
	out.println("버퍼 크기 : " + out.getBufferSize() + "<br />");
	out.println("버퍼 남은 크기 : " + out.getRemaining() + "<br />");
	for(int i=1; i<1000; i++) {
		out.println("Hello World<br />");
		if(i%200 == 0) {
			out.println("버퍼 남은 크기 : " + out.getRemaining());
		}
	}
%>

error : JSP Buffer overflow

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page buffer = "1kb" autoFlush="true"%>
<%

	// flush - 자동 비움(클라이언트 전송 후 버퍼 지우기)
	
	out.println("버퍼 크기 : " + out.getBufferSize() + "<br />");
	out.println("버퍼 남은 크기 : " + out.getRemaining() + "<br />");
	for(int i=1; i<1000; i++) {
		out.println("Hello World<br />");
		if(i%200 == 0) {
			out.println("버퍼 남은 크기 : " + out.getRemaining());
		}
	}
%>

autoFlush = true일때 자동 비움기능으로 에러 없이 출력 됨

JSPEx02.buffer2

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	out.println(out.getRemaining() + "<br />");
	out.println("1<br />");
	out.println("2<br />");
	out.println("3<br />");
	// client로 전송
	out.flush();
	out.println(out.getRemaining() + "<br />");
	out.println("4<br />");
	out.println("5<br />");
	out.println("6<br />");
	// buffer의 삭제
	out.clearBuffer();
	out.println(out.getRemaining() + "<br />");
	out.println("7<br />");
	out.println("8<br />");
	// script 종료
	out.close();
	out.println("9<br />");
	out.println("10<br />");
%>


위 5가지를 독수리 오형제라고 부르며 이 것들 가지고 거의 모든 소스를 작성할 수 있다고 한다.

- pageContext

JSPEx02.pageContext1

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	out.println("Hello JSP<br />");

	JspWriter writer = pageContext.getOut();
	writer.println("Hello JSP<br />");
%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	out.println("Hello JSP<br />");

	JspWriter writer = pageContext.getOut();
	writer.println("Hello JSP<br />");
	
	// 참조내용
	out.println(out + "<br />");
	out.println(writer + "<br />");
%>

out, writer 객체 변수를 출력하게 하면 주소값이 나온다

- config
- exception
위 3가지는 추가적인 객체변수들이다.

jsp                             프로그램
        1. 하드코딩(날코딩)
        2. model1 기법
                beans 사용
                -> 클라이언트의 요청과 응답은 jsp에서 하고 업무처리는 클래스화 시킴
                이것이 model1 기법

                * 클래스
                        데이터 저장용 - to/vo
                                - 테이블명
                                * 가장 긴 select명과 비슷
                        데이터 처리용 - dao
                                * 메서드화
                                페이지와 1:1
                
                액션태그 - 솔루션(물건을 팔 목적)
                자바 - 개발의 목적(*)

BeanEx01.MemberTo

패키지를 반드시 먼저 만들어 주어야 한다.

package pack1;

// TO - transfer object
public class MemberTo {
	private String id;
	private String password;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

BeanEx01.bean1

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="pack1.MemberTo"%>
<%
	MemberTo to = new MemberTo();
	to.setId("tester");
	to.setPassword("1234");
	
	out.println(to.getId() + "<br />");
	out.println(to.getPassword() + "<br />");
%>

BeanEx01.bean2 - useBean

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

<!-- 액션태그(서버에서 해석되는 태그) -->
<jsp:useBean id="to" class="pack1.MemberTo" />

<%
	to.setId("tester");
	to.setPassword("1234");
	
	out.println(to.getId() + "<br />");
	out.println(to.getPassword() + "<br />");
%>

BeanEx01.bean3 - setProperty

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

<!-- 액션태그(서버에서 해석되는 태그) -->
<jsp:useBean id="to" class="pack1.MemberTo" />
<jsp:setProperty property="id" name="to" value="tester"/>
<jsp:setProperty property="password" name="to" value="1234"/>
<%
	out.println(to.getId() + "<br />");
	out.println(to.getPassword() + "<br />");
%>

BeanEx01.bean4 - getProperty

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

<!-- 액션태그(서버에서 해석되는 태그) -->
<jsp:useBean id="to" class="pack1.MemberTo" />
<jsp:setProperty property="id" name="to" value="tester"/>
<jsp:setProperty property="password" name="to" value="1234"/>
<jsp:getProperty property="id" name="to"/><br />
<jsp:getProperty property="password" name="to"/><br />

BeanEx01.MemberTo - 수정

package pack1;

// TO - transfer object
public class MemberTo {
	private String id;
	private String password;
	
	public String getId() {
		System.out.println("getId()");
		return id;
	}
	public void setId(String id) {
		System.out.println("setId()");
		this.id = id;
	}
	public String getPassword() {
		System.out.println("getPassword()");
		return password;
	}
	public void setPassword(String password) {
		System.out.println("setPassword()");
		this.password = password;
	}
}

BeanEx01.bean5 - MemberTo를 위와 같이 수정한 뒤 출력

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

<!-- 액션태그(서버에서 해석되는 태그) -->
<jsp:useBean id="to" class="pack1.MemberTo" />

<jsp:setProperty property="id" name="to" value="tester"/>
<jsp:setProperty property="password" name="to" value="1234"/>

<jsp:getProperty property="id" name="to"/><br />
<jsp:getProperty property="password" name="to"/><br />

BeanEx01.form_ok

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@page import="pack1.MemberTo"%>
<%
	request.setCharacterEncoding("utf-8");

	MemberTo to = new MemberTo();
	
	to.setId(request.getParameter("id"));
	to.setPassword(request.getParameter("password"));
	
	out.println(to.getId() + "<br />");
	out.println(to.getPassword() + "<br />");
%>

BeanEx01.form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- form.jsp -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
<title>Insert title here</title>
</head>

<body>
<form action="./form_ok.jsp" method="post">
아이디 : <input type="text" name="id" />
비밀번호 : <input type="password" name="password" />
<input type="submit" value="전송" />
</form>

</body>

</html>

BeanEx01.form_ok2

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

<jsp:useBean id="to" class="pack1.MemberTo"></jsp:useBean>
<jsp:setProperty property="id" name="to" value='<%=request.getParameter("id") %>'/>
<jsp:setProperty property="password" name="to" value='<%=request.getParameter("password") %>'/>

<jsp:getProperty property="id" name="to" /><br />
<jsp:getProperty property="password" name="to" /><br />

BeanEx01.form_ok3

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

<jsp:useBean id="to" class="pack1.MemberTo"></jsp:useBean>

<!-- 자동 검색 -->
<jsp:setProperty property="*" name="to" />

<jsp:getProperty property="id" name="to" /><br />
<jsp:getProperty property="password" name="to" /><br />

Model1Ex01
ojdbc7.jar과 context.xml을 복사해서 붙여넣어주기

ModelEx01.model1.boardTO

package model1;
// 데이터
public class BoardTO {
	// data - table / select(list + view)
	private String seq;
	private String subject;
	private String writer;
	private String mail;
	private String[] email;
	private String password;
	private String content;
	private String hit;
	private String wip;
	private String wdate;
	private int wgap;
	
	public String getSeq() {
		return seq;
	}
	public void setSeq(String seq) {
		this.seq = seq;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getMail() {
		return mail;
	}
	public void setMail(String mail) {
		this.mail = mail;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getHit() {
		return hit;
	}
	public void setHit(String hit) {
		this.hit = hit;
	}
	public String getWip() {
		return wip;
	}
	public void setWip(String wip) {
		this.wip = wip;
	}
	public String getWdate() {
		return wdate;
	}
	public void setWdate(String wdate) {
		this.wdate = wdate;
	}
	public int getWgap() {
		return wgap;
	}
	public void setWgap(int wgap) {
		this.wgap = wgap;
	}
}

ModelEx01.model1.boardDAO

package model1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

// 각 페이지당 할일
public class BoardDAO {
	// jsp 처리할 일을 메소드화
	// jsp 페이지와 1 : 1
	private DataSource datasource = null;
	
	public BoardDAO() {
		// 데이터 소스를 얻어 냄
		try {
			Context initCtx = new InitialContext();
			Context envCtx = (Context)initCtx.lookup("java:comp/env");
			this.datasource = (DataSource)envCtx.lookup("jdbc/oracle1");
		} catch (NamingException e) {
			System.out.println("[에러] : " + e.getMessage());
		}
	}
	
	public void boardWrite() {
		// 할 일 없음
	}		
	public int boardWriteOk(BoardTO to) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		int flag = 1;
		
		try {
			conn = datasource.getConnection();		
			
			String sql = "insert into board1 values (board_seq.nextval, ?, ?, ?, ?, ?, 0, ?, sysdate)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, to.getSubject());
			pstmt.setString(2, to.getWriter());
			pstmt.setString(3, to.getMail());
			pstmt.setString(4, to.getPassword());
			pstmt.setString(5, to.getContent());
			pstmt.setString(6, to.getWip());
		
			int result = pstmt.executeUpdate();
			if(result == 1) {
				flag = 0;
			}
			
		} catch(SQLException e) {
			System.out.println("[에러] " + e.getMessage());
		} finally {
			if(pstmt != null) try {pstmt.close();} catch(SQLException e) {};
			if(conn != null) try {conn.close();} catch(SQLException e) {};
		}
		
		return flag;
	}
	public ArrayList<BoardTO> boardList() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<BoardTO> lists = new ArrayList<>();
		try {
			conn = datasource.getConnection();
			
			String sql = "select seq, subject, writer, to_char(wdate, 'YYYY/MM/DD') wdate, hit, trunc(sysdate-wdate) wgap from board1 order by seq desc";
			pstmt = conn.prepareStatement(sql);		

			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				BoardTO to = new BoardTO();
				to.setSeq(rs.getString("seq"));
				to.setSubject(rs.getString("subject"));
				to.setWriter(rs.getString("writer"));
				to.setWdate(rs.getString("wdate"));
				to.setHit(rs.getString("hit"));
				to.setWgap(rs.getInt("wgap"));
				
				lists.add(to);
			}
		} catch(SQLException e) {
			System.out.println("[에러] " + e.getMessage());
		} finally {
			if(rs != null) try {rs.close();} catch(SQLException e) {};
			if(pstmt != null) try {pstmt.close();} catch(SQLException e) {};
			if(conn != null) try {conn.close();} catch(SQLException e) {};
		}
		return lists;
	}
	public BoardTO boardView(BoardTO to) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			conn = datasource.getConnection();
			
			// 조회수
			String sql = "update board1 set hit = hit + 1 where seq=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, to.getSeq());
			
			pstmt.executeUpdate();
			
			// 조회
			sql = "select subject, writer, wdate, hit, content, mail from board1 where seq = ?";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, to.getSeq());
					
			rs = pstmt.executeQuery();
			if(rs.next()) {
				to.setSubject(rs.getString("subject"));
				to.setWriter(rs.getString("writer"));
				to.setWdate(rs.getString("wdate"));
				to.setHit(rs.getString("hit"));
				to.setContent(rs.getString("content") == null ? "" : rs.getString("content").replaceAll("\n", "<br />"));
				Content(rs.getString("content") == null ? "" : rs.getString("content").replaceAll("\n", "<br />"));
				to.setMail(rs.getString("mail"));
				
				int result = pstmt.executeUpdate();
				if(result == 1) {
					// 정상
					flag = 0;
				} else if (result == 0) {
					// 비밀번호 오류
					flag = 1;
				}
			}
		} catch(SQLException e) {
			System.out.println("[에러] " + e.getMessage());
		} finally {
			if(rs != null) try {rs.close();} catch(SQLException e) {};
			if(pstmt != null) try {pstmt.close();} catch(SQLException e) {};
			if(conn != null) try {conn.close();} catch(SQLException e) {};
		}
		return flag;
	}
	public void boardDelete() {
		// 할 일 없음
	}
	public int boardDeleteOk(BoardTO to) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		int flag = 2;
		
		try {
			conn = datasource.getConnection();
			
			String sql = "delete from board1 where seq = ? and password = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, to.getSeq());
			pstmt.setString(2, to.getPassword());
		
			int result = pstmt.executeUpdate();
			if(result == 1) {
				// 정상
				flag = 0;
			} else if (result == 0) {
				// 비밀번호 오류
				flag = 1;
			}
			
		} catch(SQLException e) {
			System.out.println("[에러] " + e.getMessage());
		} finally {
			if(pstmt != null) try {pstmt.close();} catch(SQLException e) {};
			if(conn != null) try {conn.close();} catch(SQLException e) {};
		}
		return flag;
	}
}

ModelEx01.board2.board_write1

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!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() {
			//alert('click');
			if(document.frm.info.checked == false) {
				alert('동의하셔야 합니다.');
				return;
			}
			
			if(document.frm.writer.value.trim() == "") {
				alert('이름을 입력하셔야 합니다.');
				return;
			}
			
			if(document.frm.password.value.trim() == "") {
				alert('비밀번호를 입력하셔야 합니다.');
				return;
			}
			
			if(document.frm.subject.value.trim() == "") {
				alert('제목을 입력하셔야 합니다.');
				return;
			}
			
			document.frm.submit();
		};
	};
</script>
</head>

<body>
<!-- 상단 디자인 -->
<div class="con_title">
	<h3>게시판</h3>
	<p>HOME &gt; 게시판 &gt; <strong>게시판</strong></p>
</div>
<div class="con_txt">
	<form action="./board_write1_ok.jsp" method="post" name="frm">
		<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="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">
					<button type="button" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_list1.jsp'">목록</button>
				</div>
				<div class="align_right">
					<button type="button" id="submit1" class="btn_write btn_txt01" style="cursor: pointer;">등록</button>
				</div>
			</div>
			<!--//게시판-->
		</div>
	</form>
</div>
<!-- 하단 디자인 -->

</body>
</html>

ModelEx01.board2.board_write1_ok

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

<%@ page import="model1.BoardTO"%>
<%@ page import="model1.BoardDAO"%>

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

	String subject = request.getParameter("subject");
	String writer = request.getParameter("writer");
	String mail = request.getParameter("mail1") + "@" + request.getParameter("mail2");
	String password = request.getParameter("password");
	String content = request.getParameter("content");

	String wip = request.getRemoteAddr();

	BoardTO to = new BoardTO();
	to.setSubject(subject);
	to.setWriter(writer);
	to.setMail(mail);
	to.setPassword(password);
	to.setContent(content);
	to.setWip(wip);
	
	BoardDAO dao = new BoardDAO();
	int flag = dao.boardWriteOk(to);
	
	out.println("<script type='text/javascript'>");
	if(flag == 0) {
		out.println("alert('글쓰기에 성공했습니다.');");
		out.println("location.href='./board_list1.jsp';");
	} else if(flag == 1) {
		out.println("alert('글쓰기에 실패했습니다.');");
		out.println("history.back();");
	}
	out.println("</script>");
%>

ModelEx01.board2.board_list1

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

<!-- Java 전처리 -->
<%@ page import="java.util.ArrayList" %>
<%@ page import="model1.BoardTO" %>
<%@ page import="model1.BoardDAO" %>

<%
	BoardDAO dao = new BoardDAO();
	ArrayList<BoardTO> lists = dao.boardList();
	
	int totalRecord = lists.size();
	
	StringBuffer sb = new StringBuffer();
	
	for(BoardTO to : lists) {
		String seq = to.getSeq();
		String subject = to.getSubject();
		String writer = to.getWriter();
		String wdate = to.getWdate();
		String hit = to.getHit();
		int wgap = to.getWgap();
		
		sb.append("<tr>");
		sb.append("	<td>&nbsp;</td>");
		sb.append("	<td>" + seq + "</td>");
		if(wgap == 0 ) {
			sb.append("	<td class='left'><a href='./board_view1.jsp?seq=" + seq + "'>" + subject + "</a>&nbsp;<img src='../images/icon_hot.gif' alt='HOT'></td>");	
		} else {
			sb.append("	<td class='left'><a href='./board_view1.jsp?seq=" + seq + "'>" + subject + "</a></td>");
		}
		
		sb.append("	<td>" + writer + "</td>");
		sb.append("	<td>" + wdate + "</td>");
		sb.append("	<td>" + hit + "</td>");
		sb.append("	<td>&nbsp;</td>");
		sb.append("</tr>");
	}
%>

<!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">
</head>

<body>
<!-- 상단 디자인 -->
<div class="con_title">
	<h3>게시판</h3>
	<p>HOME &gt; 게시판 &gt; <strong>게시판</strong></p>
</div>
<div class="con_txt">
	<div class="contents_sub">
		<div class="board_top">
			<div class="bold">총 <span class="txt_orange">1</span>건</div>
		</div>

		<!--게시판-->
		<div class="board">
			<table>
			<tr>
				<th width="3%">&nbsp;</th>
				<th width="5%">번호</th>
				<th>제목</th>
				<th width="10%">글쓴이</th>
				<th width="17%">등록일</th>
				<th width="5%">조회</th>
				<th width="3%">&nbsp;</th>
			</tr>
			<tr>
			<!-- 시작 -->
			<%= sb %>
			<!-- 끝 -->
			</tr>
			</table>
		</div>	
		<!--//게시판-->

		<div class="align_right">
			<button type="button" class="btn_write btn_txt01" style="cursor: pointer;" onclick="location.href='board_write1.jsp'">쓰기</button>
		</div>
	</div>
</div>
<!--//하단 디자인 -->

</body>
</html>

ModelEx01.board2.board_view1

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

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

	String seq = request.getParameter("seq");
	
	BoardTO to = new BoardTO();
	to.setSeq(seq);
	BoardDAO dao = new BoardDAO();
	to = dao.boardView(to);
	
	String subject = to.getSubject();
	String writer = to.getWriter();
	String wdate = to.getWdate();
	String hit = to.getHit();
	String content = to.getContent();
	String mail = to.getMail();
%>

<!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">
</head>

<body>
<!-- 상단 디자인 -->
<div class="con_title">
	<h3>게시판</h3>
	<p>HOME &gt; 게시판 &gt; <strong>게시판</strong></p>
</div>
<div class="con_txt">
	<div class="contents_sub">
		<!--게시판-->
		<div class="board_view">
			<table>
			<tr>
				<th width="10%">제목</th>
				<td width="60%"><%= subject %></td>
				<th width="10%">등록일</th>
				<td width="20%"><%= wdate %></td>
			</tr>
			<tr>
				<th>글쓴이</th>
				<td><%= writer %><%= '(' + mail + ')' %></td>
				<th>조회</th>
				<td><%= hit %></td>
			</tr>
			<tr>
				<td colspan="4" height="200" valign="top" style="padding: 20px; line-height: 160%"><%= content %></td>
			</tr>
			</table>
		</div>

		<div class="btn_area">
			<div class="align_left">
				<button type="button" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_list1.jsp'">목록</button>
			</div>
			<div class="align_right">
				<button type="button" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_modify1.jsp?seq=<%= seq %>'">수정</button>
				<button type="button" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_delete1.jsp?seq=<%= seq %>'">삭제</button>
				<button type="button" class="btn_write btn_txt01" style="cursor: pointer;" onclick="location.href='board_write1.jsp'">쓰기</button>
			</div>
		</div>	
		<!--//게시판-->
	</div>
</div>
<!-- 하단 디자인 -->

</body>
</html>

ModelEx01.board2.board_modify1

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

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

	String seq = request.getParameter("seq");
	
	BoardTO to = new BoardTO();
	to.setSeq(seq);
	BoardDAO dao = new BoardDAO();
	to = dao.boardView(to);
	
	String subject = to.getSubject();
	String writer = to.getWriter();
	String content = to.getContent();
	String mail[] = to.getMail().split("@");
	if(mail.length == 0) {
		mail = new String[] {"", ""};
	}
	
%>
<!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.frm.writer.value.trim() == "") {
				alert('이름을 입력하셔야 합니다.');
				return;
			}
			
			if(document.frm.password.value.trim() == "") {
				alert('비밀번호를 입력하셔야 합니다.');
				return;
			}
			
			if(document.frm.subject.value.trim() == "") {
				alert('제목을 입력하셔야 합니다.');
				return;
			}
			
			document.frm.submit();
		};
	};
</script>
</head>

<body>
<!-- 상단 디자인 -->
<div class="con_title">
	<h3>게시판</h3>
	<p>HOME &gt; 게시판 &gt; <strong>게시판</strong></p>
</div>
<div class="con_txt">
	<form action="./board_modify1_ok.jsp" method="post" name="frm">
	<input type="hidden" name="seq" value="<%=seq %>" />
		<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" readonly/></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"><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">
					<button type="button" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_list1.jsp'">목록</button>
					<button type="button" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_view1.jsp?seq=<%=seq %>'">보기</button>
				</div>
				<div class="align_right">
					<button type="button" id="submit1" class="btn_write btn_txt01" style="cursor: pointer;">수정</button>
				</div>
			</div>
			<!--//게시판-->
		</div>
	</form>
</div>
<!-- 하단 디자인 -->

</body>
</html>

modify에서 email을 split해서 mail.length를 검사하는 구문이 있고 이것이 배열로 구성되어 있어 다시 값을 보내야 하는데 합쳐서 보내고 받은데서 또 나누어야 했었는데 DAO에서는 순수하게 통채 String으로 받기만 하고 modify1에서 받은 데이터를 split해서 나누어주게 하여 해결하였다.

ModelEx01.board2.board_modify1_ok

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

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

	String seq = request.getParameter("seq");
	String subject = request.getParameter("subject");
	String mail = request.getParameter("mail1") + "@" + request.getParameter("mail2");
	String password = request.getParameter("password");
	String content = request.getParameter("content");
	String wip = request.getRemoteAddr();
	
	BoardTO to = new BoardTO();
	to.setSubject(subject);
	to.setMail(mail);
	to.setPassword(password);
	to.setContent(content);
	to.setSeq(seq);
	
	BoardDAO dao = new BoardDAO();
	
	int flag = dao.boardModifyOk(to);
	
	out.println("<script type='text/javascript'>");
	if(flag == 0) {
		out.println("alert('글 수정에 성공했습니다.');");
		out.println("location.href='./board_list1.jsp';");
	} else if(flag == 1) {
		out.println("alert('비밀번호 오류입니다.');");
		out.println("history.back();");
	} else if(flag == 2) {
		out.println("alert('글 수정에 실패했습니다.');");
		out.println("history.back();");
	}
	out.println("</script>");
%>

ModelEx01.board2.board_delete1

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

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

	String seq = request.getParameter("seq");
	
	BoardTO to = new BoardTO();
	to.setSeq(seq);
	BoardDAO dao = new BoardDAO();
	to = dao.boardView(to);
	
	String subject = to.getSubject();
	String writer = to.getWriter();
%>
<!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.frm.password.value.trim() == "") {
				alert('비밀번호를 입력하셔야 합니다.');
				return;
			}
			
			document.frm.submit();
		};
	};
</script>
</head>

<body>
<!-- 상단 디자인 -->
<div class="con_title">
	<h3>게시판</h3>
	<p>HOME &gt; 게시판 &gt; <strong>게시판</strong></p>
</div>
<div class="con_txt">
	<form action="./board_delete1_ok.jsp" method="post" name="frm">
	<input type="hidden" name="seq" value="<%=seq %>" />	<!-- delete할 때 seq를 받아오기 위해 hidden으로해서 작성 / 브라우저에서 소스보기 하면 값 확인가능 -->
		<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" readonly/></td>
				</tr>
				<tr>
					<th>제목</th>
					<td colspan="3"><input type="text" name="subject" value="<%= subject %>" class="board_view_input" readonly/></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">
					<button type="button" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_list1.jsp'">목록</button>
					<button type="button" class="btn_list btn_txt02" style="cursor: pointer;" onclick="location.href='board_view1.jsp?seq=<%=seq %>'">보기</button>
				</div>
				<div class="align_right">
					<button type="button" id="submit1" class="btn_write btn_txt01" style="cursor: pointer;">삭제</button>
				</div>
			</div>
			<!--//게시판-->
		</div>
	</form>
</div>
<!-- 하단 디자인 -->

</body>
</html>

ModelEx01.board2.board_delete1_ok

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

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

	String seq = request.getParameter("seq");
	String password = request.getParameter("password");
	
	BoardTO to = new BoardTO();
	to.setSeq(seq);
	to.setPassword(password);
	
	BoardDAO dao = new BoardDAO();
	
	int flag = dao.boardDeleteOk(to);
	
	out.println("<script type='text/javascript'>");
	if(flag == 0) {
		out.println("alert('글 삭제에 성공했습니다.');");
		out.println("location.href='./board_list1.jsp';");
	} else if(flag == 1) {
		out.println("alert('비밀번호 오류입니다.');");
		out.println("history.back();");
	} else if(flag == 2) {
		out.println("alert('글 삭제에 실패했습니다.');");
		out.println("history.back();");
	}
	out.println("</script>");
%>

 

반응형

댓글