미분류

230213

Berylly 2023. 2. 13. 18:14

T.김동식

 

AJAX

Asynchronous JavaScript And XML

비동기 자바스크립트 + XML

전체 페이지가 아닌 일부분만을 업데이트 할 수있게 함

데이터를 주고받을 수 있음, html, xml, json, text

$.ajax({
type:"",
dataType:"",
async:true/false,
url:"http://localhost:8080/test",
data:{a:"a"}
success:function(data,textStatus){},
error:function(data,textStatus){},
complete:function(data,textStatus){}
});

 

 

dataType="text"

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>ajax 연습1</title>
  <script  src="http://code.jquery.com/jquery-latest.min.js"></script>
  <script type="text/javascript">
      function fn_process(){
       $.ajax({
         type:"get",
         dataType:"text",
         async:false,  
         url:"http://localhost:8080/pro16_1/ajaxTest1",
         //data param에서 "Hello,jquery"지정
         data: {param:"Hello,jquery"}, 
         //success시 message에 위data append
         success:function (data,textStatus){
            $('#message'). (data);
         },
         error:function(data,textStatus){
            alert("에러가 발생했습니다.");ㅣ
         },
         complete:function(data,textStatus){
            alert("작업을완료 했습니다");
         }
      });	
   }		
</script>
</head>
<body>
<input type="button" value="전송하기" onClick="fn_process()" /><br><br>
<div id="message"></div>
</body>
</html>
package sec01.ex01;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ajaxTest1")
public class AjaxTest1 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandler(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandler(request, response);
	}
	private void doHandler(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
        //request.getParameter해 param가져옴
		String param = (String) request.getParameter("param");
		System.out.println("param = " + param);//console 출력
		
		PrintWriter writer = response.getWriter();
		writer.print("완료");
	}

}

 

 

 

dataType="xml"

<!DOCTYPE html>
<html>
<head>
   <meta charset="UTF-8">
   <title>도서 정보 출력창</title>
   <script  src="http://code.jquery.com/jquery-latest.min.js"></script>
   <script type="text/javascript">
      function fn_process(){
        $.ajax({
            type:"post",
            async:false, 
            url:"http://localhost:8080/pro16_1/ajaxTest2",
            dataType:"xml",
            success:function (info,textStatus){
            //ajaxTest2 xml book태그에서 title, writer, image태그를 찾는다.
              $(info).find("book").each(function(){  
	              var title=$(this).find("title").text();
	              var writer=$(this).find("writer").text();
	              var image=$(this).find("image").text();
                  
                  //#bookInfo에 찾은 정보를 append한다.
	              $("#bookInfo").append(
	                  	"<p>" +title+ "</p>" +
		                "<p>" +writer + "</p>"+
	 	                "<img width='200' src="+image + "   />"				
	              );
                  
              });
            },
            error:function(data,textStatus){
               alert("에러가 발생했습니다.");ㅣ
            },
            complete:function(data,textStatus){
               //alert("작업을완료 했습니다");
            }
       }); 
     }
  </script>
</head>
<body>
<div id="bookInfo"></div>
<input type=button value="도서정보 요청" onclick="fn_process()">
</body>
</html>
package sec01.ex01;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ajaxTest2")
public class AjaxTest2 extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doHandle(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doHandle(request, response);
	}

	private void doHandle(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter writer = response.getWriter();
		
		String result = "";//result 변수초기화
        
        //xml 작성
		result ="<main><book>" + 
				"<title>초보자를 위한 자바 프로그래밍</title>" + 
				"<writer>홍길동</writer>" + 
				"<image>http://localhost:8080/pro16_1/image/img_basic.png</image>"+ 
				"</book>" +"</main>";
		
		System.out.println(result);//console창 출력
		writer.print(result);//화면 출력
	}

}

 

 

 

 

 

 

