190718_Day69 서플릿 필터, 리스너, 파일업로드

<서블릿 필터>

  • 사용자 요청에 따라 서블릿이나 JSP의 실행 전후, 필요에 따라 기능을 추가, 삭제해주는 역할

  • 보통 클라이언트의 요청을 서블릿이 받기 전에 가로채어 필터에 작성된 내용을 수행 하는 것

  • 인증, 로깅/감사, 이미지변환, 데이터압축, 암호화 등..

  • javax.servlet.Filter

  • util이라는 패키지에 넣어봤습니다~

  • 환경설정 필요

    • Web.xml (WEB-INF안에)

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app version="3.0" 
               xmlns="http://java.sun.com/xml/ns/javaee" 
               xmlns:xml="http://www.w3.org/XML/1998/namespace" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd ">
      
       <!-- 리스너 등록(0718오후) -->
       <listener>
           <listener-class>t0718.MyListener</listener-class>
       </listener>
      
       <!-- 전체 서블릿과 JSP에서 공유할 데이터 (text) 정의 -->
       <context-param>
           <param-name>common</param-name>
           <param-value>진꼬복 많이 받으세요 :)</param-value>
       </context-param>
      
       <!-- 경로 변경시 이미지 쉽게 루트 변경하려면! -->
        <context-param>
           <param-name>imgPath</param-name>
           <param-value>/TomTest/image</param-value> <!-- 이제 여기만 고치면 되네! -->
       </context-param>
      
       <context-param>
           <param-name>rootPath</param-name>
           <param-value>/TomTest</param-value>
       </context-param>
      
       <!-- 필터 클래스 등록 -->
       <filter>
           <filter-name>enc</filter-name> <!-- 아무거나! -->
           <filter-class>util.enc.EncFilter</filter-class>
           <init-param>
               <description>설명은 여기에 적어, encoding초기값</description>
               <param-name>encType</param-name>
               <!-- 얘를 EncFilter.java에서 가져다 씀 -->
               <param-value>UTF-8</param-value> 
               <!-- EncFilter 무시하고 이 값으로 감 -->
           </init-param>
       </filter>
       <filter-mapping>
           <filter-name>enc</filter-name> <!-- 아무거나! -->
           <url-pattern>*.jsp</url-pattern>
       </filter-mapping>              
      
        <!-- 서블릿 클래스 등록 -->
        <servlet>
          <servlet-name>my</servlet-name>
          <servlet-class>t0708.MyServlet</servlet-class>
          <init-param>
             <param-name>youName</param-name>
             <param-value>아무개</param-value>
          </init-param>
        </servlet>
      <!-- (서블릿 클래스에 매핑될) 가상의 경로 설정 -->
      <servlet-mapping>
        <servlet-name>my</servlet-name>
        <url-pattern>/gildong/my</url-pattern>
        <!-- url-pattern엘리먼트 내의 맨 앞의 '/'는  (컨텍스트)루트를 의미!!
                        예) /gildong
              ===> http://localhost:8282/TomTest/gildong
         -->
      </servlet-mapping>         


      <!-- 카운트 서블릿등록 -->
      <servlet>
         <servlet-name>cnt</servlet-name>
         <servlet-class>com.encore.t0708.CountServlet</servlet-class>
      </servlet>

      <!-- 카운트 서블릿에 매핑할 가상경로 정의 -->
      <servlet-mapping>
         <servlet-name>cnt</servlet-name>
         <url-pattern>/cnt</url-pattern>
      </servlet-mapping>

      <!-- 카운트 서블릿등록2 -->
      <servlet>
         <servlet-name>cnt2</servlet-name>
         <servlet-class>com.encore.t0708.CountServlet2</servlet-class>
      </servlet>

      <!-- 카운트 서블릿에 매핑할 가상경로 정의2 -->
      <servlet-mapping>
         <servlet-name>cnt2</servlet-name>
         <url-pattern>/cnt2</url-pattern>
      </servlet-mapping>

      <!-- 파라미터서블릿등록 -->  
      <servlet>
         <servlet-name>param</servlet-name>
         <servlet-class>com.encore.t0709.ParamServlet</servlet-class>
      </servlet>

      <!-- 파라미터서블릿에 대한 가상경로 등록 -->  
      <servlet-mapping>
         <servlet-name>param</servlet-name>
         <url-pattern>/0709/result</url-pattern>
      </servlet-mapping>


      <!-- 
        <error-page>는  에러발생동기와   ==>   <error-code>  또는  <exception-type>
                                         에러발생시 이동할 페이지의 정보를 저장   ==>  <location>
      -->

     <!-- 
      <error-page>
        <error-code>500</error-code>
        <exception-type>java.lang.ArithmeticException</exception-type>
        <location>/0711/error.jsp</location>
      </error-page> 
     -->

      <!-- 
          <welcome-file-list>에는 페이지 명시 없을 때 보여줄 화면 페이지를 설정

         - 페이지 명시하는 경우 : http://192.168.0.96:8282/TomTest/hello.jsp
         - 페이지 명시하지 않는 경우 : http://192.168.0.96:8282/TomTest

         <welcome-file>태그 중 위쪽에 명시된 페이지가 우선 순위가 높다.
                 만약 TomTest폴더 밑에 아래의 index.html, index.jsp, hello.jsp파일이 
                 전부 있다면 index.html이 화면에 자동 출력됨. 
       -->

      <session-config>
          <session-timeout>1</session-timeout>
          <!-- TomTest(WebContext) 안에 모든 페이지에 대해 '분' 단위의 세션유지 시간 설정 -->
      </session-config>

      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>hello.jsp</welcome-file>
      </welcome-file-list>


    </web-app>

EncFilter.java

