카테고리 없음

2020.06.16

깝돌이 2020. 6. 16. 16:33
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(function(){
	$('#ajaxBtn').on('click', function(){
		//alert("ajax");
		$.ajax({
			//alert("ajax2....")---안됨
			type:'post',
			url:'HelloAjaxServlet',
			data:'name=encoreAjax',
			dataType:'text',
			
			success:function(data){
				alert(data);
			}, //callbackk
			error:function(error){
				alert("응답시간이 지연...Error 처리함!!")
			}, 
			timeout:1000//1초동안 서버부터 응답이 없으면 에러 발생시킴...(응답대기시간지정)
		});//ajax
	});//click
});//ready
</script>
</head>
<body>
	<input type="button" id="ajaxBtn" value="ajaxBtn">
</body>
</html>
package servlet.ajax;

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("/HelloAjaxServlet")
public class HelloAjaxServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		//error 발생할 수 있또록 응답을 지연
/*		try {
		//	Thread.sleep(1000);
		}catch(Exception e) {
			
		}*/
	String name = request.getParameter("name");
	out.print("name:: "+name);
	out.close();
	}
}

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
/* 
1. select중에서 특정한 option을 선택하면, 선택한 값을 alert로 출력, 선택하지 않으면, " 선택하세요" alert 출력
2. JqueryAjax부분
- 선수의 이름ㅇ르 선택하면, 서버로 요청을 보냄
- 선수 이름 옆에 그 선수가 사는 주소가 특정 영역에 출력되도록 로직을 작성

*/
var player;
$(function(){
    player= $('select').val();
	if(player===""){
		alert("선수를 선택하세요.");
	}
	$('select').on('change', function(){
		var name = $(this).val();
		if(name===""){
			alert("선수를 선택하세요.");
			return;
		}
		alert(name);	
		$.ajax({
				type:'post',
				url:'AddressAjax',
				data:'name='+name,
				dataType:'text',
				
				success:function(data){
					$('#resultView').html(data);
				} //callbackk
			});//ajax
		
	});//change
	
});//ready

</script>
</head>
<body>
<select id="player">
	<option value="">====야구 선수들====</option>
	<option>이용규</option>
	<option>김태균</option>
	<option>류현진</option>
	<option>푸이그</option>
	<option>유리베</option>
	<option>커쇼</option>
</select>
<span id="resultView"></span>
</body>
</html>
package servlet.ajax;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;

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("/AddressAjax")
public class AddressAjax extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private HashMap map = new HashMap();
	//디비 연결하는 대신에, Map을 이용해서 각 선수들의 address를 연결
	@Override
	public void init() throws ServletException {
	map.put("이용규", "신사동");	
	map.put("김태균", "용산");	
	map.put("류현진", "신림동");	
	map.put("푸이그", "런던");	
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		String name = request.getParameter("name");
		PrintWriter out = response.getWriter();
		out.print(map.get(name));
	}

}

 

 

serialize()--->중요!!

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
	$('#frm').on('submit', function(){
	//여기서 data를 보내는게 아니라, 다음페이지에서 처리할수 있게, 일괄적으로 data를 모아서(QueryString) 보내는 함수 serialize()
	var query = $(this).serialize();
	alert(query);
	return false;//이러면 걸어놓은 페이지로 안감
	})//submit
})//ready


</script>
</head>
<body>
<form action="SerialAjax" id="frm">
	NAME<input type="text" name="name">
	<input type="hidden" name="command" value="register"></p>
	<select name="tool">
	<option>EditPlus</option>
	<option>Amateras</option>
	<option>Workbench</option>
	<option>ObjectAid</option>
	</select><p>
	<input type="checkbox" name="program" value="python">python
	<input type="checkbox" name="program" value="Numpy">Numpy
	<input type="checkbox" name="program" value="Pandas">Pandas
	<input type="checkbox" name="program" value="Matplot">Matplot
	<p>
	<input type="submit" value="FormDataSend">
</form>
</body>
</html>

 

json은 비동기에서 주로 쓰이는데, 응답의 data type이 json이다. 바로 객체로 받습니다. 

