반응형
*암호화
-
Java.Security 패키지에서 제공
-
SHA(Secure Hash Algorizm)일방향 해쉬 알고리즘 : 처리된 데이터는 유일성을 가지며 절대로 원래 문자열로 돌아갈 수 없다.
-
MD2,MD5,SHA-1,SHA-128,SHA-512.plgp
-
----------키가 점점 길어진다------------->(안전)
-
MD2,MD5=>MD2는 털렸고/MessageDigest
-
SHA=>Secure Hash Algorithm
-
<<<레인보우 테이블(무식하게 때려넣어 규칙을 알아냄) 으로 털리기도....
-
MessageDigest)
-
MD2/MD5
-
SHA-1,224,256,384,512
-
사용법)
-
1.알고리즘을 설정하여 객체를 얻는다.
-
MessageDigest md=MessageDigest.getInstance( Algorithm:MD2,MD5,SHA-1,SHA-224,,,,등 );
-
2.평문(plain text)를 알고리즘에 해당하는 문자열로 변경
-
String text="아아아";
-
md.update(text.getBytes()); //이진수로 변경하는..
-
3.변경된 문자열을 얻는다.
-
new String(md.digest() );
-
//나도 모르는 문자열이 나와 base64로 인코딩
-
-
암호화(PKI) : 암호화된 문자열은 키를 가지고 복호화 할 수 있는 것.
-
DES,ACE
-
<<수학자가 만드는 것>>>
package kr.co.sist.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.tomcat.util.codec.binary.Base64;
public class ShaUtil {
private static Base64 base64=new Base64();
public static String shaEncoding(String plaintext) {
String cipertext="";
if(plaintext!=null||"".equals(plaintext)) {
try {
//1.알고리즘을 사용할 수 있는 객체 얻기
MessageDigest md=MessageDigest.getInstance("SHA-1");
//2.평문(plainText)를 암호문(cipherText)로 변환
md.update(plaintext.getBytes());
//일반형 해쉬는 키가 존재하지 않지만 암호화에만? 있다..?
//3.변환된 암호문(ciphertext)얻기
cipertext=new String(base64.encode(md.digest()));
} catch (NoSuchAlgorithmException e) {//사용할 수 없는 알고리즘을 넣었을 때
e.printStackTrace();
}//end catch
}//end if
return cipertext;
}//shaEncoding
// public static void main(String[] args) {
// System.out.println(shaEncoding("1234567890"));
// }//main
}//class
alter table web_member modify age varchar2(3);
package kr.co.sist.user.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import kr.co.sist.user.vo.WebMemberVO;
public class WebMemberDAO {
private static WebMemberDAO wm_dao;
public WebMemberDAO() {
}//WebMemberDAO
public static WebMemberDAO getInstance() {
if(wm_dao==null) {
wm_dao=new WebMemberDAO();
}//end if
return wm_dao;
}//getInstance
public Connection getConn() throws SQLException{
Connection con=null;
try {
//1.JNDI 사용객체 생성
Context ctx=new InitialContext();
//2.DBCP에서 DataSource 얻기
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/dbcp");
//3.DataSource에서 Connection 얻기
con=ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
}//end catch
return con;
}//getConn
/**
* ID가 존재 하는지 중복 검사
* @param id
* @return
* @throws SQLException
*/
public boolean selectId(String id) throws SQLException{
boolean flag=false;
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//1.
//2.
//3.
con=getConn();
//4.
String selectId="select id from web_member where id=?";
pstmt=con.prepareStatement(selectId);
pstmt.setString(1, id);
//5.
rs=pstmt.executeQuery();
flag=!rs.next();//있으면 true->반대로 false
}finally {
//6.
if(rs!=null) {rs.close();}//end if
if(pstmt!=null) {pstmt.close();}//end if
if(con!=null) {con.close();}//end if
}//end finally
return flag;
}//selectId
/**
* 입력된 회원 정보를 가지고 DB에 추가하는 일
* @param wn_vo
* @throws SQLException
*/
public void insertMember(WebMemberVO wm_vo)throws SQLException{
Connection con=null;
PreparedStatement pstmt=null;
try {
//1.
//2.
//3.
con=getConn();
//4.
StringBuilder insertMember=new StringBuilder();
insertMember
.append(" insert into web_member(")
.append(" id,pass,name,ssn,gender,birth,age,marriage,marriage_date,zipcode,addr1,addr2,greeting,ip_address ")
.append(" ) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?) ");
pstmt=con.prepareStatement(insertMember.toString());
pstmt.setString(1, wm_vo.getId());
pstmt.setString(2, wm_vo.getPass());
pstmt.setString(3, wm_vo.getName());
pstmt.setString(4, wm_vo.getSsn());
pstmt.setString(5, wm_vo.getGender());
pstmt.setString(6, wm_vo.getBirth());
pstmt.setString(7, wm_vo.getAge());
pstmt.setString(8, wm_vo.getMarriage());
pstmt.setString(9, wm_vo.getMarriage_date());
pstmt.setString(10, wm_vo.getZipcode());
pstmt.setString(11, wm_vo.getAddr1());
pstmt.setString(12, wm_vo.getAddr2());
pstmt.setString(13, wm_vo.getGreeting());
pstmt.setString(14, wm_vo.getIp_address());
pstmt.executeUpdate();
String[] lang=wm_vo.getLang();
if(lang !=null) {
pstmt.close();
String insertLang="insert into web_lang(id,lang) values(?,?)";
//4.
pstmt=con.prepareStatement(insertLang);
for(int i=0; i<lang.length; i++) {
pstmt.setString(1, wm_vo.getId());
pstmt.setString(2, lang[i]);
//5.
pstmt.executeQuery();
}//end for
}//end if
}finally {
//6.
if(pstmt!=null) {pstmt.close();}//end if
if(con!=null) {con.close();}//end if
}//end finally
}//insertMember
}//class
package kr.co.sist.user.vo;
import java.util.Arrays;
public class WebMemberVO {
private String id, pass, name, ssn, gender, birth, age, marriage, marriage_date, zipcode, addr1, addr2, greeting,
ip_address;
private String[] lang;
public WebMemberVO(String id, String pass, String name, String ssn, String gender, String birth, String age,
String marriage, String marriage_date, String zipcode, String addr1, String addr2, String greeting,
String ip_address, String[] lang) {
this.id = id;
this.pass = pass;
this.name = name;
this.ssn = ssn;
this.gender = gender;
this.birth = birth;
this.age = age;
this.marriage = marriage;
this.marriage_date = marriage_date;
this.zipcode = zipcode;
this.addr1 = addr1;
this.addr2 = addr2;
this.greeting = greeting;
this.ip_address = ip_address;
this.lang = lang;
}// WebMemberVO
public String getId() {
return id;
}
public String getPass() {
return pass;
}
public String getName() {
return name;
}
public String getSsn() {
return ssn;
}
public String getGender() {
return gender;
}
public String getBirth() {
return birth;
}
public String getAge() {
return age;
}
public String getMarriage() {
return marriage;
}
public String getMarriage_date() {
return marriage_date;
}
public String getZipcode() {
return zipcode;
}
public String getAddr1() {
return addr1;
}
public String getAddr2() {
return addr2;
}
public String getGreeting() {
return greeting;
}
public String getIp_address() {
return ip_address;
}
public String[] getLang() {
return lang;
}
@Override
public String toString() {
return "WebMemberVO [id=" + id + ", pass=" + pass + ", name=" + name + ", ssn=" + ssn + ", gender=" + gender
+ ", birth=" + birth + ", age=" + age + ", marriage=" + marriage + ", marriage_date=" + marriage_date
+ ", zipcode=" + zipcode + ", addr1=" + addr1 + ", addr2=" + addr2 + ", greeting=" + greeting
+ ", ip_address=" + ip_address + ", lang=" + Arrays.toString(lang) + "]";
}// toString
}// class
package kr.co.sist.user;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.co.sist.user.dao.WebMemberDAO;
import kr.co.sist.user.vo.WebMemberVO;
import kr.co.sist.util.ShaUtil;
@SuppressWarnings("serial")
public class WebMemberJoin extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
//post방식일 때 한글 처리
request.setCharacterEncoding("UTF-8");//사용자가 쓰고있는 형과같은!
//사용자가 입력한 값 받기(HTML Form Control) 받기(getParameter)로
String id=request.getParameter("id");
String pass1=request.getParameter("pass1");
String name=request.getParameter("name");
String ssn1=request.getParameter("ssn1");
String ssn2=request.getParameter("ssn2");
String gender=request.getParameter("gender");
String b_year=request.getParameter("b_year");
String b_month=request.getParameter("b_month");
String b_day=request.getParameter("b_day");
String age=request.getParameter("age");
String[] interestlang=request.getParameterValues("interestlang");
String marrigeFlag=request.getParameter("marrigeFlag");
String m_year=request.getParameter("m_year");
String m_month=request.getParameter("m_month");
String m_day=request.getParameter("m_day");
String zipcode=request.getParameter("zipcode");
String addr1=request.getParameter("addr1");
String addr2=request.getParameter("addr2");
String greetings=request.getParameter("greetings");
//파라메터 값을 vo에 저장
WebMemberVO wm_vo=new WebMemberVO(id, ShaUtil.shaEncoding(pass1), name, ShaUtil.shaEncoding(ssn1+"-"+ssn2),
gender, b_year+"-"+b_month+"-"+b_day, age, marrigeFlag, m_year+"-"+m_month+"-"+m_day,
zipcode, addr1, addr2, greetings, request.getRemoteAddr(), interestlang);
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"UTF-8\">\r\n");
out.write("<title>회원가입</title>\r\n");
out.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"http://localhost:8080/servlet_prj/common/css/main_v190130.css\"/>\r\n");
out.write("<style type=\"text/css\">\r\n");
out.write("\t#joinTitle{ font-weight: bold; font-size: 20px; }\r\n");
out.write("\t.tdAlign{ text-align: center }\r\n");
out.write("\ttable{ margin: 0px auto }\r\n");
out.write("\ttr{ height: 25px}\r\n");
out.write("\t\r\n");
out.write("\t#wrap{ width: 1007px; margin:0px auto }\r\n");
out.write("\t#joinHeader{ width: 1007px; height: 195px; \r\n");
out.write("\t\t\t\t\tbackground: #FFFFFF url(http://localhost:8080/servlet_prj/web_member/images/header.png) no-repeat; }\t\r\n");
out.write("\t\t\t\t\t\r\n");
out.write("\t.span{ color: #FF0000 }\r\n");
out.write("\t#joinContent{ position: relative;\r\n");
out.write("\t\t\twidth:773px ; height:369px ; background:#FFFFFF url(http://localhost:8080/servlet_prj/web_member/images/welcome_background.png) no-repeat; }\r\n");
out.write("\t#resultTitle{ position: absolute;top:130px; left:320px}\r\n");
out.write("\t#resultInput{ position: absolute;top:150px; left:330px;}\r\n");
out.write("</style>\r\n");
out.write("<script type=\"text/javascript\">\r\n");
out.write("\t\r\n");
out.write("</script>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("<div id=\"wrap\">\r\n");
out.write("<div id=\"joinHeader\"></div>\r\n");
out.write("<div id=\"joinContent\">\r\n");
try {
//비연결성을 해결하기 위해 추가 전에 아이디를 사용중인지 다시 재조회를 하여 처리한다.
addWebMember(wm_vo);
out.write("\t<div id=\"resultTitle\">\r\n");
out.write("\t\t<span>");
out.print(name);
out.print("</span>님께서 입력하신 정보는 아래와 같습니다.\r\n");
out.write("\t</div>\r\n");
out.write("\t<div id=\"resultInput\">\r\n");
out.write("\t\t<ul>\r\n");
out.write("\t\t\t<li>아이디 : <strong>");
out.print(id);
out.print("</strong></li>\r\n");
out.write("\t\t\t<li>성별 : <strong>");
out.print(gender);
out.print("</strong></li>\r\n");
out.write("\t\t\t<li>생년월일 : <strong>");
out.print(b_year+" "+b_month+" "+b_day);
out.print("</strong></li>\r\n");
out.write("\t\t\t<li>결혼여부 : <strong>");
out.print(marrigeFlag);
out.print("</strong></li>\r\n");
out.write("\t\t\t<li>관심언어 : \r\n");
if(interestlang!=null) {
for(int i=0; i<interestlang.length; i++) {
out.write("\t\t\t\t\t<strong>");
out.print(interestlang[i]);
out.print(" </strong>\r\n");
}//end for
}else {
out.write("\t\t\t\t\t<strong>관심언어 없음.</strong>\r\n");
}//end else
out.write("\t\t\t</li>\r\n");
out.write("\t\t\t<li><a href=\"#void\">로그인</a></li>\r\n");
out.write("\t\t</ul>\r\n");
out.write("\t</div>\r\n");
}catch (RuntimeException re) {
out.println("아이디가 이미 사용 중 입니다.<br/>");
out.println("<a href='#void' onclick='history.back();'>다시 입력</a><br/>");
}catch (SQLException se) {
se.printStackTrace();
out.println("회원가입이 정상적으로 이루어지지 않았습니다.<br/>");
out.println("서비스가 원활하지 못한점 뎨둉합니다...<br/>");
out.println("정상적인 서비스를 위해서 저희 임직원들은 최선을 다하고 있습니다.<br/>");
out.println("신속하게 복구하겠습니다. 사용 중 불편한점은 010-디잘잘에게 연락해 주세요.<br/>");
}//end catch
out.write("\t\t\r\n");
out.write("\t</div>\r\n");
out.write("</div>\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
}//doPost
private void addWebMember(WebMemberVO wm_vo) throws SQLException,RuntimeException{
WebMemberDAO wm_dao=WebMemberDAO.getInstance();
//추가전에 동일 아이디가 존재하는지 다시 검색하여 처리(비연결성의 처리)
if(wm_dao.selectId(wm_vo.getId())){
throw new RuntimeException();//내려가지 않고 RuntimeException으로 날라간다.
}//end if
wm_dao.insertMember(wm_vo);
}//addWebMember
}//class
package kr.co.sist.user;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.co.sist.user.dao.WebMemberDAO;
/**
* Web Browser에서 커서를 가질 수 있는 HTML Form Control이 하나인 경우
* 엔터를 치면 JavaScript의 유효성 검증과(동작을 하기는 하지만) 상관 없이 submit이 된다.
* ""의 처리를 BackEnd에서 반드시 해주어야 한다.!!!!!!!!
* @author owner
*/
@SuppressWarnings("serial")
public class IdDuplication extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"UTF-8\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"http://localhost:8080/servlet_prj/common/css/main_v190130.css\"/>\r\n");
out.write("<style type=\"text/css\">\r\n");
out.write("#idWrap{ width :502px ; height:303px;\r\n");
out.write("\t\t\t background: #FFFFFF url(http://localhost:8080/servlet_prj/web_member/images/id_background.png) no-repeat;\r\n");
out.write("\t\t\t margin: 0px auto; position: relative; }\r\n");
out.write("#idContainer{ position: absolute;top: 110px; left:80px;position: relative; }\r\n");
out.write("#resultId{ position: absolute;top:100px;left:40px }\r\n");
out.write("#idPossible{ color :#4A8AF4; font-weight: bold }\r\n");
out.write("#idImpossible{ color :#DD5246 ;font-weight: bold} \r\n");
out.write("#viewId{ color :#121446 ;font-size:15px; font-weight: bold} \r\n");
out.write("</style>\r\n");
out.write("</head>\r\n");
out.write("<script type=\"text/javascript\">\r\n");
out.write("window.onload=function(){\r\n");
out.write("\tdocument.getElementById(\"sendId\").addEventListener(\"click\",sendId);\r\n");
out.write("\tdocument.getElementById(\"useId\").addEventListener(\"click\",sendOpener);\r\n");
out.write("\tdocument.getElementById(\"id\").addEventListener(\"keydown\",keyCheck);\r\n");
out.write("}//function\r\n");
out.write("function keyCheck(){\r\n");
out.write("\tif(window.event.keyCode==13){\r\n");
out.write("\t\tsendOpener();\r\n");
out.write("\t}//end if\t\r\n");
out.write("}//keyCheck\r\n");
out.write("function sendId(){\r\n");
out.write("\r\n");
out.write("\t//1. 자식창에서 전송할 값 받기\r\n");
out.write("\tvar idObj=document.cFrm.id;\r\n");
out.write("\tif(idObj.value == \"\"){\r\n");
out.write("\t\talert(\"전송할 id입력\");\r\n");
out.write("\t\tidObj.focus();\r\n");
out.write("\t\treturn;\r\n");
out.write("\t}//end if\r\n");
out.write("\t\r\n");
out.write("\tdocument.cFrm.submit();\r\n");
out.write("}//sendId\r\n");
out.write("function sendOpener(){\r\n");
out.write("\t//2. 부모창으로 값 넘기기\r\n");
out.write("\tvar idValue= document.getElementById(\"hidId\").value;\r\n");
out.write("\topener.window.document.joinFrm.id.value= idValue;\r\n");
out.write("\t\r\n");
out.write("\t//3.자식창 닫기\r\n");
out.write("\tself.close();\r\n");
out.write("}//sendOpener\r\n");
out.write("</script>\r\n");
out.write("<body>\r\n");
out.write("<div id=\"idWrap\">\r\n");
out.write("<div id=\"idContainer\">\r\n");
out.write("\t<form name=\"cFrm\">\r\n");
out.write("\t\t<label>아이디</label>\r\n");
out.write("\t\t<input type=\"text\" name=\"id\" id=\"id\" class=\"inputBox\" autofocus=\"autofocus\"/>\r\n");
out.write("\t\t<input type=\"button\" value=\"중복검사\" class=\"btn\" id=\"sendId\"/>\r\n");
out.write("\t</form>\r\n");
out.write("\t\r\n");
String id=request.getParameter("id");
if(id!=null && !"".equals(id)) {//파라메터가 있는 경우 && 아이디가 ""가 아닌 경우
boolean flag=idChk(id);
out.write("\t<div id=\"resultId\"> 입력하신 [ <span id=\"viewId\">");
out.print(id);
out.println("</span> ] 아이디는 \r\n");
if(flag) {
out.write("\t\t\t<div id=\"idPossible\">사용가능합니다.\r\n");
out.write("\t\t\t\t\t<input type=\"hidden\" name=\"hidId\" id=\"hidId\" value=\"");
out.print(id);
out.println("\"/>\r\n");
out.write("\t\t\t\t\t<a href=\"#void\" id=\"useId\" >사용</a>\t\r\n");
out.write("\t\t\t</div>\r\n");
}else {
out.write("\t\t\t<div id=\"idImpossible\">사용 불가능 합니다. </div>\r\n");
out.write("\t </div>\r\n");
}//end else
}//end if
out.write("</div>\r\n");
out.write("</div>\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
}//doGet
private boolean idChk(String id) {
boolean idFlag=false;
WebMemberDAO wm_dao=WebMemberDAO.getInstance();
try {
idFlag=wm_dao.selectId(id);
} catch (SQLException e) {
e.printStackTrace();
}//end catch
return idFlag;
}//idChk
}//class
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회 원 가 입</title>
<link rel="stylesheet" type="text/css" href="http://localhost:8080/servlet_prj/common/css/main_v190130.css"/>
<style type="text/css">
#joinTitle{font-weight: bold; font-size: 20px;}
.tdalign{text-align: center}
table{margin: 0px auto}
tr{height:25px}
#wrap{width:1007px; margin: 0px auto;}
#joinHeader{width:1007px; height:195px;
background: #FFFFFF url(images/header.png) no-repeat;}
.span{color:#FF0000;}
</style>
<script type="text/javascript">
window.onload=function(){
//옵션 생성
//년
//var b_year=document.getElementById("b_year");
var obj=document.joinFrm;
var b_year=obj.b_year;//1.select 얻기
var date=new Date();
var year_idx=0;
//20살의 나이를 가진 년도에 selected
var flag_year=date.getFullYear()-20+1;
for(var i=1950; i<date.getFullYear()+1; i++){
//2.select의 옵션 생성 Option(보여질값, value값(넘겨줄값))
b_year.options[year_idx]=new Option(i,i);
if(flag_year==i){
b_year.selectedIndex=year_idx;
}//end if;
year_idx++;
}//end for
//b_year.options[50].selected = true;
//b_year.options[50].setAttribute("selected","selected");
//월 설정 1-12
var b_month=obj.b_month;
var month_idx=0;
for(var i=1; i<13; i++){
b_month.options[month_idx]=new Option(i,i);
month_idx++;
}//end for
//일 설정 1-31
var b_day=obj.b_day;
var day_idx=0;
for(var i=1; i<32; i++){
b_day.options[day_idx]=new Option(i,i);
day_idx++;
}//end for
//////////////////////////////////이벤트 등록/////////////////////////////////////////
document.getElementById("idDup").addEventListener("click",popupCenter);
document.getElementById("daumZip").addEventListener("click",execPostcode);
document.getElementById("btnJoin").addEventListener("click",nullCheck);
document.getElementById("pass2").addEventListener("blur",chkPass);
document.getElementById("ssn1").addEventListener("keyup",moveSsn2);
document.getElementById("ssn2").addEventListener("keyup",chkSsn);
}//function-onload
function moveSsn2(){
//주민번호 앞자리에서 6글자가 입력되면 커서를 ssn2로 이동
/* if(document.getElementById("ssn1").value.length==6){
document.joinFrm.ssn2.focus();
}//end if나나!! */
var obj=document.joinFrm;
if(obj.ssn1.value.length==6){
obj.ssn2.focus();
}//end if
if(obj.ssn1.value.replace(/[0-9]/g,"")!=""){
alert("주민번호는 숫자로만 구성됩니다.");
obj.ssn1.value="";
obj.ssn1.focus();
return;
}//end if
}//moveSsn2
function chkSsn(){
//입력한 주민번호의 유효성 검증
//주민 번호의 끝자리가 7자리인지
var obj=document.joinFrm;
if(obj.ssn2.value.length==7){
//주민 번호 첫번째 자리가 숫자로 구성되어있는지?
if(obj.ssn1.value.replace(/[0-9]/g,"")!=""){
alert("주민번호 첫번쨰 칸자리는 숫자로만 구성됩니다.");
obj.ssn1.value="";
obj.ssn1.fucus();
return;
}//end if
//주민 번호 두번째 자리가 숫자로 구성되어있는지?
if(obj.ssn2.value.replace(/[0-9]/g,"")!=""){
alert("주민번호는 두번째칸 자리는 숫자로만 구성됩니다.");
obj.ssn2.value="";
obj.ssn2.fucus();
return;
}//end if
var ssn=obj.ssn1.value+obj.ssn2.value;
/*
//alert(ssn);
var flagNum=[2,3,4,5,6,7,8,9,2,3,4,5];
//주민번호의 각자리에 2,3,4,5,6,7,8,9,2,3,4,5 를 곱한 값의 결과를 모두 더해서 변수에 할당
var temp=0;
for(var i=0; i<flagNum.length; i++){
temp +=ssn.charAt(i)*flagNum[i];
}//end for
//위에서 계산된 값을 11로 나눈 나머지를 11에서 빼고 그 결과를 10으로 나눈 나머지를 구한다.
temp=(11-(temp%11))%10;
*/
//위에서 계산된 결과가 주민번호의 가장마지막 자리와 일치한다면 유효, 그렇지 않다면 무효
//if(temp==ssn.charAt(12)){
//alert("유효");
//성별 체크
var genderFlag=ssn.charAt(6);
if(genderFlag%2==0){
//여자
obj.gender[1].checked=true;
}else{
obj.gender[0].checked=true;
}//end else
//생년월일
var ssn_year=parseInt(ssn.substring(0, 2));
var ssn_month=parseInt(ssn.substring(2, 4));//01->1
var ssn_day=parseInt(ssn.substring(4, 6));//01->1
if(genderFlag<=2){//1,2=>1900
ssn_year=1900+ssn_year;
}else if(genderFlag<=4){//=>2000
ssn_year=2000+ssn_year;
}//end else
//생년월일 체크되게 하기
var b_flag=false;
for(var i=0; i<obj.b_year.length; i++){
if(obj.b_year[i].value==ssn_year){
obj.b_year[i].selected=true;
b_flag=true;
break;
}//end if
}///end for
if(!b_flag){//준비된 생년이 없을 때
//옵션을 생성하여 추가하고
obj.b_year.options[obj.b_year.length]=new Option(ssn_year,ssn_year);
//추가된 옵션을 선택해 준다.
obj.b_year[obj.b_year.length-1].selected=true;
}//end if
//월 설정
obj.b_month[ssn_month-1].selected=true;
//일 설정
obj.b_day[ssn_day-1].selected=true;
//나이
var date=new Date();
obj.age.value=date.getFullYear()-ssn_year+1;
//}else{
// alert("잘못된 주민 번호 입니다.");
//}//end else
}//end if
}//chkSsn
//미혼일때 결혼기념일 체크 안되게
function nullCheck(){
//필수 입력값 체크
var obj=document.joinFrm;
if(obj.id.value==""){
alert("아이디는 필수 입력!!");
return;
}//end if
if(obj.pass1.value==""){
alert("비밀번호는 필수 입력!!");
obj.pass1.focus();
return;
}//end if
if(obj.pass2.value==""){
alert("비밀번호 확인은 필수 입력!!");
obj.pass2.focus();
return;
}//end if
if(obj.name.value==""){
alert("이름은 필수 입력!!");
obj.name.focus();
return;
}//end if
if(obj.ssn1.value==""){
alert("주민번호 앞칸은 필수 입력!!");
obj.ssn1.focus();
return;
}//end if
if(obj.ssn2.value==""){
alert("주민번호 뒷칸은 필수 입력!!");
obj.ssn2.focus();
return;
}//end if
if(obj.zipcode.value==""||obj.addr1.value==""){
alert("주소를 검색해 주세요!!");
return;
}//end if
if(obj.addr2.value==""){
alert("상세주소는 필수 입력!!");
obj.addr2.focus();
return;
}//end if
//입력값이 모두 입력되었으므로 서버로 전송
obj.submit();//get방식이라 중요정보가 다 주소로 넘어가게된다!-> post로 바뀌어야 한다.
}//nullCheck
function chkPass(){
//비밀번호가 일치 하는지 체크
var obj=document.joinFrm;
if(obj.pass1.value != obj.pass2.value){
alert("비밀번호가 틀립니다.");
obj.pass1.value="";
obj.pass2.value="";
obj.pass1.focus();
return;
}//end if
}//chkPass
function popupCenter(){
window.open("../id_dup","idDup","width=502,height=303");
}//popupCenter
</script>
<style type="text/css">
</style>
<!-- script를 body에 넣었을때 에러가 발생하면 사용자는 에러메세지를 계속 클릭한 이후 제공하는 서비스를 볼 수 있다.
script를 head에 넣었다면 에러가 발생하더라도 body는 에러메세지 없이 그대로 제공된다. -->
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
<script>
//본 예제에서는 도로명 주소 표기 방식에 대한 법령에 따라, 내려오는 데이터를 조합하여 올바른 주소를 구성하는 방법을 설명합니다.
function execPostcode() {
new daum.Postcode({
oncomplete: function(data) {
// 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
// 도로명 주소의 노출 규칙에 따라 주소를 표시한다.
// 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
var roadAddr = data.roadAddress; // 도로명 주소 변수
var extraRoadAddr = ''; // 참고 항목 변수
// 법정동명이 있을 경우 추가한다. (법정리는 제외)
// 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
extraRoadAddr += data.bname;
}
// 건물명이 있고, 공동주택일 경우 추가한다.
if(data.buildingName !== '' && data.apartment === 'Y'){
extraRoadAddr += (extraRoadAddr !== '' ? ', ' + data.buildingName : data.buildingName);
}
// 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
if(extraRoadAddr !== ''){
extraRoadAddr = ' (' + extraRoadAddr + ')';
}
// 우편번호와 주소 정보를 해당 필드에 넣는다.
document.getElementById('zipcode').value = data.zonecode;
document.getElementById("roadAddr").value = roadAddr;
//document.getElementById("jibunAddr").value = data.jibunAddress;
// 참고항목 문자열이 있을 경우 해당 필드에 넣는다.
if(roadAddr !== ''){
document.getElementById("extraAddr").value = extraRoadAddr;
} else {
document.getElementById("extraAddr").value = '';
}
/* var guideTextBox = document.getElementById("guide");
// 사용자가 '선택 안함'을 클릭한 경우, 예상 주소라는 표시를 해준다.
if(data.autoRoadAddress) {
var expRoadAddr = data.autoRoadAddress + extraRoadAddr;
guideTextBox.innerHTML = '(예상 도로명 주소 : ' + expRoadAddr + ')';
guideTextBox.style.display = 'block';
} else if(data.autoJibunAddress) {
var expJibunAddr = data.autoJibunAddress;
guideTextBox.innerHTML = '(예상 지번 주소 : ' + expJibunAddr + ')';
guideTextBox.style.display = 'block';
} else {
guideTextBox.innerHTML = '';
guideTextBox.style.display = 'none';
} */
}
}).open();
}
</script>
</head>
<body>
<div id="wrap">
<div id="joinHeader"></div>
<div id="joinContent">
<form action="../web_member_join" name="joinFrm" method="post">
<table>
<tr>
<td class="tdalign" colspan="2"><span id="joinTitle">회원가입</span></td>
</tr>
<tr>
<td><span class="span">*</span>아이디</td>
<td>
<input type="text" class="inputBox" name="id" readonly="readonly" style="width:100px">
<button type="button" class="btn" id="idDup">중복확인</button>
</td>
</tr>
<tr>
<td><span class="span">*</span>비밀번호</td>
<td><input type="password" class="inputBox" name="pass1" style="width:120px"></td>
</tr>
<tr>
<td><span class="span">*</span>비밀번호 확인</td>
<td><input type="password" class="inputBox" id="pass2" name="pass2" style="width:120px"></td>
</tr>
<tr>
<td><span class="span">*</span>이름</td>
<td><input type="text" class="inputBox" name="name" style="width:120px"></td>
</tr>
<tr>
<td><span class="span">*</span>주민번호</td>
<td><input type="text" class="inputBox" name="ssn1" id="ssn1" style="width:60px" maxlength="6">
<label> - </label>
<input type="password" class="inputBox" name="ssn2" id="ssn2" style="width:70px" maxlength="7"></td>
</tr>
<tr>
<td> 성별</td>
<td><input type="radio" value="남자" name="gender" name="pass">남자
<input type="radio" value="여자" name="gender">여자</td>
</tr>
<tr>
<td> 생년월일</td>
<td>
<select name="b_year" class="inputBox">
</select>
<label>년</label>
<select name="b_month" class="inputBox">
</select>
<label>월</label>
<select name="b_day" class="inputBox">
</select>
<label>일</label>
</td>
</tr>
<tr>
<td> 나이</td>
<td><input type="text" name="age" class="inputBox" style="width:30px"></td>
</tr>
<tr>
<td> 관심언어</td>
<td>
<input type="checkbox" value="Java" name="interestlang">Java
<input type="checkbox" value="C/C++" name="interestlang">C/C++
<input type="checkbox" value="Python" name="interestlang">Python
<input type="checkbox" value="VB" name="interestlang">VB
<input type="checkbox" value="JSP" name="interestlang">JSP
<input type="checkbox" value="Servlet" name="interestlang">Servlet
<input type="checkbox" value="ASP" name="interestlang">ASP
<input type="checkbox" value="php" name="interestlang">php
</td>
</tr>
<tr>
<td> 결혼여부</td>
<td><input type="radio" value="미혼" name="marrigeFlag" checked="checked">미혼
<input type="radio" value="기혼" name="marrigeFlag">기혼</td>
</tr>
<tr>
<td> 결혼기념일</td>
<td><input type="text" maxlength="4" name="m_year" class="inputBox" style="width:40px">년
<input type="text" maxlength="2" name="m_month" class="inputBox" style="width:20px">월
<input type="text" maxlength="2" name="m_day" class="inputBox" style="width:20px">일</td>
</tr>
<tr>
<td><span class="span">*</span>우편번호</td>
<td><input type="text" readonly="readonly" name="zipcode" id="zipcode" class="inputBox" style="width:50px">
<button type="button" class="btn" id="daumZip">우편번호검색</button></td>
</tr>
<tr>
<td><span class="span">*</span>주소</td>
<td>
<input type="text" readonly="readonly" name="addr1" id="roadAddr" class="inputBox" style="width:200px">
참고 주소 : <input type="text" id="extraAddr" class="inputBox"/>
</td>
</tr>
<tr >
<td><span class="span">*</span>상세주소</td>
<td><input type="text" class="inputBox" name="addr2" style="width:200px"></td>
</tr>
<tr valign="middle">
<td> 가입인사</td>
<td><textarea name="greetings" class="inputBox" style="width:250px; height:100px"></textarea></td>
</tr>
<tr>
<td colspan="2" class="tdalign">
<button type="button" class="btn" id="btnJoin" onclick="">가입</button>
<button type="reset" class="btn">초기화</button>
</td>
</tr>
<tr>
<td colspan="2"><span class="span">*는 필수 입력 사항입니다.</span></td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
-
모니터링 : TCP/IP 이클립스에서 제공하는 기능
-
켜져있는 탐캣 서버에 우클릭>Monitoring>둘다 키면 TCP/IP Monitor 가 뜨고 어떤 값이 넘어가는지 알 수 있다.
-
사용후엔 잘 종료해 준다!!꼭!!(구동시 문제발생 위험)
-
웹은 비연결성에 대한 문제 : 자원이 한정적일떄->누가 이 자원을 가져가게될지 아무도 모른다.
-
경쟁이 붙을만 하다면 select에 예외가 발생하지 않도록 insert전에 select를 한번더 해서 해결하도록 하자
servlet끗
반응형
'국비지원학원 > HTML,JavaScript,jQ' 카테고리의 다른 글
91일차-JavaEE_DBCP (0) | 2019.03.14 |
---|---|
90일차-JavaEE_popup/DBCP (0) | 2019.03.12 |
89일차-JavaEE_Session/Cookie (0) | 2019.03.09 |
88일차-JavaEE_parameter처리/페이지 이동(forward,redirect) (0) | 2019.03.09 |
87일차-JavaEE_HttpServletRequest (0) | 2019.03.08 |