package util.enc;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncFilter implements Filter
{
    private String encType;

    @Override
    public void init(FilterConfig config) throws ServletException
    {
        // System.out.println("init()");
        // config 통해서 web.xml에 정의된 param을 읽기 가능
        encType = config.getInitParameter("encType");
    }

    @Override
    public void destroy()
    {
        // System.out.println("destroy()");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException
    {
        // System.out.println("doFilter()");

        if (encType != null) // web.xml에 encType이 정의되었다면
        {
            request.setCharacterEncoding(encType);
        } else
        {
            request.setCharacterEncoding("UTF-8");
        }
        // doFilter와 페이지 연결 하려면
        chain.doFilter(request, response);
        // 다른 필터 혹은 요청 페이지와의 연결 진행
    }
}

input.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>입력폼</title>
</head>
<%-- input.jsp  (입력폼) --%>
<body> 
   <h3>입력폼</h3>
   <hr>
   <%
     String youName =  getServletConfig().getInitParameter("youName");
     out.print("당신의 이름은 "+ youName+"<br>");

     //application == ServletContext
     String msg = application.getInitParameter("common");
     out.print("<font color=green>서버의 메시지 :["+msg+"]</font><br>");
   %>
   ${book }<br>
     책제목: ${book.title } <br>
   <form method="post" action="result.jsp"> 
          이름: <input type="text" name="username"><br>
      <button>전송</button>
   </form>

</body>
</html>

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파라미터 전송결과</title>
</head>
<%--result.jsp --%>
<body>
  <h3>파라미터 전송결과</h3>
  <hr>
    전달 이름: 
    <%= request.getParameter("username") %>
</body>
</html>

web.xml에서 t0708/MyServlet 부분 서블릿 추가

ServletConfig 는 하나

ServletContext 는 여러개!

MyServlet.java(t0708)

package t0708;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet{
  //서블릿 : 한개의 웹페이지 화면을 구성!!

   @Override
   public void init() throws ServletException {
      System.out.println("init()");
   }

   @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       System.out.println("service()");
       //서블릿 서비스 메소드 == 웹브라우저 서비스!! ==> HTML 서비스
       //request:클라이언트(사용자, 브라우저), response : 서버를 각각 의미


       // (한글)문자집합 설정
       response.setContentType("text/html;charset=UTF-8");
       // text/html => MIME형식
       // 입력:text 출력:html => out.print() 메소드를 통해 전달되는 text를 브라우저에게 html해석하시오!
       //text:plane; text:xml; 이런식으로 형식을 줄 수 있다!

       PrintWriter out = response.getWriter();
       //PrintWriter out ==> 브라우저 출력 객체를 의미함.
       //out.print("HTML코드(텍스트)");

       out.print("<html><head><title></title></head>");
       out.print("<body><h3>ServletTest</h3></hr>");

       //190708 여기 추가
       //web.xml에 등록된 initParam데이터 가져오기
       ServletConfig config = getServletConfig(); // 현재 서블릿
           String name = config.getInitParameter("youName");
           String name2 = getInitParameter("youName");
           out.print("name : " + name + ", name2 : " + name2 );
       ServletContext application = getServletContext();
       //TomTest와 같은 웹어플리케이션

       String commonTxt = application.getInitParameter("common");
       out.print("<font color=green>" + commonTxt + "</fong><br>");



       out.print(application.getAttribute("book" + "<br>"));
       //이 위까지 190708 추가

       for (int i = 0; i < 10; i++) {
           if(i%2==0)
           out.println("<b><font color = red>용진</font></b><br>");
           if(i%2==1)
            out.println("<b><font color = blue>진주</font></b><br>");
    }
       out.print("</body></html>");
    }

    @Override
    public void destroy() {
       System.out.println("destroy()");
    }

}

input.jsp에 추가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>입력폼</title>
</head>
<%-- input.jsp  (입력폼) --%>
<body> 
   <h3>입력폼</h3>
   <hr>
   <%
     String youName =  getServletConfig().getInitParameter("youName");
     out.print("당신의 이름은 "+ youName+"<br>");

     //application == ServletContext
     String msg = application.getInitParameter("common");
     out.print("<font color=green>서버의 메시지 :["+msg+"]</font><br>");
   %>
   ${book }<br>
     책제목: ${book.title } <br>
   <form method="post" action="result.jsp"> 
          이름: <input type="text" name="username"><br>
      <button>전송</button>
   </form>

</body>
</html>
  • 어디에 쓰는데 이걸? 이미지 한곳에 모아놨었는데, 그 폴더에 없고 예를 들어 coffee 폴더 안에 있어...경로가 달라졌어!

  • 그럼 그림 안나옴 ㅠㅠ

  • 이미지 수십개 썼으면, 해당 jsp 가서 다 수정할거야? 아니지?

  • 문제가 되는 페이지에 가서 수정하는게 아니라

    • web.xml에 등록하고

        <context-param>
           <param-name>imgPath</param-name>
           <param-value>/TomTest/image</param-value> <!-- 이제 여기만 고치면 되네! -->
       </context-param>
      • 해당하는 imgPath value값만 바꾸면 된다!

      • 0717에 service.jsp에서 사진을

        <img src="<%= application.getInitParameter("imgPath")%>/ebi.gif" width="400" height="300">
        
        <img src="${initParam.imgPath }/ebi.gif" width="400" height="300">
        • 이렇게 수정함, 적용 잘 됨!
        • 너무 길면 ${initParam.imgPath }

<리스너>

  • 특정 인터페이스를 구현하는 자바클래스
  • web.xml의 리스너 설정 항목에 기술해두면 웹 애플리케이션 시작 시 자동으로 실행되어 모든 애플리케이션에서 참조할 객체 생성등을 수행

web.xml 에 리스터 등록

 <listener>
     <listener-class>t0718.MyListener</listener-class>
 </listener>

MyListener.java

package t0718;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener
{
    @Override
    public void contextDestroyed(ServletContextEvent sce)
    {
        // 끝날 때
        //System.out.println("contextDestroyed");
    }

    @Override
    public void contextInitialized(ServletContextEvent sce)
    {
        // 시작할 때
        //System.out.println("contextInitialized");

        //전체 웹어플리케이션에서 공유할 객체 저장
        ServletContext application = sce.getServletContext();
        application.setAttribute("book", new Book());
    }
}

<파일 업로드>

  • 사용자(클라이언트) PC내의 파일 -> 서버의 특정 디렉토리에 저장!
  • <파일업로드 규칙>
    1. form태그의 method속성은 반드시 post!
    2. form태그의 속성 enctype="multipart/form-data" 추가!
      • 폼내의 데이터들을 text가 아닌 stream으로 전송!
      • input.jsp
    • 참고) enctype = "application/x-www-form-urlencoded"
      • 기본값
      • form태그내의 name데이터들을 text로 전달!
  • <파일 업로드 구현>
    1. inputFile.jsp : 폼제공
    2. resultFile.jsp : inputstream을 통해 파일 업로드 구현, 실행