따라서 거의 모든 응답은 json입니다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
	$('#json-Btn').on('click', function(){
		$.ajax({
			type:'post',
			url:'JsonAjax',
			dataType:'json',
			
			success:function(data){
				//alert(data);
				$('#resultView').html(data.name+", "+data.age+", "+data.addr);
			}//callback			
		});//ajax
	});//click
});//ready
</script>
</head>
<body>
<input type="button" value="json-Btn" id="json-Btn">
<span id = "resultView"></span>
</body>
</html>

 

package servlet.ajax;

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;

import org.json.JSONObject;
//json libaray가 필요합니다.
@WebServlet("/JsonAjax")
public class JsonAjax extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		//jsonObject객체를 하나 생성: json.jar가 필요합니다. 
		JSONObject json = new JSONObject();
		json.put("name","json");
		json.put("age", 26);
		json.put("addr", "Texas");
		
		out.print(json);
	}

}

 

 

이제 진짜 객체를 만들어서 json에 넣어서 보냅니다. 

package domain;

public class Food {
	private String maker;
	private int price;
	public Food() {
		super();
	}
	public Food(String maker, int price) {
		super();
		this.maker = maker;
		this.price = price;
	}
	public String getMaker() {
		return maker;
	}
	public void setMaker(String maker) {
		this.maker = maker;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Food [maker=" + maker + ", price=" + price + "]";
	}
	
	
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
	$('#json-Btn').on('click', function(){
		$.ajax({
			type:'post',
			url:'JsonAjax',
			dataType:'json',
			
			success:function(data){
				console.log(data.banana);
				$('#resultView').html(data.banana);
				}//callback			
		});//ajax
	});//click
});//ready
</script>
</head>
<body>
<input type="button" value="json-Btn" id="json-Btn">
<span id = "resultView"></span>
</body>
</html>

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Java Call</title>
<script src="http://code.jquery.com/jquery-3.1.1.js"></script>

<script type="text/javascript">
	$(function() {
		$('#exec1').click(function() {
			/* 구현 하세요.  
			입력된  #words 데이터를 가져와  서버에서 요청하고  
			그 결과를 #result1에 출력하는 코드를 구현하세요
			*/
		var words = $('#words').val();
			$.ajax({
				type:'post',
				url:'main.do',
				data:'action=wordCount&&words='+words,
				dataType:'text', 
				
				success:function(data){
					$('#result1').html(data);
				}//callback
			});//ajax
			
		
			
		});//click
		$("#exec2").click(function() {
			var fname = $("#fname").val();
			/*
			 입력된 #fname 데이타를 받아와 서버에 요청하고
			 그 결과를 #result2에 출력하는 코드를 구현하세요 
			*/
			$.ajax({
				type:'post',
				url:'main.do?action=kickCount',
				//data:'action=kickCount&&fname='+fname,
				data:{'fname':fname},
				dataType:'text',
				
				success:function(data){
					$('#result2').html(data);
				},//callback
				error:function(xhr, status, message){
					alert("error: "+message);
				}//error
			});//ajax
		});//click
	});//ready
</script>
<style type="text/css">
	.quest {
		padding: 50px;
		width: 500px; height: 250px;
        border: 2px dashed blue;
		background-color: rgb(234,234,234);
	}	
	.kick{
		display: inline-block;
		width : 100px;
	}
	#result1, #result2 {//이부분
		font-size : 1.5em;
		color: red;
	}
	.btn{
		width : 100px;
	}
	h2{
		height: 50px;
	}
	div{
		margin: 10px;//이부분
	}
	#ins{
		vertical-align: top;
	}

</style>
</head>
<body>
	<div id="q1"  class="quest">
			<h2>단어세기</h2>
			<div><span id="ins">입력 문자열 : </span><textarea  id="words" cols="45" rows="5"></textarea> </div>
			<div><input type="button" id="exec1" class="btn" value="실 행"> 가장 많이 나온 단어 :	<span id="result1"  ></span></div>			
	</div>
	<div id="q2" class="quest">
		<h2>Kickboard</h2>
		<div><span class="kick">입력 파일명:</span><input type="text" id="fname" ></div>
		<div> <input type="button"	id="exec2" class="btn" value="실 행"> 갈수 있는 경로의 수 : <span id="result2">  </span></div>
	</div>
</body>
</html>
package com.encore;

import java.io.File;
import java.io.IOException;

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("/main.do")
public class MainServlet extends HttpServlet {

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

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

