2008. 9. 26. 16:16

로그인, 회원가입, 정보수정, 탈퇴

MVC 모델을 통한 회원가입에 대한 페이지들입니다.
전체가 참조하게 될 web.xml / MemberBean.java / MemberDAO.java 파일 입니다.
데이터베이스는 MYSQL을 사용하였고 서블릿은 TOMCAT 5.5 버전입니다.
======== web.xml ========================================================
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
  <display-name>Welcome to Test0922</display-name>
  <description>
     Welcome to Test0922
  </description>
 <servlet>
  <servlet-name>login.jsp</servlet-name>
  <jsp-file>/member/login.jsp</jsp-file>
 </servlet>
 <servlet>
  <servlet-name>logout.jsp</servlet-name>
  <jsp-file>/member/logout.jsp</jsp-file>
 </servlet>
 <servlet>
  <servlet-name>welcome.jsp</servlet-name>
  <jsp-file>/member/welcome.jsp</jsp-file>
 </servlet> 
 <servlet>
  <servlet-name>LoginServlet</servlet-name>
  <servlet-class>member.control.LoginServlet</servlet-class>
 </servlet>
 <servlet>
  <servlet-name>JoinMemberServlet</servlet-name>
  <servlet-class>member.control.JoinMemberServlet</servlet-class>
 </servlet>
 <servlet>
  <servlet-name>modify.jsp</servlet-name>
  <jsp-file>/member/modify.jsp</jsp-file>
 </servlet>
 <servlet>
  <servlet-name>ModifyMemberServlet</servlet-name>
  <servlet-class>member.control.ModifyMemberServlet</servlet-class>
 </servlet>
 <servlet>
  <servlet-name>modifyok.jsp</servlet-name>
  <jsp-file>/member/modifyok.jsp</jsp-file>
 </servlet>
 <servlet>
  <servlet-name>modifyfail.jsp</servlet-name>
  <jsp-file>/member/modifyfail.jsp</jsp-file>
 </servlet>
 <servlet>
  <servlet-name>memberout.jsp</servlet-name>
  <jsp-file>/member/memberout.jsp</jsp-file>
 </servlet>
 <servlet>
  <servlet-name>OutMemberServlet</servlet-name>
  <servlet-class>member.control.OutMemberServlet</servlet-class>
 </servlet>
 <servlet>
  <servlet-name>outmemberok.jsp</servlet-name>
  <jsp-file>/member/outmemberok.jsp</jsp-file>
 </servlet>
 <servlet>
  <servlet-name>outmemberfail.jsp</servlet-name>
  <jsp-file>/member/outmemberfail.jsp</jsp-file>
 </servlet> 
 <servlet-mapping>
  <servlet-name>login.jsp</servlet-name>
  <url-pattern>/login.jsp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>logout.jsp</servlet-name>
  <url-pattern>/logout.jsp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>welcome.jsp</servlet-name>
  <url-pattern>/welcome.jsp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>LoginServlet</servlet-name>
  <url-pattern>/login.do</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>JoinMemberServlet</servlet-name>
  <url-pattern>/joinmember.do</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>modify.jsp</servlet-name>
  <url-pattern>/modify.jsp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>ModifyMemberServlet</servlet-name>
  <url-pattern>/modifymember.do</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>modifyok.jsp</servlet-name>
  <url-pattern>/modifyok.jsp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>modifyfail.jsp</servlet-name>
  <url-pattern>/modifyfail.jsp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>memberout.jsp</servlet-name>
  <url-pattern>/memberout.jsp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>OutMemberServlet</servlet-name>
  <url-pattern>/outmember.do</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>outmemberok.jsp</servlet-name>
  <url-pattern>/outmemberok.jsp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>outmemberfail.jsp</servlet-name>
  <url-pattern>/outmemberfail.jsp</url-pattern>
 </servlet-mapping> 