inputFile.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>입력폼</title>
</head>
<%--inputFile.jsp --%>
<body>
  <h3>입력폼</h3>
  <hr>
  <form action="resultFile.jsp" method="post"
        enctype="multipart/form-data" >
       이름: <input type="text" name="username"><br>
       파일: <input type="file" name="myfile"><br>
       <button>전송</button>
  </form>
</body>
</html>

resultFile.jsp

<%@page import="java.io.FileWriter"%>
<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.BufferedReader"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과페이지</title>
</head>
<%--resultFile.jsp --%>
<body>
  <h3>결과페이지</h3>
  <hr>

     이름: <%=request.getParameter("username") %> <br>
     파일: <%=request.getParameter("myfile") %> <br>
  <hr color="red">
  <%
     ServletInputStream sis = request.getInputStream();

     BufferedReader  br = new BufferedReader
                         (new InputStreamReader(sis,"UTF-8"));

     String delimiter = br.readLine();//구분자역할을 하는 문자열
     //"------WebKitFormBoundarys29EFHDUPZj87Yvt"

     String str;
     int count=0;
     while( (str=br.readLine())  !=  null ){
         count++;
        // out.print(str+"<br>");
        if(str.contains("name=\"myfile\"")){
            System.out.println(count+"째줄에서 myfile을 찾았다!!");

            //파일명 찾기
            int startIdx = str.lastIndexOf("=")+2;
            int endIdx = str.length()-1;

            String fileName = str.substring(startIdx, endIdx);
                  //"애국가.txt"
            FileWriter fw = new FileWriter
                (application.getRealPath("/upload/")+ fileName);
                  //e:/jaelee/workspace2/TomTest2/upload/애국가.txt

            br.readLine();
            br.readLine();//두줄 skip


            while( (str=br.readLine()) != null  ){
                if(str.contains(delimiter)) break;
                out.print(str+"<br>");//브라우저화면 출력
                fw.write(str+"\r\n");//파일 출력
            }//while
             fw.close();
        }//if
     }//while

     //애국가.txt파일의 내용을 브라우저 화면에 출력하자!!
     //애국가.txt파일을  upload폴더에 생성하고 내용을 파일출력하자!!

  %>

</body>
</html>

<파일 업로드 툴>

http://www.servlets.com

  • cos-20.08.zip

위의 툴을 사용해서 만들어 보자!

압축 풀고 lib 폴더에 jar 파일 넣고 빌드패스!

inputFile2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>입력폼</title>
</head>
<%--inputFile.jsp --%>
<body>
  <h3>입력폼(파일업로드 : COS.jar - MultipartRequest 객체 사용 )</h3>
  <hr>
  <form action="resultFile2.jsp" method="post"
        enctype="multipart/form-data" >
       이름: <input type="text" name="username"><br>
       파일: <input type="file" name="myfile"><br>
       <button>전송</button>
  </form>
</body>
</html>

resultFile2.jsp

<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h3>결과페이지(파일업로드)</h3>

  <%
   //MultipartRequest(HttpServletRequest request, String saveDirectory)
   //MultipartRequest(HttpServletRequest request, String saveDirectory, 
                   //String encoding)
   //MultipartRequest(HttpServletRequest request, String saveDirectory, 
            //int maxPostSize, String encoding, FileRenamePolicy policy)

    String saveDir=application.getRealPath("/upload");
    //---> "e:/jaelee/workspace2/TomTest/upload"
    int maxSize=  5     * 1024   * 1024; //업로드 될 파일의 크기 제한, 단위:byte
          //     5byte    5Kb       5Mb 

    MultipartRequest mreq = new MultipartRequest
    (request,saveDir, maxSize, "UTF-8", new DefaultFileRenamePolicy());
        //MultipartRequest생성자 호출 == 파일업로드 !

        out.print("파일 업로드 성공 ~ !");
        String name = mreq.getParameter("username");


    %>
    <br>
    이름 : <%= name %><br>
    원본파일명 : <%= mreq.getOriginalFileName("myfile") %><br> 
    저장파일명 : <%= mreq.getFilesystemName("myfile") %><br> 

</body>
</html>

궁금상자
context-param
init-param

context-param(컨텍스트 초기화 파라미터)
    - <web-app> 항목내 작성
    - 범위 : 웹 애플리케이션 내에 모든 서블릿, jsp


init-param(서블릿 초기화 파라미터)
    - <servlet> 항목내 작성
    - 범위 : <init-param>항목을 포함하는 서블랏만

190717_Day68 <회원가입 미션>


<미션2>
==> 사용자인증JSP : Model1사용, DAO만 Model2개발방식!!

userinput.jsp (사용자정보 입력폼, 회원가입폼)

userprocess.jsp (사용자정보  DB저장)
  - insert

userconfirm.jsp (로그인 화면폼)

confirmprocess.jsp (로그인 처리: 아이디, 비번에 대한 존재와 일치를 체크)
  - select

modifyuser.jsp (사용자정보 수정폼)
  - select

modifyprocess.jsp (사용자정보 DB수정처리)
  - update

deleteid.jsp (사용자정보 DB삭제, 회원탈퇴)
  - delete

confirmid.jsp (아이디 중복여부 처리)
  - select

service.jsp   <------- sessionT3.jsp내용 복사

========
테이블명: UserInfo
<SQL스크립트 DDL>

drop table userinfo;

create table userinfo(
  id      varchar2(20) constraint userinfo_pk primary key,
  pass    varchar2(20) not null,
  name    varchar2(30) not null,
  jumin   varchar2(14) not null, --'960302-1012345'
  birth   varchar2(10), --'1996-03-02'
  zip     number(5)    not null,
  addr    varchar2(300),
  email   varchar2(50)  not null,
  job     varchar2(30)  not null
);
---> userinfo.sql 저장, 실행
---> UserInfo.java (9개의 속성 정의)
-----------------------------------------------------------------------------
작업순서)
   회원정보입력  ---> 로그인처리  ---> 수정처리
   ---> 삭제처리  ---> 아이디 중복처리   ---> 유효성검사

1. userinput.jsp(입력폼,회원가입폼)에서 '월'과 '일'에 대한 숫자 출력.
     월: 01~09~12 (자바for문을 통해 출력)

2. UserInfo.java작성 (테이블의 한 레코드 표현)

3. UserInfoDAO.java작성      

4. DB insert작업(userprocess.jsp)
    DAO의 insert호출  ---> 호출결과에 따라 적당한 메시지 출력

