TIL 2022-10-14 JSP시작, 톰캣 설치 Vector, LinkedList, Set컬렉션, HashMap, HashTable

JYR00·2022년 10월 14일
0

TIL

목록 보기
26/60
  • 스레드는 안하고 넘어갈 것이다.
    15장 ppt

Vector

  • Vector는 스레드 동기화 - 복수의 스레드가 동시에 Vector에 접근해 객체를 추가, 삭제하더라도 안전

Vector예제

VectorEx, Board

VectorEx

import java.util.List;
import java.util.Vector;

public class VectorEx {
    public static void main(String[] args) {
        
//        이게 thread였다.
        List<Board> list = new Vector<>();

        list.add(new Board("제목1","내용1","글쓴이1"));
        list.add(new Board("제목2","내용2","글쓴이2"));
        list.add(new Board("제목3","내용3","글쓴이3"));
        list.add(new Board("제목4","내용4","글쓴이4"));
        list.add(new Board("제목5","내용5","글쓴이5"));

        list.remove(2); 
        list.remove(3); //remove 되고 난 뒤의 순서에 따라 5번째 줄이 삭제됨.

        for(int i =0; i < list.size(); i++){
            Board board = list.get(i);
            System.out.println(board.subject + "\t" + board.content + "\t" + board.writer);
        }
        
    }
}

Board

public class Board {
    String subject;
    String content;
    String writer;

    public Board(String subject, String content, String writer){
        this.subject = subject;
        this.content = content;
        this.writer = writer;
    }
}

LinkedList

  • 특징
    • 인접 참조를 링크해서 체인처럼 관리
    • 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞 뒤 링크만 변경
    • 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보다 좋은 성능(선으로 연결해서 사용)
  • ArrayList는 중간에 삽입할 때 중간을 잘라 그 사이에 끼워넣는 형식. 뒤에 데이터들은 뒤로 밀려난다.

LinkedList 예제

LinkedListEx

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class LinkedListEx {
    public static void main(String[] args) {
        List<String> list1 = new LinkedList<>();

        list1.add("0번");
        list1.add("1번");
        list1.add("2번");

        System.out.println("list1의 0번 indes : " + list1.get(0));
        System.out.println("list1의 크기 : " + list1.size());

        System.out.println("\n-----인덱스 수정-------");
        list1.set(0,"00번");
        System.out.println("list1의 0번 index : " + list1.get(0));

        System.out.println("\n-----인덱스 삭제---------");
        list1.remove(2);
        list1.remove(1);
        System.out.println("list1의 크기 : " + list1.size());

        System.out.println("\n\n");

        List<String> arrayList = new ArrayList<>();
        List<String> linkedList = new LinkedList<>();

        long startTime;
        long endTime;

        startTime = System.nanoTime();
        for(int i = 0; i < 10000; i++){
            arrayList.add(0,String.valueOf(i));
        }

        endTime = System.nanoTime();

        System.out.println("ArrayList로 10000개 추가 시 걸린 시간 : " + (endTime - startTime) + " ns");

        System.out.println();

        startTime = System.nanoTime();
        for(int i = 0; i < 10000; i++){
            linkedList.add(0,String.valueOf(i));
        }
        endTime = System.nanoTime();

        System.out.println("LinkedList로 10000개 추가 시 걸린 시간 : " + (endTime - startTime) + " ns");
    }
}

Set 컬렉션

  • 특징
    • 수학의 집합과 유사
    • !!!중복불가!!! -> null도 하나만 가능!!(null 여러 개도 중복간주)

HashSet

  • 동일 객체 및 동등 객체는 중복 저장하지 않음
  • 동등 객체 판단 방법

HashSet예제 HashSetEx, HashSetEx2(로또), Member

Map컬렉션

  • 특징

    • 키(key)와 값(value)으로 구성된 map.Entry 객체를 저장하는 구조
    • 키와 값은 모두 객체
    • 키는 중복될 수 없지만 중복 저장 가능
  • 구현 클래스

    • hashmap hashtable linkedhashmap properties treemap

HashMap