</web-app>
==========================================================================
회원가입 항목인 필드들을 정의 하였습니다.
======== MemberBean.java ================================================
package member.model;
public class MemberBean {
 protected String num;
 protected String name;
 protected String id;
 protected String passwd;
 protected String tel;
 protected String add;
 public String getAddr() {
  return add;
 }
 public void setAddr(String add) {
  this.add = add;
 }
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getNum() {
  return num;
 }
 public void setNum(String num) {
  this.num = num;
 }
 public String getPasswd() {
  return passwd;
 }
 public void setPasswd(String passwd) {
  this.passwd = passwd;
 }
 public String getTel() {
  return tel;
 }
 public void setTel(String tel) {
  this.tel = tel;
 } 
}
==========================================================================
데이터베이스 연결 및 처리부분에 대한 DAO 파일입니다.
======== MemberDAO.java ================================================
package member.model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MemberDAO {
  public MemberBean memberInfo(String id){
  MemberBean temp=null;
  String sql="select * from member where id=?";
  PreparedStatement  pstmt=null;
  ResultSet rest=null;
  try{
   pstmt=conn.prepareStatement(sql);
   pstmt.setString(1,id);
   rest=pstmt.executeQuery();
   if(rest.next()){
    temp=new MemberBean();
    temp.setNum(rest.getString(1));
    temp.setName(rest.getString(2));
    temp.setId(rest.getString(3));
    temp.setPasswd(rest.getString(4));
    temp.setTel(rest.getString(5));
    temp.setAddr(rest.getString(6));
   }
  }catch (Exception e) {
   e.printStackTrace();
  }
  return temp;
 }
 public boolean memberJoin(MemberBean mb){
  PreparedStatement pstmt=null;
  String sql3="insert into member values(?,?,?,?,?,?);";
  try {
   pstmt=conn.prepareStatement(sql3);
   pstmt.setString(1, mb.getNum());
   pstmt.setString(2, mb.getName());
   pstmt.setString(3, mb.getId());
   pstmt.setString(4, mb.getPasswd());
   pstmt.setString(5, mb.getTel());
   pstmt.setString(6, mb.getAddr());
   pstmt.executeUpdate();
   return true;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return false;
 }
 public boolean memberModify(MemberBean mb){
  PreparedStatement pstmt=null;
  String sql4="update member set name=?, id=?, passwd=?, tel=?, addr=? where num=?;";
  try {
   pstmt=conn.prepareStatement(sql4);   
   pstmt.setString(1, mb.getName());
   pstmt.setString(2, mb.getId());
   pstmt.setString(3, mb.getPasswd());
   pstmt.setString(4, mb.getTel());
   pstmt.setString(5, mb.getAddr());
   pstmt.setString(6, mb.getNum());
   pstmt.executeUpdate();
   return true;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return false;
 }
 public boolean outmember(MemberBean mb){
  PreparedStatement pstmt=null;
  String sql4="delete from member where num=?;";
  try {
   pstmt=conn.prepareStatement(sql4);   
   pstmt.setString(1, mb.getName());
   pstmt.setString(2, mb.getId());
   pstmt.setString(3, mb.getPasswd());
   pstmt.setString(4, mb.getTel());
   pstmt.setString(5, mb.getAddr());
   pstmt.setString(6, mb.getNum());
   pstmt.executeUpdate();
   return true;
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return false;
 }
 public boolean loginCheck(String id,String passwd){
  String sql1="select * from member  where  id='kim123'";
  sql1="select * from member  where  id='"+id+"'   and  passwd='"+passwd+"'";
    String sql2="select * from member  where  id=? and passwd=?";
  //
    PreparedStatement  pstmt=null;
    ResultSet  rest=null;
    try {
   pstmt=conn.prepareStatement(sql2);
   pstmt.setString(1, id);
   pstmt.setString(2, passwd);
   rest=pstmt.executeQuery();
   if(rest.next())
   return true;
  
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return false;
 } 
 Connection conn;
 public MemberDAO(){
  //DB에 접속하는 부분
  //driver load
  //connection
  try {
   Class.forName("com.mysql.jdbc.Driver");
   String url="jdbc:mysql://localhost:3306/mydb";
   String user="root";
   String passwd="admin";
   conn=DriverManager.getConnection(url, user, passwd);
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }// properties file에서 선택적으로 가져올수 있도록
            // 톰캣의web.xml에 애초에 설정하고 들어가는 방법
                                    // 현재app의 web.xml설정
  catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 } 
}
==========================================================================
로그인 페이지입니다.
======== index.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>환영합니다.</title>
</head>
<body>
 환영합니다. <%@include file="member/login.jsp" %>
</body>
</html>
======== login.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title> Login JSP</title>
</head>
<body>
 <form action="login.do"  method="post">
 아이디:<input type="text"  name="id"><br>
 암  호:<input  type="password"  name="passwd"><br>
 <input type="submit" value="로그인">
 <input type="reset" value="취소" >
 <%-- 회원가입 버튼으로 바꾸어야함 --%>
 </form>
 <form action="member/joinmember.jsp"  method="post">
 <input type="submit" value="회원가입">
 <%-- 회원가입 버튼으로 바꾸어야함 --%>
 </form> 
</body>
</html>
======== LoginServlet.java =================================================
package member.control;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.model.MemberBean;
import member.model.MemberDAO;

public class LoginServlet extends HttpServlet {
 public void doPost(HttpServletRequest req,HttpServletResponse res)throws IOException,ServletException{
  //  client로부터 받은 id,passwd가 존재하는지 확인
  String id= req.getParameter("id").trim();
  String passwd=req.getParameter("passwd").trim();
  //id,passwd는 null이 아니라는 전제  
  // MemberDAO 에 id,passwd를 전달해서 결과를 통보 받은후
   MemberDAO dao=new MemberDAO();
   //필요할때마다 커넥션을 만드는 것은 좋지 않은 방법
   boolean isMember=dao.loginCheck(id, passwd);
   if(isMember){
    //멤버의 데이타를 받아옴
    MemberBean loginMember=dao.memberInfo(id);
    if(loginMember==null){
     //???
    }else{
    //로그인상태에서 로그아웃할때까지 멤버데이타 값을 기억시키고
    HttpSession  session=  req.getSession(); 
    //필요하면 언제든지 사용할 수 있도록 유지
    session.setAttribute("loginMemberData", loginMember);    
    // welcome.jsp
    //login.do 에의해서 현재서블릿이 호출된 상태
    req.getRequestDispatcher("welcome.jsp").forward(req,res);
    }
   }else {
    //loginfaile.jsp
    res.sendRedirect("member/loginfail.jsp");    
   }  
 }//doPost() end
}//class end
======== loginok.jsp ===============================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>loginfail</title>
</head>
<body>
 loginfail
</body>
</html>
======== logout.jsp =======================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>logout</title>
</head>
<body>
 이용해 주셔서 감사합니다.<br>
 <%
  if(!session.isNew())session.invalidate();
 %>
</body>
</html>
==========================================================================
회원가입 페이지입니다.
======== joinmember.jsp ==================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>JOIN MEMBER JSP</title>
</head>
<body>
 JOIN MEMBER<br> 
 <form action="../joinmember.do"  method="post">
  번호:<input type="text"  name="num"><br>
  이름:<input type="text"  name="name"><br>
  아이디:<input type="text"  name="id"><br>
  암  호:<input  type="password"  name="passwd"><br>  
  연락처:<input type="text"  name="tel"><br>
  주소:<input type="text"  name="addr"><br>
  <input type="submit" value="회원가입">
  <input type="reset" value="취소" >  
 </form> 
</body>
</html>
======== JoinMemberServlet.jsp ===========================================
package member.control;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.model.MemberBean;
import member.model.MemberDAO;

public class JoinMemberServlet extends HttpServlet{
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
  // joinmember.jsp 값을 받는다
  MemberDAO dao=new MemberDAO();
  MemberBean mb=new MemberBean();
  mb.setNum(req.getParameter("num"));
  mb.setName(req.getParameter("name"));
  mb.setId(req.getParameter("id"));
  mb.setPasswd(req.getParameter("passwd"));
  mb.setTel(req.getParameter("tel"));
  mb.setAddr(req.getParameter("addr"));
  boolean isSuccess=dao.memberJoin(mb);
  if(isSuccess){
   HttpSession session=req.getSession();
   session.setAttribute("loginMemberData", mb);
   req.getRequestDispatcher("welcome.jsp").forward(req,res);
  }
  else {
   res.sendRedirect("member/loginfail.jsp");
  }
 } 
}
======== welcome.jsp ====================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="member.model.MemberBean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Welcome jsp</title>
 <script type="text/javascript" language="javascript">
    function logout(){
     document.location="logout.jsp";
    }
 </script>
 <script type="text/javascript" language="javascript">
    function modify(){
     document.location="modify.jsp";
    }
 </script>
 <script type="text/javascript" language="javascript">
    function memberout(){
     document.location="memberout.jsp";
    }
 </script>
</head>
<body>
Welcome<br>
 <%
 MemberBean loginMember = new MemberBean();
 session = request.getSession();
 
 loginMember=
   (MemberBean)session.getAttribute("loginMemberData");
 %>

 <%=loginMember.getName() %>님 환영합니다.<br> 
 <input type="button" value="정보수정"  onclick="modify()"> 
 <input type="button" value="로그아웃"  onclick="logout()">
 <input type="button" value="회원탈퇴"  onclick="memberout()">
</body>
</html>
==========================================================================
정보수정 페이지 입니다.
======== modify.jsp =======================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="member.model.MemberBean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Modify JSP</title>
</head>
<body>
 정보 수정
 <%
 session = request.getSession(); 
 MemberBean mb = new MemberBean();
 mb = (MemberBean)session.getAttribute("loginMemberData");
 %>
 <form action="modifymember.do"  method="post">
  번호:<%=mb.getNum() %><br>
  이름:<input type="text"  name="name" value = <%=mb.getName() %>><br>
  아이디:<input type="text"  name="id" value = <%=mb.getId() %>><br>
  암  호:<input  type="password"  name="passwd" value = <%=mb.getPasswd() %>><br>  
  연락처:<input type="text"  name="tel" value = <%=mb.getTel() %>><br>
  주소:<input type="text"  name="addr" value = <%=mb.getAddr() %>><br>
  <input type="submit" value="완료">
  <input type="reset" value="취소" >  
 </form> 
</body>
</html>
======== ModifyMemberServlet.java =======================================
package member.control;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.model.MemberBean;
import member.model.MemberDAO;

public class ModifyMemberServlet extends HttpServlet{
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
  MemberDAO dao=new MemberDAO();
  MemberBean mb=new MemberBean();
  mb.setNum(req.getParameter("num"));
  mb.setName(req.getParameter("name"));
  mb.setId(req.getParameter("id"));
  mb.setPasswd(req.getParameter("passwd"));
  mb.setTel(req.getParameter("tel"));
  mb.setAddr(req.getParameter("addr"));
  boolean isSuccess=dao.memberModify(mb);
  if(isSuccess){
   HttpSession  session=  req.getSession();
   session.setAttribute("loginMemberData", mb);
   req.getRequestDispatcher("modifyok.jsp").forward(req,res);
  }else{   
   // 센드 리다이렉트로 처리한다.
   res.sendRedirect("modifyfail.jsp");
  }   
 } 
}
=== modifyok.jsp & modifyfail.jsp 는 텍스트 파일이라 올리지 않습니다. ========
==========================================================================
회원탈퇴페이지입니다.
======== memberout.jsp ==================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="member.model.MemberDAO"%>
<%@page import="member.model.MemberBean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Memberout JSP</title>
</head>
<body>
 아래의 정보를 삭제하시겠습니까?
 <% 
 MemberBean mb=(MemberBean)session.getAttribute("loginMemberData"); 
 %>
 <form action="outmember.do"  method="post">
  번호:<%=mb.getNum() %><br>
  이름:<%=mb.getName() %><br>
  아이디:<%=mb.getId() %><br>
  암  호:<%=mb.getPasswd() %><br>  
  연락처:<%=mb.getTel() %><br>
  주소:<%=mb.getAddr() %><br>
  <input type="submit" value="회원탈퇴">
 </form>
</body>
</html>
======== OutMemberServlet.jsp ============================================
package member.control;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import member.model.MemberBean;
import member.model.MemberDAO;

public class OutMemberServlet extends HttpServlet {
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
  MemberDAO dao=new MemberDAO();
  MemberBean mb=new MemberBean();
  mb.setNum(req.getParameter("num"));
  mb.setName(req.getParameter("name"));
  mb.setId(req.getParameter("id"));
  mb.setPasswd(req.getParameter("passwd"));
  mb.setTel(req.getParameter("tel"));
  mb.setAddr(req.getParameter("addr"));
  boolean isSuccess=dao.memberModify(mb);
  if(isSuccess){
   HttpSession  session=  req.getSession();
   session.setAttribute("loginMemberData", mb);
   req.getRequestDispatcher("outmemberok.jsp").forward(req,res);
  }else{   
   // 센드 리다이렉트로 처리한다.
   res.sendRedirect("outmemberfail.jsp");
  }
 }
}
==========================================================================
아이디 제한 등 예외처리는 별도의 클래스를 만들어서 처리할 계획입니다.
==========================================================================

2008. 9. 25. 01:58

이클립스 & JDK & Tomcat 5.5 & mysql 자기컴퓨터에 세팅

2시간에 걸친 삽질 자료를 올립니다.
더 좋은 방법 있으신분은 트랙백 부탁 드려요. ^0^
1. 이클립스 설치
http://www.eclipse.org/downloads/ 의 오른쪽메뉴 Popular projects의 1. Web Tools를 선택하세요.


http://download.eclipse.org/webtools/downloads/ 에서 버전을 선택하세요

WTP 파일을 클릭해서 다운로드 받으세요.
(아래 파일들은 개별적인 것들임)

미러링 사이트에서 다운로드 받게 됩니다.
일단 받아두시고 설치는 2번에서 하게 됩니다.


2. JDK 다운로드 및 설치
다운 받으신 eclipse 파일을 적당한 위치(D:\JAVA\eclipse)에 풀어서(?) 놓아두세요.

java.sun.com 사이트 오른쪽 메뉴의 Popular Downloads의 Java SE(Standard Edition)를
클릭하세요.


저는 1.6으로 배우고 있어서 이걸 클릭해서 받았습니다.

플랫폼을 선택하고 동의서에 체킹하고 넘어갑니다.

제가 찾던 파일을 찾았네요. ^^;

다운 받으셔서 설치를 하시면 됩니다.
주의 사항 : eclipse를 실행할때 jre가 없어서 안된다는 메시지가 나올 수 있으므로
jdk는 D:\JAVA\jdk1.6.0_07
jre는 D:\JAVA\eclipse\jre (이클립스를 풀어둔 디렉토리 아래) 이렇게 각각 설치하였습니다.(설치화면을 캡쳐하지 못해서 말로만 설명 드립니다. 처음은 jdk 설치 경로를 묻고
두번째는 jre의 설치 경로를 묻게 됩니다. 영어 읽기 싫다고 대충 하시면 재설치의 번거로움을 겪게 됩니다. ㅋㅋ)
이렇게 설치하는 이유 설명은 짱가님이 채워주실겁니다. ^^;

3. tomcat 설치
tomcat.apache.org 사이트의 왼쪽 메뉴에서 다운로드를 하시면 됩니다.
저는 5.5를 받았습니다.

플러그인 (tomcatPluginV32beta2.zip)을 다운 받아서 이클립스 플러그인에(D:\JAVA\eclipse\plugins) 복사합니다. (http://www.eclipsetotale.com/tomcatPlugin.html)
여하튼 D:\JAVA\eclipse\plugins 디렉토리에 com.sysdeo.eclipse.tomcat_3.2.0.beta2 폴더를 복사하여 넣고 톰캣은 D:\JAVA\Tomcat 5.5에 설치하였습니다.

설치 후 브라우저에 http://localhost:9090(임의 설정 포트) 입력하셔서 고양이가 나오면
셋팅이 완료 된 것입니다.

주의 사항 : 톰캣의 기본디렉토리는 D:\JAVA\Tomcat 5.5\webapps\ROOT 
                                                톰캣 설치 경로  -------   기본 디렉토리
기본 디렉토리를 이렇게(D:\JAVA\Java_Workspace) 잡으실 경우에는

설치디렉토리의 conf\server.xml 의 이 부분을 수정해 주시면 됩니다.
server.xml은 첨부파일로 넣어두겠습니다.
server.xml을 수정하신 후 톰캣서버를 restart 하시면
기본디렉토리의 index.jsp파일을 확인하실 수 있습니다.


4. MYSQL 설치는 내일 다시 하겠습니다.




2008. 9. 23. 15:54

[0923]jspBean, forward, include

멤버 필드에 있는 값은 초기화 되어 사용된다.
boolean은 false 값으로 상수형은 0값으로 문자형은 null 값으로

아래의 예제는 클라이언트가 페이지를 호출할 때 값이 어떻게 변하는지 보여준다.
init() 메서드의 a 값은 처음에 한번 불려지는데 이 값은 static한 멤버필드가 되어
은행의 이율처럼 인스턴스가 생성되기 전부터 고정적인 상수 값을 가지게 되며,
b값은 클라이언트가 브라우져를 호출할때마다 값이 갱신되며,
c값은 클라이언트가 어떤 값을 입력할때마다 그 값이 변경된다.
======== mem.jsp ========================================================
======== http://localhost:9090/Test0923/mem.jsp?c=10======================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <%!
 int a;
 int b;
 %>
 <%!
 @Override
 public void init(){
  a++;  
 }
 %>
 <%
 int c=Integer.parseInt(request.getParameter("c"));
 b++;
 %>
 <%="a = "+a%><br>
 <%="b = "+b%><br>
 <%="c = "+c%><br>
</body>
</html>
======== foo.MemberFieldTestServlet.java =================================
= http://localhost:9090/Test0923/servlet/foo.MemberFieldTestServlet.jsp?c=50 =
package foo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberFieldTestServlet extends HttpServlet{
 int a;
 int b;
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
  b++;
  int c=0;
  c=Integer.parseInt(req.getParameter("c"));
  System.err.println("doGet() a :"+a+"<br>");
  System.err.println("doGet() b :"+b+"<br>");
  System.err.println("doGet() c :"+c+"<br>");
  PrintWriter out=res.getWriter();
  out.println("doGet() a :"+a+"<br>");
  out.println("doGet() b :"+b+"<br>");
  out.println("doGet() c :"+c+"<br>");
 }// doGet end
 @Override
 public void init() throws ServletException {
  a++;
  System.err.println("init :"+a);
 }// init() end
}// class end
=========================================================================
아래 예제는 에러가 발생했을때 에러페이지로 이동하라는 소스가 담겨 있다.
======== test1.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@page errorPage="errPage.jsp" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <%
 int a=4/0;
 %>
</body>
</html>
======== errPage.jsp ====================================================
=== 주의 사항 : 에러페이지의 내용이 너무 짧으면 에러 처리가 안 될 수도 있다.=
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    <%@page isErrorPage="true" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 Error Handling Page<br>
 <%
 out.print("Exception : "+exception.getClass().getName()+"<br>");
 %>
</body>
</html>
=========================================================================
useBean을 이용한 예와 그렇지 않은 경우 소스를 비교해 본다.
======== test2.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="mem.MemberBean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <%
 MemberBean mem1=new MemberBean();
 session.setAttribute("mem1",mem1);
 mem1.setName("이강국");
 out.print(mem1.getName()+"<br>");
 %>
 <jsp:useBean id="mem2" class="mem.MemberBean" scope="session" />
 <jsp:setProperty name="mem2" property="name" value="김강국" />
 <jsp:getProperty name="mem2" property="name"/><br>
</body>
</html>
======== mem.MemberBean ===============================================
package mem;
public class MemberBean {
 protected String num;
 protected String name;
 protected String id;
 protected String passwd;
 protected String tel;
 protected String add;
 public String getAdd() {
  return add;
 }
 public void setAdd(String add) {
  this.add = add;
 }
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getNum() {
  return num;
 }
 public void setNum(String num) {
  this.num = num;
 }
 public String getPasswd() {
  return passwd;
 }
 public void setPasswd(String passwd) {
  this.passwd = passwd;
 }
 public String getTel() {
  return tel;
 }
 public void setTel(String tel) {
  this.tel = tel;
 }
}
=========================================================================
자바빈을 이용한 두번째 예제 폼에서 데이터를 입력 받아 출력
======== test3call.jsp ====================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <form action="test3.jsp">
 번호 : <input type="text" name="num"><br>
 이름 : <input type="text" name="name"><br>
 아이디 : <input type="text" name="id"><br>
 비밀번호 : <input type="password" name="passwd"><br>
 연락처 : <input type="text" name="tel"><br>
 주소 : <input type="text" name="add"><br>
 <input type="submit" value="전송">
 <input type="reset" value="취소">
 </form>
</body>
</html>
======== test3.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page import="mem.MemberBean"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 <%
 MemberBean mem11=new MemberBean();
 mem11.setNum(request.getParameter("num").trim());
 mem11.setName(request.getParameter("name").trim());
 mem11.setId(request.getParameter("id").trim());
 mem11.setPasswd(request.getParameter("passwd").trim());
 mem11.setTel(request.getParameter("tel").trim());
 mem11.setAdd(request.getParameter("add").trim());
 %>
 <jsp:useBean id="mem22" class="mem.MemberBean"/>
 <jsp:setProperty name="mem22" property="*"/>
 <jsp:getProperty name="mem22" property="name"/><br>
 mem22.getAdd()==<%=mem22.getAdd()%><br>
 mem11.getAdd()==<%=mem11.getAdd()%><br>
</body>
</html>
=========================================================================
include와 forward를 이용한 정적, 동적 데이터 호출에 관한 예
test4include.jsp 와 test4_1include.jsp를 호출했을때의 차이점
include "test4_1include.jsp" 호출이 되지 않는다. ㅡㅡ;
forward를 호출했을 경우 앞의 include는 무시된다.
======== test4.jsp ========================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 test4.jsp start<br>
 <%
 int c=50;
 %>
 <%@include file="test4include.jsp" %>
 test4.jsp end<br>
 동적으로 부를수 있는가?<br>
 <jsp:include flush="true" page="test4_1include.jsp" >
 <jsp:param name="d" value="이강국" />
 </jsp:include>
</body>
</html>
======== test4include.jsp =================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <%
 int a=40;
 int b=a*c;
 out.print(a+"*"+c+"="+b);
 %>
======== test4_1include.jsp ===============================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <%
 int c=3;
 int a=40;
 int b=a*c;
 request.setCharacterEncoding("EUC=KR");
 out.print(a+"*"+c+"="+b+request.getParameter("d"));
 %>
======== test4_2.jsp ======================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 forward file
</body>
</html>
======== test4forward.jsp ================================================
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 test4.jsp start<br>
 <%
 int c=50;
 %>
 <%@include file="test4include.jsp" %>
 test4.jsp end<br>
 동적으로 부를수 있는가?<br>
 <jsp:forward page="test4forward.jsp"/>
</body>
</html>
=========================================================================

2008. 9. 23. 14:10

개발자의 연봉에 관한 글

예전에 글들도 많은데..
요즘 올라온 글들이 있어서... 링크.

예전 글들은 보는 대로 바로 바로 올리도록 하지.


프로그래머의 이직률이 높은 이유(?)

2008. 9. 22. 18:12

참고할 만한 공부 관련 블로그



어려운 블로그들은 다음에 소개할께

지금은 너처럼 공부하는 사람들의 블로그들 소개..


http://blog.naver.com/rainbow8830
http://micropilot.tistory.com
http://blog.naver.com/dalbong97




블로그 구독은
Google Reader  나 HanRss 를 사용하면 편하다.
그리고 브라우저는 Firefox 를 사용하면 HanRSS 사용해서 읽기 편해.


'Java' 카테고리의 다른 글

자바 로드맵 두개~  (0) 2008.08.24
2008. 9. 17. 17:52

Chap 1. 서블릿과 JSP는 어디에 쓰는 물건인고?

학습 목표 : GET, POST 등 HTTP 메소드에 대해 장점과 기능을 알아봅시다.

GET 는 서버로부터 뭔가를 돌려 받는다고 생각하시면 됩니다.
GET 메소드는 폼 데이터를 URL 뒤에 추가합니다.
POST는 서버에게 자원을 요청할 때 필요한 정보를 함께 넘겨줍니다.
POST 메소드는 요청의 몸체(body)에 폼 데이터를 포함합니다.

사용자 삽입 이미지
사용자 삽입 이미지

MINE 타입은 브라우저에게 어떤 종류의 데이터를 받을 것이라는 정보를 미리 알려주어, 브라우저가 데이터를 어떻게 다룰지 준비하도록 합니다.


'수업 > Head First Servlets & JSP' 카테고리의 다른 글

로그인, 회원가입, 정보수정, 탈퇴  (2) 2008.09.26
[0923]jspBean, forward, include  (0) 2008.09.23
2008. 9. 11. 18:18

[기타] 성적 처리 프로그램 - 포스팅 중

학생의 번호, 이름, 국어, 영어, 수학 점수를 입력 받아 총점, 평균, 등급(A~F), 랭킹을 구하시오.
설계 과정
1. 기본값 출력 테스트
각 필드의 변수명을 정하고 출력 되는지 확인한다.
2. 변수 입력 받은 후 출력
입력 받은 변수명을 연산하고 출력한다.
3. 유효성 검사
유효하지 않은 값과 입력 시, 에러를 해결한다.
4. (1~3까지의 1명의 성적을 처리했다면) 여러 명의 점수를 입력 받아서 처리한다.
5. Swing로 대체한다.
===========1. 기본값 출력 테스트 ===================================================
===============================
Score.java
package scorecalc;
public class Score {
 protected int num;
 protected String name;
 protected int kor;
 protected int eng;
 protected int math;
 protected int total;
 protected double avg;
 protected char grade='*';
 protected int rank;
 public void outPut(){
  System.out.println(num+" "+name+" "+kor+" "+eng+" "+math+" "+total+" "+avg+" "+grade+" "+rank);
 }
 public void titlePrint(){
  System.out.println("번호"+" "+"이름"+" "+"국어"+" "+"영어"+" "+"수학"+" "+"총점"+" "+"평균"+" "+"등급"+" "+"랭킹");
 }
}
===========================================
ScoreMain.java
package scorecalc;
public class ScoreMain {
 public static void main(String[] args) {
  Score sc = new Score();
  sc.titlePrint();
  sc.outPut();
 }
}
===========2. 변수를 입력 받은 후 출력 ==============================================
=======================
Score.java
package scorecalc;
public class Score {
 protected int num;
 protected String name;
 protected int kor;
 protected int eng;
 protected int math;
 protected int total;
 protected double avg;
 protected char grade='*';
 protected int rank;
}
=======================
ScoreIO.java
package scorecalc;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ScoreIO extends Score{
 public void outPut(){
  System.out.println(num+" "+name+" "+kor+" "+eng+" "+math+" "+total+" "+avg+" "+grade+" "+rank);
 }
 public void titlePrint(){
  System.out.println("성적처리를 시작합니다.");
  System.out.println("번호"+" "+"이름"+" "+"국어"+" "+"영어"+" "+"수학"+" "+"총점"+" "+"평균"+" "+"등급"+" "+"랭킹");
 }
 public void standInput() throws IOException {
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  System.out.println("번호를 입력하세요.");
  num = Integer.parseInt(br.readLine().trim());
  System.out.println("이름을 입력하세요.");
  name = br.readLine().trim();
  System.out.println("국어점수를 입력하세요.");
  kor = Integer.parseInt(br.readLine().trim());
  System.out.println("영어점수를 입력하세요.");
  eng = Integer.parseInt(br.readLine().trim());
  System.out.println("수학점수를 입력하세요.");
  math = Integer.parseInt(br.readLine().trim());
  calc();
 }
 public void calc(){
  total = kor + eng + math;
  avg = (double)total/3.;
  if(avg>100 || avg <0)grade='*';  
  else if(avg>=90)grade='A';
  else if(avg>=80)grade='B';
  else if(avg>=70)grade='C';
  else if(avg>=60)grade='D';
  else grade='F';
 }
}
=======================
ScoreMain.java
package scorecalc;
import java.io.IOException;
public class ScoreMain {
 public static void main(String[] args) throws IOException {
  ScoreIO sc = new ScoreIO();
  sc.standInput();
  sc.titlePrint();
  sc.outPut();
 }
}
============ 3. 유효성 검사 ========================================================
유효성 검사를 위해서 별도의 메서드(inputCheck)를 만들어 ScoreIO.java 파일의 standInput() 메서드를 다시 기술한다.
파일명 ScoreIO.java

protected void standInput() throws IOException {
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  num = inputCheck("번호?", br);
  System.out.println("이름을 입력하세요."); // 이름은 String형이므로 inputCheck에서 제외
  name = br.readLine().trim();
  kor = inputCheck("국어?",br);
  eng = inputCheck("영어",br);
  math = inputCheck("수학?", br);
  calc();
 }
 private int inputCheck(String str, BufferedReader br) throws IOException{
  System.out.println(str);
  int temp=-1;
  try {
   temp=Integer.parseInt(br.readLine().trim());
   if(str.startsWith("번호")) return temp;
   else if (temp>=0 && temp<=100) return temp;
  } catch (NumberFormatException e) {
   System.out.println("숫자를 다시 입력 해 보세요");
  }
  temp=inputCheck(str,br);
  return temp;    
 }
=============== 4. 여러명 처리 =====================================================
여러명의 데이터를 입력 받아 처리하기 위해 ArrayList로 처리한다.
파일명 ScoreArray.java
package scorecalc;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class ScoreArray {
 private ArrayList<Score> stus = new ArrayList<Score>();
 public void init(){
  stus.add(new Score());
  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  System.out.println("추가로 입력? y/n");
  try {
   String yn=br.readLine().trim();
   if(yn.equalsIgnoreCase("y")) init();
   else {
    Collections.sort(stus);
    output();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 public void output(){
  if(stus==null || stus.size()==0){
   System.out.println("출력할 자료가 없음");
   return;
  }
  for(Score s:stus)
   s.output();
  /*for(int i=0;i<stus.size();i++){ // for문 해석문
   stus.get(i).outPut();
  }*/
 }
}
==========================
파일명 ScoreArrayUse.java
package scorecalc;
public class ScoreArrayUse {
 public static void main(String[] args) {
  ScoreArray stus=new ScoreArray();
  stus.init();
 }
}
============ 5. Swing으로 화면 연결 ================================================
===================================================================================
===================================================================================
===================================================================================
===================================================================================
===================================================================================
===================================================================================
===================================================================================


2008. 9. 9. 15:26

Part 7. Applet과 스레드 I - Applet

애플릿(Applet)이란?
보통 애플리케이션은 main 함수가 꼭 포함되어 있지만
자바 애플릿은 HTML 페이지에 포함되어 웹 브라우저에 의해 실행되는 자바 프로그램입니다.

애플릿은 Applet 클래스를 상속 받아야 합니다.
import java.applet.Applet;
주의 사항 : 애플릿을 상속받는 클래스는 public로 선언되어야 웹 브라우져에서 실행이 가능합니다.
ex : public class AppletTest extends Applet{}

애플릿의 주기
위에서 보셨듯 애플리케이션은 main 메서드를 시작점으로 하지만 애플릿은 main 메서드를 제공하지 않으므로 5가지의 메서드가 웹 브라우저의 상태에 따라 호출됩니다.

메소드

설명

init()

애플릿이 웹 브라우저에 로드될 때 호출

start()

해당 페이지를 사용자가 잠시 떠났다가 다시 돌아왔을 때마다 실행

paint()

애플릿 화면을 다시 그려야 하는 경우에 호출

stop()

페이지를 떠날 때 호출

destroy()

웹 브라우저를 종료하게 되면 호출

메서드의 실행결과를 애플릿 프로그램을 실행중인 웹 브라우저에서 살펴보려면
[도구] - [Sun Java 콘솔] 메뉴를 선택하면 됩니다.

사용자 삽입 이미지


repaint() : paint() 메서드가 다시 호출이 되어야 할때 사용하는 메서드로서
repaint() 메서드를 호출하면 paint() 메서드가 웹브라우저에 의해서 자동으로 호출됩니다.

애플릿 이벤트 처리
애플릿에서 마우스와 관련된 이벤트는 MouseEvent(클래스 : MouseAdapter, 인터페이스 : MouseListener)가 있습니다.
아래는 MouseEvent와 관련된 메서드 입니다.

주요 메소드

설명

public void mousePressed(MouseEvent e)

마우스 버튼이 눌렸을 때

public void mouseReleased(MouseEvent e)

마우스 버튼이 눌려졌다가 떼어졌을 때

public void mouseEntered(MouseEvent e)

마우스가 영역 안으로 들어 왔을 때

public void mouseExited(MouseEvent e)

마우스가 영역 밖으로 나갈 때

public void mouseClicked(MouseEvent e)

마우스가 클릭되었을 때

============== 애플릿에서 마우스가 클릭된 위치에 점 출력 ============================
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class AppletExam03 extends Applet{
 int x,y;
 public void init(){
  addMouseListener(new MouseAdapter(){
   public void mouseClicked(MouseEvent e){
    x=e.getX();
    y=e.getY();
    repaint();
   }
  }
  );
 }
 public void start(){
  x=-1; y=-1;
  repaint();
 }
 public void paint(Graphics g){
  if(x!=-1 || y!=-1){
   g.fillOval(x, y, 10, 10);
  }
 }
}
========================== 애플릿 불러오는 html ====================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> Applet fillOval </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>

 <BODY>
  <applet code="AppletExam03.class" width="300" height="300"></applet>
 </BODY>
</HTML>
===================================================================================

2008. 9. 2. 00:41

자바를 진정으로 하고 싶으면...

http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200706250022#0

Thinking in Java 를 보자~

책방에서 한번 둘러보고 맘에 들거나 본인에게 맞을 것 같으면 ,,, 꼭 사봐라~ ^^