5. userconfirm.jsp (로그인화면)  ---이동--> confirmprocess.jsp
    - UserInfoDAO의 selectLogin() 메소드 구현
    - 로그인 처리
     - 호출결과에 따라 적당한 메시지 출력
     - 로그인 성공시 세션적용(설정)   

6. 수정폼에 기존 데이터 뿌리기
     - UserInfoDAO클래스내에 select()메소드 구현
     - 호출 후 결과값을 HTML에 뿌려주기


7. 수정폼에 입력된 데이터를 실제 DB에 반영
     - UserInfoDAO클래스내에 modify()메소드 구현
     - 수정항목: 비번,우편번호,주소,이메일,직업
     - 호출 결과에 따라 적당한 메시지(table) 출력

8. 삭제(회원탈퇴)버튼 클릭시 - deleteid.jsp
     - 정말 삭제할지를 확인 (JavaScript confirm창)
     - DB에서 삭제처리
     - 호출 결과에 따라 적당한 메시지(table) 출력

9. 입력폼에 있는 '아이디 중복확인'에 대한 처리
   ---> confirmid.jsp  (window.open처리)

10. 입력폼과 수정폼의 데이터 입력에 대한 유효성검사.
    (빈값, 주민번호에 대한 숫자체크와 자릿수,
        이메일에 대한 유효성검사- gildong1004@naver.com)
     - [영문자와 숫자조합6~15]@[영문자].[영문자]
     ----> javascript처리 ----> validateCheck()함수 추가

userinput.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">    
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>사용자등록</title>  
   <script type="text/javascript">
      function birthChange(){
          console.log('birthChange')
          var jumin1 = document.frm.jumin1.value ;//'960302'
          var birthYear = jumin1.substr(0, 2);//'96'
          var ch = document.frm.jumin2.value.charAt(0);//'1012345' ==> '1'

          if(ch=='1' || ch=='2' || ch=='5' || ch=='6'){
              birthYear = '19'+ birthYear 
          }else{//ch='3' '4' '7' '8'
              birthYear = '20'+ birthYear 
          }          
          document.frm.year.value = birthYear;
          document.frm.month.value = jumin1.substr(2, 2);//'03'
          document.frm.day.value  = jumin1.substr(4, 2);//'02'
      }//birthChange

      function ckid(){
          var id = document.frm.id.value;
          if(id==''){
              alert('아이디를 입력!!');
              return;
          }

          window.open('confirmid.jsp?id='+ id,'confirm',
                  'toolbar=no,location=no,status=no,'
                  +'menubar=no,scrollbars=no,resizable=no,'
                  +'width=300,height=200,top=200,left=300');

      }//ckid

      function validateCheck(){
          var f = document.frm; // f == 폼 엘리먼트 객체

          //정규식 정의
          var jumin1Exp = new RegExp("^[\\d]{6}$");
          var jumin2Exp = /^[\d]{7}$/;
          var yearExp = /^[\d]{4}$/;
          var zipExp = /^[\d]{5}$/;
          var idExp = /^[a-zA-Z0-9]{6,20}$/;
          var emailExp = /^[a-zA-Z0-9]+@[a-zA-Z]+\.[a-zA-Z]+$/;

          if(!idExp.test( document.frm.id.value))
          {
             alert('아이디는 6~20자리!!'); 
             //document.frm.id.focus();
             f.id.focus();
          }else if (f.pass.value=='')
          {
             alert('비번 입력');
              f.pass.focus();
          }else if (f.pass2.value=='')
          {
              alert('비번 확인 입력');
               f.pass2.focus();
           }else if (f.pass.value!= f.pass2.value)
          {
              alert('비밀번호가 일치하지 않습니다.');
              f.pass.value = ''; f.pass2.value='';
               f.pass.focus();
           }else if (f.name.value=='')
          {
              alert('이름 입력');
               f.name.focus();
           }
           /* else if (f.jumin1.value=='')
          {
              alert('주민번호입력');
               f.jumin1.focus();
           }else if (isNaN(f.jumin1.value))
            {
                alert('주민번호에 숫자만 입력!');
            }else if (f.jumin1.value.length != 6 )
            {    
               alert('주민번호에 6자리 숫자만 입력');     
            }  
          이거보다는 정규식 쓰는게 더 좋음*/
          else if (!jumin1Exp.test(f.jumin1.value)||
                   !jumin2Exp.test(f.jumin2.value))
             {
                 alert('잘못된 주민번호 입력입니다.');
                 f.jumin1.value=''; f.jumin2.value='';
                f.jumin1.focus();
             }else if (!yearExp.test(f.year.value))
             {
                 alert('생년에 4자리 수 입력!');
                 f.year.value='';
                 f.year.focus();
             }else if (!zipExp.test(f.zip.value))
             {
            alert('잘못된 우편번호');
            f.zip.value='';
            f.zip.focus();
             }else if(!emailExp.test(f.email.value))
             {
                 alert('이메일 빼애애액!');
                 f.email.value='';
                 f.email.focus();
             }else if(f.job.value == '==선택==') 
             {
                 alert('직업 선택!');
             }else{
              //올바른, 프로그램에서 원하는 데이터 입력시
              f.submit();
          }
       }//validateCheck()

   </script>