주로 키값은 String으로 한다.

HashMap 예제 - HashMapEx, HashSetEx2

HashSetEx

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetEx {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();

        set.add("Java"); // Java가 중복되어 있기 때문에 하나 제거되어 4개라고 카운트 된다.
        set.add("JDBC");
        set.add("Servlet / JSP");
        set.add("Java");
        set.add("mybatis");

        int size = set.size();
        System.out.println("HashSet에 저장된 수 : " + size);

        Iterator<String> iterator = set.iterator();//순서없고 반복문 없다.
//        Iterator는 정말 많이 사용된다. 내가 리스트를 쓰든, 배열을 쓰든, map을 쓰든 사용방법이 동일하다.
//        hasnext로 확인하고, next()로 다음 데이터 가져오고.

        while (iterator.hasNext()){ //반복문에 넣으면 하나씩 꺼낼 수 있다.
            String element = iterator.next(); //깃발 옆으로 이동하면서 꽃는다.
            System.out.println("\t" + element);
        }

//        for(String item : set) forin문 foreach문이라고도 불림. 이런 방법도 가능 하지만 while문을 많이 사용하는 추세

        set.remove("JDBC"); //정확하게 찍어서 삭제해야 한다.
        set.remove("mybatis");

        System.out.println("\nHashSet에 저장된 수 : " + set.size());

        iterator = set.iterator();
        while (iterator.hasNext()){
            String element = iterator.next();
            System.out.println("\t" + element);
        }
        
        set.clear(); // 데이터 다 삭제시킴. 전체 다 비움.

        if(set.isEmpty()){
            System.out.println("HashSet이 비어있음");
        }
    }
}

HashSetEx2

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetEx2 {
    public static void main(String[] args) {
//        문제1) HashSet을 사용하여 로또 번호 7개를 생성하는 프로그램을 작성하세요
//        HashSet을 사용하면 중복 체크 부분이 필요없다.

        for(int i = 0; i<7; i ++) {
            int rnd = (int) ((Math.random() * 45) + 1);
            System.out.print(rnd + "\t");
        }

        Set <Integer> set = new HashSet<>();

        Iterator<Integer> iterator = set.iterator();

        while (iterator.hasNext()){
            Integer element = iterator.next();
            System.out.println("\t" + element);
        }



        //선생님버전
//        Set <Integer> lotto = new HashSet<>();
//        int count = 0;
//
//        while(count < 7) {
//            int rnd = ((int) Math.random() *45)+1;
//
//            if(lotto.add(rnd)){
//                count ++;
//
//                if(lotto.size() == 7){
//                    break;
//                }
//            }
//        }
//
//        Integer<Integer> iter = lotto.iterator();
//        String number = "";
//        while(iter.hasNext()){
//            int num = iter.next();
//            number += String.valueOf(num) + "";
//        }
//        System.out.println(number);

        ////여기까지

//      내가 한 부분 주석 처리 안하니까 오류난다..

    Set<Member> set1 = new HashSet<>();
    set1.add(new Member("홍길동",30));   // new사용하면서 주소값이 달라져서 2개가 출력됨
    set1.add(new Member("홍길동",30));  //하지만 동일한 값으로 인식되면 한 개로 출력이 됨.

        System.out.println("\n총 객체 수 : " + set1.size());


    }
}

Hashtable


hashMap과 유사하지만 thread 동기화가 되어 있어 안전하다.

Hashtable예제 - HashTableEx

import java.util.Hashtable;
import java.util.Map;
import java.util.Scanner;

public class HashTableEx {
    public static void main(String[] args) {
        Map<String, String> map = new Hashtable<>();

        map.put("spring", "12");
        map.put("summer", "123");
        map.put("fall", "1234");
        map.put("winter" , "12345");

        Scanner scanner = new Scanner(System.in);

        while(true){
            System.out.println("아이디와 비밀번호를 입력해주세요 : ");

            System.out.println("아이디 : ");
            String id = scanner.nextLine();

            System.out.println("비밀번호 : ");
            String password = scanner.nextLine();
            System.out.println();

            if(map.containsKey(id)){
                if(map.get(id).equals(password)){
                    System.out.println("로그인 되었습니다.");
                    break;
                }
                else{
                    System.out.println("비밀번호가 일치하지 않습니다.");
                }
            }
            else{
                System.out.println("입력하신 아이디가 존재하지 않습니다.");
            }
        }
    }
}