	protected void doProcess(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String action = request.getParameter("action");
		System.out.println(action);
		// System.out.println(request.getParameter("words"));

		if (action.equals("wordCount")) {
			wordCount(request, response);
		} else if (action.equals("kickCount")) {
			kickCount(request, response);
		}
	}// process()

	private void wordCount(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		String words = request.getParameter("words");
		Count count = new Count();
		String result = count.execute(words);
		request.setAttribute("result", result);
		request.getRequestDispatcher("Result.jsp").forward(request, response);
	}

	private void kickCount(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {

		String fname = request.getParameter("fname");

		System.out.println(fname + "fname");
		String path = getServletContext().getRealPath("/res"); // 중요합니다..채워넣어보세요
		System.out.println(path);
		File f = new File(path, fname);

		int result = Kickboard.execute(f);

		request.setAttribute("result", result);
		request.getRequestDispatcher("Result.jsp").forward(request, response);
	}
}
package com.encore;

import java.util.ArrayList;
import java.util.HashMap;

public class Count {

	public String execute(String book) {
		String word = "";
		// 구현하세요.
		String[] words = book.split(" ");
		HashMap<String, Integer> hm = new HashMap<>();
		ArrayList<String> result = new ArrayList<>();

		for (int i = 0; i < words.length; i++) {
			if (hm.containsKey(words[i].toLowerCase())) {
				hm.replace(words[i].toLowerCase(), hm.get(words[i].toLowerCase()) + 1);
			} else {
				hm.put(words[i].toLowerCase(), 1);
			}
		}
		int max = 0;
		for (String key : hm.keySet()) {
			if (max < hm.get(key)) {
				word = key;
				max = hm.get(key);
			} else if (max == hm.get(key)) {
				if (word.compareTo(key) > 0) {
					word = key;
				}
			}
		}
		return word;
	}

	public static void main(String[] args) {
		String book1 = "Can Danny and his father outsmart the villainous Mr. Hazell? Danny has a life any boy would love - his home is a gypsy caravan, he's the youngest master car mechanic around, and his best friend is his dad, who never runs out of wonderful stories to tell. But one night Danny discovers a shocking secret that his father has kept hidden for years. ";
		String book2 = "Soon Danny finds himself the mastermind behind the most incredible plot ever attempted against nasty Victor Hazell, a wealthy landowner with a bad attitude. Can they pull it off? If so, Danny will truly be the champion of the world.";
		String book3 = "I like cat. I like cat. I like cat. ";
		Count c = new Count();
		System.out.println(c.execute(book1));
		System.out.println(c.execute(book2));
		System.out.println(c.execute(book3));

	}

}
package com.encore;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Kickboard {

		static int M;
		static int N;
		static int[][] map;
		static boolean[][] visited;

		public static int execute(File path) throws FileNotFoundException {
			//Scanner sc = new Scanner(System.in);
			Scanner sc = new Scanner(path);
			M = sc.nextInt();
			N = sc.nextInt();
			map = new int[M][N];
			memo = new int[M][N];
			for (int i = 0; i < M; i++) {
				for (int j = 0; j < N; j++)
					map[i][j] = sc.nextInt();
			}
			visited = new boolean[M][N];
			int result = dfs(0,0);
			//System.out.println(result);		
			return result;
		}

		static int[] dr = { -1, 1, 0, 0 };
		static int[] dc = { 0, 0, -1, 1 };
		static int[][] memo;

		static int cnt = 0;
		static int dfs(int r, int c) {
			cnt++;
			//System.out.println(r + " " + c);
			if (r == M-1 && c == N-1)
				return 1;
			if (memo[r][c] != 0)
				return memo[r][c];
			if(!visited[r][c]) {
				visited[r][c] = true;
				for (int i = 0; i < 4; i++) {
					int nr = r + dr[i];
					int nc = c + dc[i];
					if (nr < 0 || nc < 0 || nr >= M || nc >= N)
						continue;
					if (map[nr][nc] < map[r][c]) {
						memo[r][c] += dfs(nr, nc);
					}
				}
			}
			return memo[r][c];
		}
		
		public static void main(String[] args) throws FileNotFoundException {
			System.out.println(execute(new File("input.txt")));
		}

}

절대 경로를 통해서 정적인 문서를 배포하는 위치를 확인하는 법

String path=getServletContext().getRealPath("/res");