</head>
<%-- userinput.jsp --%>
<body>
  <center>
  <form name="frm" action="userprocess.jsp" method="post">
  <table width="600" border="0" cellpadding="5" >
      <tr bgcolor="#3399cc">
         <td><font size="4" color="white">사용자정보입력</font>
      </tr>
      <tr>
         <td>안녕하세요. 이 페이지를 자유롭게 이용하려면
               먼저 회원가입을 하셔야 합니다.<br>
               아래의 사항들을 빠짐없이 기록해 주세요.
         </td>
      </tr>
  </table>
  <table border="1" cellpadding="5" width="600">
      <tr>
         <td width="100" bgcolor="#ffcccc">사용자ID<font color="red">*</font></td>
        <td colspan="3"><input type="text" name="id"> 
         <input type="button" value="중복확인" onclick="ckid()">
          <font color="blue">(6자리~20자리)</font>
         </td>
      </tr>
      <tr>
         <td width="100" bgcolor="#ffcccc">비밀번호<font color="red">*</font></td>
         <td><input type="password" name="pass"> </td>
         <td width="100" bgcolor="#ffcccc">비번확인</td>
         <td><input type="password" name="pass2"> </td>
      </tr>
      <tr>
         <td width="100" bgcolor="#ffcccc">사용자이름<font color="red">*</font></td>
         <td colspan="3"><input type="text" name="name"> </td>
      </tr>
      <tr>
         <td width="100" bgcolor="#ffcccc">주민번호<font color="red">*</font></td>
         <td colspan="3">
              <input type="text" name="jumin1" size="6" maxlength="6"
                      style="height:23px" >
              -
              <input type="password" name="jumin2" size="7" maxlength="7"
                      style="height:23px" onblur="birthChange()"></td>
      </tr>
      <tr>
         <td width="100" bgcolor="#ffcccc" >생년월일</td>
         <td colspan="3">
         <input type="text" name="year" size="4" maxlength="4">년
         <select name="month">
         <% for(int i=1; i<13; i++){ 
             if(i<10){%>
                <option>0<%=i%></option>  <%}
             else{ %>
                <option><%=i%></option>
            <%}//else
         }//for %>   
         </select>월          
         <select name="day" >
         <c:forEach begin="1"  end="31" var="i">
           <c:if test="${i<10 }"><option>0${i}</option></c:if>
           <c:if test="${i>9 }"><option>${i}</option></c:if>
         </c:forEach>   
         </select>일          
          </td>
      </tr>
      <tr>
         <td width="100" bgcolor="#ffcccc">우편번호<font color="red">*</font></td>
         <td colspan="3">
            <input type="text" name="zip" size="5" maxlength="5"></td>
      </tr>
      <tr>
         <td width="100" bgcolor="#ffcccc">주소</td>
         <td colspan="3"><input type="text" name="addr" size="50"></td>
      </tr>
      <tr>
         <td width="100" bgcolor="#ffcccc">E-Mail<font color="red">*</font></td>
         <td colspan="3"><input type="text" name="email" size="30"></td>
      </tr>
      <tr>
         <td width="100" bgcolor="#ffcccc">직업<font color="red">*</font></td>
         <td colspan="3">
               <select name="job" >
                <% 
                 String jobs[]={"==선택==","학생","공무원","언론/출판","군인/경찰","일반사무직",
                   "영업직","기술/전문직","보건/의료","자영업","주부","기타" };
                  pageContext.setAttribute("jobs", jobs);
                %>
                <c:forEach items="${jobs }" var="jobName">  
                  <option>${jobName }</option>
                </c:forEach>              
               </select>
         </td>
      </tr>
      <tr align="center">
         <td colspan="4">
         <%--
             <script>
                 fuction validateCheck()
                 {
                     if(반값이라면)
                     {
                         alert('입력하세요')
                       }else
                       {
                           frm.submit();
                       }
                 }
             </script>
             =========================이렇게 하거나
             등록 을 submit으로 하고 싶다면
             <script>
                 fuction validateCheck()
                 {
                     if(반값이라면)
                     {
                         alert('입력하세요')
                         return false;
                       }else
                       {
                           return true;
                       }
                 }
             </script>
             <input type = "submit" value="등록"
                 onclick="reuturn validateCheck()">
          --%>
           <input type="button" value="등록" onclick="validateCheck()" >
           <input type="reset" value="취소">
         </td>
      </tr>
  </table>
  </form>
  </center>
</body>
</html>
  • 주민번호 입력하면, onblur 통해서 birthChange() 메소드 호출하고, 해당 메소드 내에서 주민번호 앞자리 jumin1 을 substr 통해 나누고 나눈 값을 통해 다음에 들어가는 생년월일 value 넣어줌

UserInfo.java (t0717.vo안에)

    private String id;
    private String pass;
    private String name;
    private String jumin;
    private String birth;
    private int zip;
    private String addr;
    private String email;
    private String job;
    public String getId()

        //애네들 getter setter, Constructor using field toString 까지 생성

UserInfoDAO.java

package t0717.dao;


import java.sql.SQLException;
import java.util.List;

import t0717.vo.UserInfo;
import com.ibatis.sqlmap.client.SqlMapClient;

import iba.MySqlMapClient;

public class UserInfoDAO {//DAO(Data Access Object) DB전담클래스

    SqlMapClient sqlMap;//XML문서내의 sql문 호출

    public UserInfoDAO() {
       sqlMap = MySqlMapClient.getSqlMapInstance();
    }

    public boolean create(UserInfo user) {
        try {
            sqlMap.insert("userinfo.create", user);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
       return false;    
    }//create


    public boolean modify(UserInfo user) throws SQLException {
        if(sqlMap.update("userinfo.modify", user) == 1) {
            return true;
        }

        return false;
    }//modify

    public boolean remove(String id) throws SQLException {
        if(sqlMap.delete("userinfo.remove", id) == 1) { //삭제된 행의 갯수가 1이라면
            return true;
        }
        return false;
    }


    public UserInfo select(String id) throws SQLException {//수정폼 (DB ---> HTML)
        return (UserInfo) sqlMap.queryForObject("userinfo.select",id);
    }


    public List<UserInfo> selectAll() {return null;}

    public String selectLogin(String id) throws SQLException {
       return (String) sqlMap.queryForObject("userinfo.selectLogin", id );
    }//selectLogin

    public Integer selectExistId(String id) throws SQLException {
           return (Integer) sqlMap.queryForObject("userinfo.selectExistId", id );
        }//selectExistId
}
  • 어레이와 리스트
    • 공통점 묶어준다, 인덱스
    • 차이점 고정, 가변

userinfo.sql

drop table userinfo;

create table userinfo(
  id      varchar2(20) constraint userinfo_pk primary key,
  pass    varchar2(20) not null,
  name    varchar2(30) not null,
  jumin   varchar2(14) not null, --'960302-1012345'
  birth   varchar2(10), --'1996-03-02'
  zip     number(5)    not null,
  addr    varchar2(300),
  email   varchar2(50)  not null,
  job     varchar2(30)  not null
);

SELECT * FROM USERINFO;
  • 테이블 생성

userinfo.xml(mapper안에 생성시 ibatis)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd" >
<!-- userinfo.xml -->

<sqlMap namespace="userinfo">
   <typeAlias alias="user" type="t0717.vo.UserInfo"/>

