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
컨테이너 기반 가상화 도구
효율적으로 이미지(프로세스 실행 환경)을 구축할 수 있도록 해줌
도커만 설치되어 있다면 필요할 때 언제 어디서나 컨테이너로 실행하는 것이 가능
실행하는 시점에 서버의 상태가 결정되어 서브 서버를 사용할때 눈송이 서버가 되지만 도커는 작업자가 그 시점을 미리 정해둘 수 있어 서버를 항상 똑같은 상태로 만들 수 있는 것
*눈송이 서버, 모든 눈송이 모양이 다르듯 서버들도 서로 다른 모습
wsl --update
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
완료화면
ubuntu 다운 후 계정생성