Properties

자료구조 같은 건 기술면접에서 많이 물어보는 스타일..

hashTable과 같다. Map<스트링, 스트링>

properties 예제 - database.properties 파일생성 & PropertiesEx.java(클래스)


JSP

  • Java Server Page - 동적인 웹 페이지를 개발하기 위한 웹 프로그래밍 기술
  • 정적 웹페이지 : 미리 만들어진 웹페이지. 사용자의 상호작용과 상관없이 보여지는 웹페이지
  • 동적 웹페이지 : 사용자의 상호작용에 따라 데이터가 변경되는 웹페이지. (검색, 클릭, 입력 등)
  • 장점
    • 스레드 기반으로 실행 -> 스레드가 자동으로 되고 있다.
    • 요즘은 템플릿으로 많이 사용됨
    • 서블릿, 템플릿으로 나눠져 있는데, 서블릿은 Spring이 거의 하고, 현재 jsp는 템플릿으로 많이 사용됨.
    • 하지만 기존 프로그램 유지, 보수를 해야 한다면 jsp를 공부해야한다.
    • 요즘 템플릿은 React나 viewjs로 넘어가는 추세.

톰캣(TomCat) 설치

https://tomcat.apache.org/


9버전 다운로드한다.
10 버전은 JAVA EE -> 자카르타EE로 됨. 포스팅 아직 부족함.

  • Core에 있는 걸 다운로드
    zip , tar : 리눅스 , 맥용 (맨 위 두 개)

그 밑에 두개는 압축 풀고 실행 (윈도우)
맨 밑은 인스톨러.

우리는 호환성때문에 압축파일 다운로드 할 거임.

실제 webapps에서 실행됨 - 그 안 root파일

bin - startup.bat (이거 누르면 서버 동작함.) shutdown.bat(멈춘다.)

  • localhost:8080 가면 확인가능

이클립스에서 하는 방법

spring tool suite
2가지 변경을 바꿔야
1) 개발환경

jsp 연결할려면 프로그램 설치 더해야한다.



eclipse javasript jax




eclipse
2021-12 - https://download.eclipse.org/releases/2021-12이거 누르고

////다시 돌아오면

javaEE가 추가되어있다. 화면 조금 바뀜


서버 연결해야한다.

톰캣 9버전으로 해준다.

폴더 선택할 때는 이렇게 bin, lib보일 때 까지 진행하고 폴더선택 눌러준다.

서버에 이렇게 stopped으로 뜬다.


servers라는 폴더가 생성한다.

밑의 servers를 더블클릭하면 이렇게 화면이 넘어간다.

우측 상단에 8080확인하기

액서스 허용 2개 뜬다. 허용 눌러준다.

주소창에 localhost:8080쳐라
여기까지 뜨면 제대로 서버가 연결된 것이다.!


stop누르면 닫힌다. 한 포트만 사용가능하기 때문에 사용안할 때는 닫아주자.


java

javaEE




체크박스 체크해주자








여기서 톰캣 꼭! 선택해야 한다.

선택안하면 이렇게 뜬다....ㅜㅜ

선택해야 이렇게 화면에 뜬다.

서버와 연결완료! 자동으로 창이 열린다.







이거 누르면 다 멈춤.







그레이들 선택

!!!!!!!버전 자바 8선택해야 한다!!!!!
servlet 올라온거 확인하세요!!

그러면 이렇게 다운로드한다.


서비스에 들어가서

실행버튼 눌러라

이렇게 되면 서버 연결된 것이다.






제거해주고 옆에 있는 + 눌러준다.

아티팩처 추가해준다.

한글깨질때

여기에
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8
를 저장한다.

다시 껐다 키면 한글 깨지는 현상 없어진다.


























0개의 댓글