   <insert id="create" parameterClass="user">
      insert into userinfo (id,pass,name,jumin,birth,zip,addr,email,job) 
         values (#id#,#pass#,#name#,#jumin#,#birth#,#zip#,#addr#,#email#,#job#)
   </insert>

   <update id="modify" parameterClass="user">
      update userinfo 
      set pass=#pass#, zip=#zip#, addr=#addr#, email=#email#, job=#job#
      where id = #id#
   </update>

   <delete id="remove" parameterClass="String">
      delete from userinfo
         where id=#id#
   </delete>

   <!-- 매개변수 id,pass에 대한 로그인 처리 -->
   <select id="selectLogin" parameterClass="String"
                            resultClass="String" >
      <!-- select count(*) from userinfo where id=id and pass=pass -->
      select pass from userinfo where id=#id#
   </select>

   <!-- 수정폼(HTML)에 출력할 내용 조회 -->
   <select id="select" parameterClass="String"
                       resultClass="user">
      select id,pass,name,jumin,birth,zip,addr,email,job
      from userinfo
      where id=#id#
   </select>

   <!-- 중복된 아이디 조회 -->
   <!-- 유무만 확인하면 되니까 count사용 -->
   <!-- select 결과가 여러개 나올수 있다. vo 또는 map으로 resultClass를 사용하야 한다. -->
   <select id="selectExistId" parameterClass="String" resultClass="int">
      select count(*)
      from userinfo
      where id=#id#
   </select>

</sqlMap>

userprocess.jsp

<%@page import="t0717.dao.UserInfoDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean class="t0717.vo.UserInfo" id="user"/>
<%--  UserInfo  user = new UserInfo(); --%>
<%  System.out.println("userBean실행==>"+ user);  %>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:setProperty name="user" property="*" />
<%--   user.setId(request.getParameter("id"));    --%>
<%  System.out.println("setProperty실행==>"+ user);  


    String jumin = request.getParameter("jumin1")
                   +"-"+request.getParameter("jumin2");

    String birth = request.getParameter("year")+"-"+
                   request.getParameter("month")+"-"+
                   request.getParameter("day");
    user.setJumin(jumin);
    user.setBirth(birth);

    System.out.println("setJumin,setBirth실행==>"+ user);
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>가입처리결과</title>
</head>
<body>
  <center>     
  <%
       //폼안의 데이터 얻기: String data = request.getParameter("name속성값");

      UserInfoDAO dao = new UserInfoDAO();
      if(dao.create(user)){
  %>
     <table width="330" border="0" cellpadding="5">
         <tr bgcolor="#3399cc">
           <td><b>[${param.name }]님 가입을 축하합니다.</b></td>
         </tr>
         <tr>
           <td>
              입력하신 내용대로 가입이 완료되었습니다.<br>
              님께서 요청하신 아이디와 패스워드입니다.
              <p align="center">아이디: ${param.id }<br>
                                패스워드: ${param.pass }<br><br>
                 <a href="userconfirm.jsp">로그인 화면</a>                   
              </p>
           </td>
         </tr>
      </table>
    <%}else{ %> 
     <table width="330" border="0" cellpadding="5">
        <tr bgcolor="#3399cc">
          <td><b>가입이 되지않았습니다.<br>
                    입력내용을 다시 한번 확인해 주세요.</b></td>
        </tr>
        <tr>
          <td>            
             <p align="center">입력이 정확한 경우에도 가입이 되지 않는 경우
              관리자에게 문의하여 주십시요.  <br>  
                <a href="javascript:history.back()">이전화면</a>               
             </p>
          </td>
        </tr>
     </table> 
      <%} %>
  </center>
</body>
</html>
  • jsp:useBean 액션 태그

    • <jsp:useBean id="빈이름" class="자바빈클래스이름" scope="범위"/>

    • id : JSP 페이지에서 자바빈 객체에 접글할 때 사용할 이름을 명시한다.

    • class : 패키지이름을 포함한 자바빈 클래스의 완전한 이름을 입력한다.

    • scope : 자바빈 객체가 저장될 영역을 지정한다. (page, request, session, application 중 하나, 기본값은 page)

    • JSP 페이지에서 사용할 자바빈 객체를 생성하고 지정한 영역에 저장을 한다.

    • 지정한 영역에 이미 id 속성에서 지정한이름의 속성 값이 존재할 경우 객체를 새로 생성하지 않고 기존에 존재하는 객체를 그대로 사용한다.

    • 각 scope의 영역별로 공유할 데이터를 쉽게 저장할 수 있다.

    출처: https://gangzzang.tistory.com/entry/JSP-액션태그-jspuseBean [갱짱.study]

sqlMapConfig.xml 에 xml파일 등록!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd" >
<sqlMapConfig>
<!-- sqlMapConfig.xml
     ==> iBatis프레임워크(sqlMapper프레임워크)에 대한 환경설정
 -->
  <properties resource="./iba/conn.properties"/>
  <settings
      cacheModelsEnabled="true"
      enhancementEnabled="true"  
      lazyLoadingEnabled="true"
      maxRequests="30"
      maxSessions="25"
      maxTransactions="10"
      useStatementNamespaces="true"
  />

  <transactionManager type="JDBC">
     <dataSource type="SIMPLE">
        <property name="JDBC.Driver" value="${driver}"/>
        <property name="JDBC.ConnectionURL" value="${url}"/>
        <property name="JDBC.Username" value="${user}"/>
        <property name="JDBC.Password" value="${password}"/>
     </dataSource>
  </transactionManager> 

  <!-- ★  앞으로 sql문 추가되는 xml파일을 등록 ★  -->
  <sqlMap resource="./mapper/counter.xml"/>
  <sqlMap resource="./mapper/emp.xml"/>
  <sqlMap resource="./mapper/userinfo.xml"/>


</sqlMapConfig>
  • 앞으로 귀찮으면
  • < sqlMap resource="./mapper/*.xml"/> 해도 됨.

service.jsp (로그인 성공 후 접속 할 수 있는 페이지)

<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head><title>Session인증 페이지</title>
   <style type="text/css">
        <!--
        .normal {  font-family: "굴림", "돋움"; font-size: x-small; font-style: normal; font-weight: normal; text-decoration: none}
        .normalbold {  font-family: "굴림", "돋움"; font-size: x-small; font-style: normal; font-weight: bold; text-decoration: none}
        -->
   </style>
 </head>
<%-- service.jsp --%>
 <%
       String login = (String)session.getAttribute("login");

       if(login ==null  || !login.equals("success")){//로그인 하지 않았다면!!
           response.sendRedirect("userconfirm.jsp");
       }

 %>
 <body>     
     <center>
     <p>    
        <img src="<%= application.getInitParameter("imgPath")%>/ebi.gif" width="400" height="300">
        <img src="${initParam.imgPath }/ebi.gif" width="400" height="300">
     </p>
     <p class="normalbold">이 페이지는 사용자 인증을 받아야 볼 수 있죠!</p>    
     <p class="normal">감사합니다....</p>
     <p class="normal"><a href="userconfirm.jsp">로그아웃</a></p>
     </center>
 </body>
</html>
  • confirmprocess.jsp 에 로그인 성공시 성공 정보(login)을 success로 남기는 세션정보를 추가해야 한다.

confirmprocess.jsp

<%@page import="t0717.dao.UserInfoDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>로그인 처리</title>    
   <script type="text/javascript">
       function movePage(upDel){ //upDel에는 up 또는 del이 들어감
          if(upDel=='up')
          location.href='modifyuser.jsp?id=${param.id}';  // 수정페이지이동
          else
          {
                   if(confirm('정말탈퇴하시겠습니까?'))
                   {
                      location.href='deleteid.jsp?id=${param.id}';  // 삭제처리페이지이동
                   }
          }
       }
   </script>
</head>
<body>
   <%
        String id = request.getParameter("id");
        String pass =  request.getParameter("pass");

        UserInfoDAO dao = new UserInfoDAO();
        String dpass = dao.selectLogin(id);
        if(dpass != null){//아이디 O
            if(dpass.equals(pass)){//아이디O , 패스워드 일치

                //로그인 성공 정보를 세션에 남기기 (세션 로그인)
                  session.setAttribute("login", "success");
                  //session.setAttribute("loginID", id);
                %>
        <table width="280" border="0" cellpadding="5">
              <tr bgcolor="#3399cc">
                <td><b>로그인 성공</b></td>
              </tr>
              <tr>
                <td>
                   입력하신 아이디와 패스워드를<br> 확인했습니다.
                   <br><br>                 
                    <input type="button" value="회원정보수정" onclick="movePage('up')">

                    <input type="button" value="회원탈퇴" onclick="movePage('del')" >
                   <br><br>
                   <a href="service.jsp">서비스화면</a>
                </td>
              </tr>
           </table>
            <% }else{//아이디O , 패스워드 불일치%>
        <table width="280" border="0" cellpadding="5">
              <tr bgcolor="#3399cc">
                <td><b>로그인 실패</b></td>
              </tr>
              <tr>
                <td>
                   패스워드가 틀립니다.<br>
                   패스워드를 다시한번 확인해 주시기 바랍니다.<br><br>
                   <a href="userconfirm.jsp">로그인화면</a>
                </td>
              </tr>
           </table>           
            <% }
        }else{//아이디 X%>
        <table width="280" border="0" cellpadding="5">
              <tr bgcolor="#3399cc">
                <td><b>로그인 실패</b></td>
              </tr>
              <tr>
                <td>
                   다시 아이디를 확인하세요.<br>
                   만약 가입하지 않으신 경우 신규가입을 하시기 바랍니다.<br><br>
                   <a href="userinput.jsp">신규가입</a>
                </td>
              </tr>
          </table>    

        <% }%>
  </center>
</body>
</html>
  • 조건( 로그인 성공, 실패 (아이디틀림, 비밀번호 틀림) ) 에 따라 뜨는 페이지를 테이블을 설정하게 함.
  • 로그인 성공시 세션 정보를 남김

service.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head><title>Session인증 페이지</title>
   <style type="text/css">
        <!--
        .normal {  font-family: "굴림", "돋움"; font-size: x-small; font-style: normal; font-weight: normal; text-decoration: none}
        .normalbold {  font-family: "굴림", "돋움"; font-size: x-small; font-style: normal; font-weight: bold; text-decoration: none}
        -->
   </style>
 </head>
<%-- service.jsp --%>
 <%
       String login = (String)session.getAttribute("login");

       if(login ==null  || !login.equals("success")){//로그인 하지 않았다면!!
           response.sendRedirect("userconfirm.jsp");
       }

 %>
 <body>     
     <center>
     <p>    
        <img src="/TomTest/image/ebi.gif" width="400" height="300">
     </p>
     <p class="normalbold">이 페이지는 사용자 인증을 받아야 볼 수 있죠!</p>    
     <p class="normal">감사합니다....</p>
     <p class="normal"><a href="sessionT4.jsp">로그아웃</a></p>
     </center>
 </body>
</html>
  • 이건 전에 만들 서비스 창

modifyuser.jsp

<%@page import="t0717.vo.UserInfo"%>
<%@page import="t0717.dao.UserInfoDAO"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>사용자수정</title>
    <script type="text/javascript" src="/TomTest/js/check.js"></script>
</head>
<%
    UserInfoDAO dao = new UserInfoDAO();
    UserInfo user = dao.select(request.getParameter("id"));
    System.out.println("user>>>"+ user);
    String []jumin=user.getJumin().split("-");//"960302-2012345"
                                              //{"960302","2012345"}
    String []birth = user.getBirth().split("-");//"1996-03-02"
                                               //{"1996","03","02"}

    pageContext.setAttribute("user", user);



%>
<body>
    <center>
        <form name="frm" action="modifyprocess.jsp" method="post">
            <table width="600" border="0" cellpadding="5">
                <tr bgcolor="#3399cc">
                    <td><font size="4" color="white">사용자정보수정</font>
                </tr>
            </table>
            <table border="1" cellpadding="5" width="600">
                <tr>
                    <td width="100" bgcolor="#ffcccc">사용자ID</td>
                    <td colspan="3">
                        <%-- <input type="text" name="id" value="<%= user.getId()%>"></td> --%>
                        <input type="text" name="userid" value="${user.id }" disabled>
                        <input type="hidden" name="id" value="${user.id }"> 
                        <%-- disabled는 못받아와, 그래서 hidden씀 --%>

                    </td>

                </tr>
                <tr>
                    <td width="100" bgcolor="#ffcccc">비밀번호</td>
                    <td><input type="password" name="pass" value="${user.pass }">
                    </td>
                    <td width="100" bgcolor="#ffcccc">비번확인</td>
                    <td><input type="password" name="pass2" value="${user.pass }">
                    </td>
                </tr>
                <tr>
                    <td width="100" bgcolor="#ffcccc">사용자이름</td>
                    <td colspan="3"><input type="text" name="name"
                        value="${user.name }" readonly></td>

                </tr>
                <tr>
                    <td width="100" bgcolor="#ffcccc">주민번호</td>
                    <td colspan="3"><input type="text" name="jumin1" size="6"
                        maxlength="6" style="height: 23px" value="<%= jumin[0]%>" readonly>
                        - <input type="password" name="jumin2" size="7" maxlength="7"
                        style="height: 23px" value="<%= jumin[1]%>" readonly></td>
                </tr>
                <tr>
                    <td width="100" bgcolor="#ffcccc">생년월일</td>
                    <td colspan="3"><input type="text" name="year" size="4"
                        maxlength="4" value="<%= birth[0]%>" disabled>년 <select
                        name="month" disabled>
                            <option><%=birth[1] %></option>
                    </select>월 <select name="day" disabled>
                            <option><%=birth[2] %></option>
                    </select>일</td>
                </tr>
                <tr>
                    <td width="100" bgcolor="#ffcccc">우편번호</td>
                    <td colspan="3"><input type="text" name="zip" size="5"
                        maxlength="5" value="${user.zip }"></td>
                </tr>
                <tr>
                    <td width="100" bgcolor="#ffcccc">주소</td>
                    <td colspan="3"><input type="text" name="addr" size="50"
                        value="${user.addr }"></td>
                </tr>
                <tr>
                    <td width="100" bgcolor="#ffcccc">E-Mail</td>
                    <td colspan="3"><input type="text" name="email" size="30"
                        value="${user.email }"></td>
                </tr>

                <tr>
                    <td width="100" bgcolor="#ffcccc">직업</td>
                    <td colspan="3"><select name="job">
                            <% 
                String jobs[]={"==선택==","학생","공무원","언론/출판","군인/경찰","일반사무직",
                   "영업직","기술/전문직","보건/의료","자영업","주부","기타" };
                for(int i=0; i<jobs.length; i++){
                    if(jobs[i].equals(user.getJob()))
                      out.print("<option selected>"+ jobs[i] +"</option>");
                    else
                      out.print("<option>"+ jobs[i] +"</option>");

                } %>
                    </select></td>
                </tr>
                <tr align="center">
                    <td colspan="4"><input type="button" value="수정" onclick = validateCheck()>
                     <input
                        type="reset" value="취소"></td>
                </tr>
            </table>
        </form>
    </center>
</body>
</html>

modifyprocess.jsp

<%@page import="t0717.dao.UserInfoDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<jsp:useBean class="t0717.vo.UserInfo" id="user" />
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:setProperty property="*" name="user" />

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>수정처리</title>
</head>
<body>
    <center>
        <%
             UserInfoDAO dao = new UserInfoDAO();
            try
            {
             if(dao.modify(user)){
         %>
        <table width="280" border="0" cellpadding="5">
            <tr bgcolor="#3399cc">
                <td><b>수정성공</b></td>
            </tr>
            <tr>
                <td>수정이 잘되었습니다<br>
                <br> <a href="service.jsp">서비스페이지</a>
                </td>
            </tr>
        </table>
        <%}else{ %>
        <table width="280" border="0" cellpadding="5">
            <tr bgcolor="#3399cc">
                <td><b>수정실패</b></td>
            </tr>
            <tr>
                <td>정보수정이 되지않았습니다.<br> 입력내용을 다시확인하시고 다시수정하시기 바랍니다.<br>
                <br> <a href="javascript:history.go(-1)">이전화면</a>
                </td>
            </tr>
        </table>
        <%} }

            catch(Exception e)
            { %>
                <table width="280" border="0" cellpadding="5">
            <tr bgcolor="#3399cc">
                <td><b>수정실패</b></td>
            </tr>
            <tr>
                <td>정보수정이 되지않았습니다.<br> 입력내용을 다시확인하시고 다시수정하시기 바랍니다.<br>
                <br> <a href="javascript:history.go(-1)">이전화면</a>
                </td>
            </tr>
        </table>

            <%}

        %>
    </center>
</body>
</html>

confirmid.jsp

<%@page import="t0717.dao.UserInfoDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

    <script>
        //opener : 부모 window객체
        //var id = opener.document.frm.id.value;
        //alert('입력(부모)창의 아이디 : ' + id) 
        //이렇게는 안됨, request 사용하기
    </script>

</head>
<%-- confirmid.jsp --%>
<body>
  <center>
  <%--주소?id=yong 이렇게 나오게 하려면 --%>
  <%
      String id = request.getParameter("id");
      System.out.println("파라미터 아이디 : " + id);
      UserInfoDAO dao = new UserInfoDAO();
      if( dao.selectExistId(id) == 1){ //아이디 존재 하면 1 아니면 0
  %>
          <table width="280" border="0" cellpadding="5">
               <tr bgcolor="#3399cc">
                 <td><b>사용불가능</b></td>
               </tr>
               <tr>
                 <td>
                    이미 사용중인 아이디입니다.<br>
                    다른 아이디를 선택하십시요!!
                 </td>
               </tr>
            </table> 
            <input type="button" value="닫기" onclick="window.close()">  
    <% }else{ %>

            <table width="280" border="0" cellpadding="5">
               <tr bgcolor="#3399cc">
                 <td><b>사용가능</b></td>
               </tr>
               <tr>
                 <td>
                     사용가능한 아이디입니다^^*
                 </td>
               </tr>
            </table> 
                <a href="javascript:self.close()">창닫기</a>
                <% } %>         
   </center>
</body>
</html>

deleteid.jsp

<%@page import="t0717.dao.UserInfoDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <center> 
  <%
      String id = request.getParameter("id");
      UserInfoDAO dao = new UserInfoDAO();
      if(dao.remove(id))
      {
          session.invalidate();
      %>
      <table width="280" border="0" cellpadding="5">
              <tr bgcolor="#3399cc">
                <td><b>삭제성공</b></td>
              </tr>
              <tr>
                <td>
                   삭제가 잘되었습니다.<br>
                   이용해 주셔서 감사합니다.
                   <br><br>
                   <a href="service.jsp">서비스페이지</a>
                </td>
              </tr>
    </table>  


      <%    

      }else
      { %>
          <table width="280" border="0" cellpadding="5">
              <tr bgcolor="#3399cc">
                <td><b>삭제실패</b></td>
              </tr>
              <tr>
                <td>
                   삭제가 되지않았습니다.<br>
                   잠시 후 다시 시도해 보시기 바랍니다.<br><br>
                   <a href="javascript:history.go(-1)">이전화면</a>
                </td>
              </tr>
     </table>

      <%}
  %>        
   </center>
</body>
</html>

+ Recent posts