아이디 중복체크

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>아이디 중복 체크</title>
<script  src="http://code.jquery.com/jquery-latest.min.js"></script>
<script type="text/javascript">
 function fn_process(){
    var _id=$("#t_id").val();//t_id의 입력값을 저장
    if(_id==''){alert("ID를 입력하세요");return;}
    $.ajax({
       type:"post",
       async:true,  
       //mem에서 text로 id:_id를 가져온다.
       url:"http://localhost:8080/pro16_1/mem",
       dataType:"text",
       data: {id:_id},
       success:function (data,textStatus){
    	   
    	   //mem.java이 usable일때/아닐때
          if(data=='usable'){
       	   $('#message').text("사용할 수 있는 ID입니다.");
       	   $('#btnDuplicate').prop("disabled", true);
          }else{
       	   $('#message').text("사용할 수 없는 ID입니다.");
          }
       },
       error:function(data,textStatus){
          alert("에러가 발생했습니다.");
       },
       complete:function(data,textStatus){
          //alert("작업을완료 했습니다");
       }
    });	 
 }		
</script>
</head>
<body>
	
	<!-- id를 입력받음 -->
   <input  type="text" id="t_id"/>
   <input type="button" id="btnDuplicate" value="ID 중복체크하기" 
   onClick="fn_process()" />
   
   <br><br><div id="message"></div>
</body>
</html>
package sec02.ex01;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/mem")
public class MemberServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)	throws ServletException, IOException {
		doHandler(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandler(request, response);
	}

	private void doHandler(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		PrintWriter writer = response.getWriter();

		//id 파라미터를 가져와 id에 저장
		String id = (String) request.getParameter("id");
		System.out.println("id = " + id);
		
		//MemberDAO객체를 만들어 id 존재여부 결과값을 true/false로 반환받음 
		MemberDAO memberDAO = new MemberDAO();
		boolean overlappedID = memberDAO.overlappedID(id);

		//결과출력
		if (overlappedID == true) {
			writer.print("not_usable");
		} else {
			writer.print("usable");
		}
	}

}
package sec02.ex01;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

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

public class MemberDAO {
	private Connection con;
	private PreparedStatement pstmt;
	private DataSource dataFactory;

	public MemberDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context) ctx.lookup("java:/comp/env");
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public boolean overlappedID(String id){
		boolean result = false;//result초기화
		
		try {
			con = dataFactory.getConnection();
			
			//t_member에 id값이 있는가
			String query = 
					"select decode(count(*),1,'true','false') as result from t_member";
			query += " where id=?";
			System.out.println("prepareStatememt: " + query);
			
			//Creates a PreparedStatement object to the database.
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, id);
			
			//ResultSet 데이터베이스 결과 집합을 나타내는 데이터 테이블
			//executeQuery SQL 쿼리를 실행하고 쿼리에 의해 생성된 ResultSet 개체를 반환합니다.
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			
			//result를 가져와
			//getString "true"와 동일한 경우 true, 그렇지 않으면 null 인수를 포함하여 잘못된 값이 반환
			result =Boolean.parseBoolean(rs.getString("result"));
			
			pstmt.close();
		} catch (Exception e) {e.printStackTrace();}
		return result; // 결과반환
	}
}

 

 

 

Docker

컨테이너 기반 가상화 도구

효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 해줌

도커만 설치되어 있다면 필요할 때 언제 어디서나 컨테이너로 실행하는 것이 가능

실행하는 시점에 서버의 상태가 결정되어 서브 서버를 사용할때 눈송이 서버가 되지만 도커는 작업자가 그 시점을 미리 정해둘 수 있어 서버를 항상 똑같은 상태로 만들 수 있는 것

*눈송이 서버, 모든 눈송이 모양이 다르듯 서버들도 서로 다른 모습

 

https://www.docker.com/

 

Docker: Accelerated, Containerized Application Development

Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

 

wsl --update

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

 

완료화면

 

 

 

 

ubuntu 다운 후 계정생성