JSP 들어감.
JAVA 카테고리에 작성함
package chapter10;
class PointTwo {
private int x, y;
public PointTwo(int x, int y) { this.x = x; this.y = y; }
public int getX() { return x; }
public int getY() { return y; }
protected void move(int x, int y) { this.x = x; this.y = y; }
}
public class ColorPointTwo extends PointTwo {
private String color;
public ColorPointTwo() {
this(0, 0);
}
public ColorPointTwo(int x, int y) {
super(x, y);
this.color = "BLACK";
}
public void setXY(int x, int y) { move(x, y); }
public void setColor(String color) { this.color = color; }
@Override
public String toString() {
return color+"색의 ("+getX()+","+getY()+")의 점";
}
public static void main(String[] args) {
ColorPointTwo zeroPoint = new ColorPointTwo();
System.out.println(zeroPoint.toString()+"입니다.");
ColorPointTwo cp = new ColorPointTwo(10, 10);
cp.setXY(5, 5);
cp.setColor("RED");
System.out.println(cp.toString()+"입니다.");
}
}
package chapter11;
class PointThree {
private int x, y;
public PointThree(int x, int y) { this.x = x; this.y = y; }
public int getX() { return x; }
public int getY() { return y; }
protected void move(int x, int y) { this.x = x; this.y = y; }
}
public class Point3D extends PointThree {
private int z;
public Point3D (int x, int y, int z) {
super(x,y);
this.z=z;
}//생성자
@Override
public String toString() {
return "("+getX()+","+getY()+","+getZ()+")의 점";
}
public int getZ() {
return z;
}
public void moveUp() {
z++;
}
public void moveDown() {
z--;
}
public void move(int x, int y, int z) {
move(x,y);
this.z = z;
}
public static void main(String[] args) {
Point3D p = new Point3D(1,2,3);//1,2,3은 각각 x,y,z 축의 값
System.out.println(p.toString()+"입니다.");
p.moveUp();//z축으로 위로 이동
System.out.println(p.toString()+"입니다.");
p.moveDown();//z축으로 아래쪽 이동
p.move(10,10);// x,y 축으로 이동
//PointThree 에 move 메소드 존재함
System.out.println(p.toString()+"입니다.");
p.move(100,200,300);//x,y,z 축으로 이동
System.out.println(p.toString()+"입니다.");
}
}
package chapter11;
class PointFour {
private int x, y;
public PointFour(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
protected void move(int x, int y) {
this.x = x;
this.y = y;
}
}
public class PositivePoint extends PointFour {
public PositivePoint() {
super(0, 0);
}//기본생성자
public PositivePoint(int x, int y) {
super(x, y);
if (x <= 0 || y <= 0) {
super.move(0, 0);
}
}// 생성자
@Override
public String toString() {
return "(" + getX() + "," + getY() + ")의 점";
}
protected void move(int x, int y) {
if (x > 0 && y > 0) {
super.move(x, y);
}
}
// protected void move(int x, int y) { this.x = x; this.y = y; }
public static void main(String[] args) {
PositivePoint p = new PositivePoint();
p.move(10, 10);
System.out.println(p.toString() + "입니다.");
p.move(-5, 5);// 객체 p는 음수공간으로 이동되지 않음
System.out.println(p.toString() + "입니다.");
PositivePoint p2 = new PositivePoint(-10, -10);
System.out.println(p2.toString() + "입니다.");
}
}
//내방법
package chapter11;
import java.util.Scanner;
abstract class Calc{
public int a,b;
public void setValue(int a, int b) {
this.a=a;
this.b=b;
}
public abstract int calculate();
}
class Add extends Calc{
@Override
public int calculate() {
return a+b;
}
}
class Sub extends Calc{
@Override
public int calculate() {
return a-b;
}
}
class Mul extends Calc{
@Override
public int calculate() {
return a*b;
}
}
class Div extends Calc{
@Override
public int calculate() {
return a/b;
}
}
public class Calculator {
public static void main(String[] args) {
System.out.println("두 정수와 연산자를 입력하시오>>");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
char operator = scanner.next().charAt(0);
switch (operator) {
case '+':
Add add = new Add();
add.setValue(a, b);
System.out.println(add.calculate());
break;
case '-':
Sub sub = new Sub();
sub.setValue(a, b);
System.out.println(sub.calculate());
break;
case '*':
Mul mul = new Mul();
mul.setValue(a, b);
System.out.println(mul.calculate());
break;
case '/':
Div div = new Div();
div.setValue(a, b);
System.out.println(div.calculate());
break;
default:
System.out.println("잘못된 연산자입니다.");
break;
}
}
}
//강사님 방법
package chapter11;
import java.util.Scanner;
abstract class Calc{
protected int a,b;
public void setValue(int a, int b) {
this.a=a;
this.b=b;
}
public abstract int calculate();
}
class Add extends Calc{
@Override
public int calculate() {
return a+b;
}
}
class Sub extends Calc{
@Override
public int calculate() {
return a-b;
}
}
class Mul extends Calc{
@Override
public int calculate() {
return a*b;
}
}
class Div extends Calc{
@Override
public int calculate() {
return a/b;
}
}
public class Calculator {
public static void main(String[] args) {
System.out.println("두 정수와 연산자를 입력하시오>>");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
char operator = scanner.next().charAt(0);
Calc exp = null;
switch (operator) {
case '+':
exp = new Add(); //업캐스팅
break;
case '-':
exp = new Sub(); //업캐스팅
break;
case '*':
exp = new Mul(); //업캐스팅
break;
case '/':
exp = new Div(); //업캐스팅
break;
default:
System.out.println("잘못된 연산자입니다.");
break;
}
exp.setValue(a, b);
if (exp instanceof Div && b == 0) {//instanceof 다시 공부하기
System.out.println("계산 할 수 없습니다.");
} else {
System.out.println(exp.calculate());
}
scanner.close();
}
}
package chapter11;
interface Shapes {//인터페이스는 추상 클래스(추상메소드)
final double PI = 3.14;
void draw();//추상 메소드
double getArea();//추상 메소드
default public void redraw() {
System.out.print("---다시 그립니다.");
draw();
}
}
public class Circle implements Shapes{
private int r;
public Circle(int r) {
this.r=r;
}//생성자
@Override
public void draw() {
System.out.println("반지름이 "+r+"인 원입니다.");
}
@Override
public double getArea() {
return PI*r*r;
}
public static void main(String[] args) {
Shapes donut = new Circle(10);//반지름이 10인 원 객체
donut.redraw();
System.out.println("면적은 "+donut.getArea());
}
}
package chapter11;
interface Shapes2{//인터페이스는 추상 클래스(추상메소드)
final double PI = 3.14;
void draw();//추상 메소드
double getArea();//추상 메소드
default public void redraw() {
System.out.print("---다시 그립니다.");
draw();
}
}
class Rect implements Shapes2 {
private int a,b;
public Rect(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public void draw() {
System.out.println(a+"x"+b+"크기의 사각형 입니다.");
}
@Override
public double getArea() {
return a*b;
}
}
class Oval implements Shapes2 {
private int a,b;
public Oval(int a, int b) {
this.a = a;
this.b = b;
// System.out.println((a/2)*(b/2)*PI);
}//생성자
@Override
public void draw() {
System.out.println(a+"x"+b+"에 내접하는 타원입니다.");
}
@Override
public double getArea() {
// TODO Auto-generated method stub
return PI*a*0.5*b*0.5;
}
}
public class Circle2 implements Shapes2{
private int r,a,b;
public Circle2(int r) {
super();
this.r = r;
}
public void Circle2(int r) {
this.r=r;
}//생성자
public void Oval(int a, int b) {
this.a = a;
this.b = b;
System.out.println((a/2)*(b/2)*PI);
}//생성자
@Override
public void draw() {
System.out.println("반지름이 "+r+"인 원입니다.");
}
@Override
public double getArea() {
return PI*r*r;
}
public static void main(String[] args) {
Shapes2 [] list = new Shapes2[3];
list[0] = new Circle2(10);
list[1] = new Oval(20,30);
list[2] = new Rect(10,40);
for (int i = 0; i < list.length; i++) {
list[i].redraw();
}
for (int i = 0; i < list.length; i++) {
System.out.println("면적은 "+list[i].getArea());
}
}
}
:두 시스템(서버와 클라이언트)간에 신뢰성 있는 데이터의 전송을 관장하는 프로토콜
: 패킷 교환 네트워크에서 송신 호스트와 수신 호스트가 (네트워크)데이터를 주고 받는 것을 관장하는 프로토콜
-TCP 보다 하위 레벨의 프로토콜
네트워크 상에서 유일하게 식별될 수 있는 컴퓨터 주소
숫자로 된 주소를 기억하기 어려움으로 www.naver.com과 같은 문자열로 구성된 도메인 이름으로 바꿔 사용
현재는 32비트의 IP 버전 4(IPv4)가 사용되고 있음
내컴퓨터에서 확인하려면 CMD 창에 ipconig 명령 수행
(최소한 예제 이해를 위해선 숙지하고 있어야함)
: TCP/IP 네트워크를 이용하여 쉽게 통신 프로그램을 작성하도록 지원하는 기반 기술
서버 소켓에 사용되는 클래스로, java.net패키지에 포함됨
생성자
주요메소드
서버는 서버 소켓으로 들어오는 연결 요청을 기다림(listen)
클라이언트가 서버에게 연결 요청
3.서버가 연결 요청 수락(accept)
서버 소켓 생성
ServerSocket serverSocket = new ServerSocket(포트번호);
접속을 기다리는 포트 번호 입력
클라이언트로부터 접속 기다림
Socket socket = serverSocket.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
`BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));`
Socket 클래스
클라이언트 소켓에 사용되는 클래스
java.net 패키지에 포함
주요 생성자
주요 메소드
클라이언트 소켓 생성 및 서버에 접속
Socket clientSocket = new Socket("IP 주소", 포트번호);
-Socket 객체의 생성되면 곧 바로 IP 주소의 포트(번호)에 자동 접속
소켓으로부터 데이터를 전송할 입출력 스트림 생성
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(clientSocket.getOutputStream()));
out.write("hello"+"\n");
out.flush()
서버로부터 데이터 수신
String line = in.readline();
//서버로부터 한 행의 문자열 수신
네트워크 접속 종료
clientSocket.close();
###소켓을 이용한 서버/클라이언트 채팅예제
package chapter11;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerEx {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
ServerSocket listener = null;
Socket socket = null;
Scanner scanner = new Scanner(System.in);
// 클라이언트가 아닌 서버 먼저 시작해야함
try {
listener = new ServerSocket(9999);
System.out.println("연결을 기다리고 있습니다....");
socket = listener.accept();//클라이언트 접속
System.out.println("연결되었습니다.");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//소켓으로부터 데이터를 전송할 입력 스트림 생성
new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//소켓으로부터 데이터를 전송할 출력 스트림 생성
while (true) {
String inputMessage = in.readLine();
////서버로부터 한 행의 문자열 수신(받음)
if (inputMessage.equals("bye")) {
System.out.println("클라이언트에서 bye 로 연결을 종료하였음");
break;
}
System.out.println("클라이언트: "+inputMessage);
System.out.print("보내기>>");
String outputMessage = scanner.nextLine();//입력할때 왔다갔다?
out.write(outputMessage+"\n");
out.flush();//전송되지 못한 메세지가 있으면 다 보내겠다.
}// "bye"라고 하기 전까지 무한 반복(대화)
} catch (Exception e) {
System.out.println(e.getMessage());// 데이터 송신중 발생하는 오류
}finally {
try {
scanner.close();
socket.close();
listener.close();
} catch (Exception e) {
System.out.println("클라이언트와 채팅 중 오류가 발생했습니다.");
}
}
}
}
package chapter11;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
public class ClientEx {
public static void main(String[] args) {
BufferedReader in = null;
BufferedWriter out = null;
Socket socket = null;
Scanner scanner = new Scanner(System.in);
try {
socket = new Socket("localhost", 9999);
//"localhost"하면 자기 ip 번호가 됨.(아니면 cmd에서 확인해도 됨)
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while (true) {
System.out.print("보내기>>");
String outputMessage = scanner.nextLine();
if (outputMessage.equals("bye")) {
out.write(outputMessage+"\n");//키보드에서 읽은 문자열 전송
out.flush();//전송되지 못한 메세지가 있으면 다 보냄
break;
}
out.write(outputMessage+"\n");//키보드에서 읽은 문자열 전송
out.flush();//전송되지 못한 메세지가 있으면 다 보냄
String inputMessage = in.readLine();//서버로부터 한행의 문자열 수신(받음)
System.out.println("서버: "+inputMessage);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}finally {
try {
scanner.close();
socket.close();
} catch (Exception e) {
System.out.println("서버와 채팅 중 오류가 발생했습니다.");
}
}
}
}
https://tomcat.apache.org/
설치 링크
설치 후, 아래 링크로 이동
http://localhost:연결포트번호/