* 1) 선형검색의 한계  선형검색은 무한루프를 통해 검사를 진행하므로 종료조건에 있어 비용이 든다.
 *  검색 실패, 검색 실패, 검색실패, 검색 성공 과 같은 식이다. 
 *  => 이 비용을 반으로 줄이는 방법이 보초법이다. 

 * 1) 2를 검색해서 성공하는 조건 2 5 3 4 [2]
 * 2) 5를 검색해서 실패하는 조건 0 2 4 1 [5]
 * 이와 같이 끝자리 수에 검색하고자 하는 값을 보초라고하는데, 원하는 값이 존재하지 않아도 보초값까지 검색하면 종료가 성립된다. 

 * 다시 말해 
 * #선형 검색 의 경우 : 
 *  int i = 0 으로 요솟수를 정의하고 
 *  while(true) {
 *  if(i==n)
 *  return -1; 
 *  if(a[i] == key)
 *  return 1; 
 * 과같이 첫번째 if문처럼 종료조건1을 달아야하는데, 이 과정이 필요가 없어지는 것이다. 
 * 따라서 보초는 반복문에서 종료 판단횟수를 2회에서 1회로 줄이는 역할을 한다. 

package chapter1;

import java.util.Scanner;

public class SeqSearchSen {


	
	
	//  요솟수가 n인 배열 a에서 key와 같은 요소를 보초법으로 선형 검색.
		static int seqSearchSen(int[] a, int n, int key) {
			
			int i = 0;

			a[n] = key;					// 보초를 추가 (a[요솟수] 니까 끝자리에 , 검색값을 한번 더 배치시킨다. 이것은 보초값을 가장 끝자리에 자리시키는 행위 

			while (true) {
				if (a[i] == key)		// 검색 성공!
					break;
				i++;
			}
			/*
			for(i=0; i<n; i++) {
				if(a[i] == key)
						break; 
			}*/
			
			// while이 반복되면, 찾은 값이 배열의 원래 데이터인지 아니면 보초인지 판단해야 한다. 
			// 변수 i 값이 n 이면 찾은 값이 보초값이므로 검색실패를 나타내는 -1을 반환한다. 
			
			return i == n ? -1 : i;
		}

		public static void main(String[] args) {
			Scanner stdIn = new Scanner(System.in);

			System.out.print("요솟수:");
			int num = stdIn.nextInt();
			int[] x = new int[num + 1];				// 요솟수 num + 1

			for (int i = 0; i < num; i++) {
				System.out.print("x[" + i + "]:");
				x[i] = stdIn.nextInt();
			}

			System.out.print("검색할 값:");			// 키값을 입력
			int ky = stdIn.nextInt();

			int idx = seqSearchSen(x, num, ky);		// 배열x에서 값이 ky인 요소를 검색

			if (idx == -1)
				System.out.println("그 값의 요소가 없습니다.");
			else
				System.out.println(ky+"은(는) x[" + idx + "]에 있습니다.");
		}
}
package Search;

import java.util.Scanner;

public class BinSearch {

  static int binSearch(int[]a, int n, int key) { // 
  //int [] a == a라는 배열 ( 검색값이 입력되어있는 DB) 
  //int n == 요소수 
  //int key == 검색값 (사용자의) 
    
    int pl = 0; //검색값 첫번째 수 
    int pr = n-1;  //검색값의 마지막 수 
    
    do {
      int pc= (pl+pr)/2; //검색범위의 중위값  
          if(a[pc] == key) //중위값이 검색값이면 pc 반환  
            return pc; 
          else if (a[pc]<key) //중위값이 검색값보다 아래에 있으면 검색값 첫번째수가 현재 중위값의 위값 
            pl = pc+1;
          else pr = pc - 1;  //검색범위를 앞쪽 절반으로 좁힘 
    }   
    while (pl>= pr); //검색 마지막 범위가 첫번재범위보다 작으면 (검색이 완료가 되면) return -1 반환한다. 
    
    return -1; //검색 실패값 반환 
  }
  
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    
    Scanner scan  = new Scanner(System.in);
    //2. 요솟수가 num인 배열 생성  
    System.out.println("요솟수를 입력하세요");
    int num=scan.nextInt();
    int x[] = new int[num]; // 심화공부해야함 
    
    //2. DB값을 입력해주기 
    
    System.out.println("오름차순으로 입력하세요");
    
    System.out.println("x[0]");
    x[0] = scan.nextInt();
    //첫 요소 입력 
    //이미 요소수를 위에서 입력해주었으므로, 한정적으로 끝나게 되어있음.입력시에.
    for(int i=1; i<num; i++) {
    do {
    System.out.println("x["+i+"]=" );
    x[i] = scan.nextInt();
    }
    while (x[i]<x[i-1]); //앞의 요소보다 작으면 다시 입력 
  }
    
    System.out.println("검색값 입력하세요 [key]");
    int key = scan.nextInt();
    
    int idx = binSearch(x,num,key); 
    
    if(idx== -1) System.out.println("검색값 없음");
    else System.out.println(key+"는"+idx+"에 있음");
  }

}

오늘은 선형검색에 대해 알아보자 

 

 주소록을 검색한다고 가정 했을 때의 
 
 *  Searching 방식 : 
 *  1. 국적인 한국 사람을 찾는다.
 *  2. 나이가 21세 이상 27세  미만인 사람을 찾는다.
 *  3. 찾으려는 이름과 비슷한 이름의 사람을 찾는다. 
 
 *  데이터의 집합이 있을 때 검색만 하면되지! 라고 생각한다면 검색에 사용할 알고리즘은 계산 시간이 짧은 것을 선택      하면 되지만 데이터가 추가/삭제 등이 자주되는 경우라면, 검색 이외의 작업에 소요되는 비용을 판단해야 한다.
    따라서 필요한 요소를 평가하여 알고리즘을 선택한다. 


 *  1. 배열 검색 ( 검색은 빠르지만, 데이터 추가시에는 시간적인 비용이 많이 든다)
 *  2. 선형 리스트 검색
 *  3. 이진트리 검색 
 
 *  용도와 목적, 실행속도, 자료 구조 등을 고려하여 알고리즘을 선택한다. 

	//선형검색 
	
	/*검색 알고리즘 
	 * 	주소록을 검색한다고 가정 
	 * 
	 *  Searching 방식 : 
	 *  1. 국적인 한국 사람을 찾는다.
	 *  2. 나이가 21세 이상 27세  미만인 사람을 찾는다.
	 *  3. 찾으려는 이름과 비슷한 이름의 사람을 찾는다. 
	 *  
	 *  
	 *  
	 *  데이터의 집합이 있을 때 검색만 하면되지! 라고 생각한다면 검색에 사용할 알고리즘은 계산 시간이 짧은 것을 선택하면 되지만
	 *  데이터가 추가/삭제 등이 자주되는 경우라면, 검색 이외의 작업에 소요되는 비용을 판단해야 한다.
	 *  프 요소를 평가하여 알고리즘을 선택한다. 
	 *  1. 배열 검색 ( 검색은 빠르지만, 데이터 추가시에는 시간적인 비용이 많이 든다)
	 *  2. 선형 리스트 검색
	 *  3. 이진트리 검색 
	 *  
	 *  용도와 목적, 실행속도, 자료 구조 등을 고려하여 알고리즘을 선택한다. 
	 * 
	 * */
	
	//1. 메서드 (seqSearchEx) : 배열 a의 처음부터 끝까지/ n개의 요소를 대상으로, key값을 선형검색하고, 검색한 요소의 인덱스 반환 
	// 또한 값이 key인 요소가 여러개 존재할 경우 반환값은 검색과정에서 처음 발견한 요소의 인덱스가 된다.
	// 값이 key인 요소가 존재하지 않으면, -1 을 반환한다. 
	static int seqSearchEx(int [] a , int n, int key) {  // 테이블, n개 요소, 파라미터 값 
	int i = 0; 
	
	while (true) {
		if(i==n) 
			return -1; //검색 실패(-1을 반환) 
		
		if (a[i] == key) 
			return i ; //검색성공 (인덱스반환)
		i++;
	}
		
		
		}
	
	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		
		
		//1. 배열 채우기 
		System.out.println("요솟수:");
		int num = stdIn.nextInt();
		int[] x = new int[num];
		
		
		for(int i = 0 ; i < num; i++) {
			System.out.println("x["+i+"]:");
			x[i] =stdIn.nextInt();
			
		} 
		
		//2. 검색값 입력 
		System.out.println("검색할 값 :");
		int ky = stdIn.nextInt();
		
		
		//3. 검색 메서드 실행 
		int idx = seqSearchEx(x, num, ky);
		
		//4. 결과 값 반환 
		if(idx == -1)
			System.out.println("그 값의 요소가 없습니다.");
		else
			System.out.println(ky+"는 x ["+idx+"] 에 있습니다. " );
	}
	}

##########다국어 처리############
-------------------------------------------------------------------------------------
스프링에서 제공하는 다국어 처리 방식은 struts프레임워크와 유사 
기본적으로 메세지 파일의 확장자는 ".properties"이며 파일명은 
해당언어의 ■ Locale 정보를 이용해 작성한다. 

*로케일이 뭐지 ?
ex )  messageSource_en.properties
원하는 언어들의 메세지 파일을 다 작성했다면 
스프링 설정 파일에 해당 메세지 파일을 읽어들일 수 있도록 
MessageSource클래스를 <bean> 으로 등록해야한다. 
-------------------------------------------------------------------------------------
스프링 메시지소는 국제화(i18n)을 제공하는 인터페이스다. 
메세지 설정 파일을 통해 각 국가에 해당하는 언어로 메세지를 제공할 수 있다.
ApplicationContext는 MessageSource를 구현하고 있다. 
메세지 설정 파일은 프로퍼티 파일을 사용하며 
파일이르메 [파일이름][언어][국가].properties형식으로 추가해주면된다. 
-------------------------------------------------------------------------------------
id값이 basenames라고 되어있는데 이것은 springframework에서 지원하는
고정값이므로 마음대로 바꾸어서느 안된다. 
그리고 내부의 <property> 엘리먼트의 name 속성에는 두가지 값이 존재한다.
basename & basenames의 두가지. 우리는 여러 언어를 등록할거라서 
basenames를 사용해주어야 한다. 
-------------------------------------------------------------------------------------
메세지파일을 조금더 효율적으로 관리하기 위해 value태그에는 
모든걸 포함한 MessageSource 만쓴다. 즉 상위 개념을 써주는 것인데,
우리가 파일 1개에 모든 언어를 기록하는것이아니라 몇개씩 나누어쓰기때문에
50개로 나누어쓴다면 50개르 다써야하는 일이생기므로 
새 언어가 추가 또는 삭제된다 해도 스프링설정파일을 수정할 필요가 없기 때문!
-------------------------------------------------------------------------------------
LocalResolver 등록 
-------------------------------------------------------------------------------------
웹 브라우저가 =========> 서버에 어떠한 요청을 보내게되면,
기본 브라우저의 Local정보가
Http 요청 메세지 헤더에 자동으로 설정된 상태로 전송이 된다.
이때 스프링은 [LocaleResolver를 통해서 클라이언트의 Locale 정보를 추출]
하고 추출한 Locale 정보에 해당하는 언어의 메세지를 적용시켜 보여준다. 
스프링은 4개의 LocalResolver를 지원하는데, 만약 스프링 설정파일에 
LocalREsolver 가 따로 등록된게 아니라면 
기본값으로 AcceptHeanderLocalResolver가 적용된다.
------------------------------------------------------------------------------------- 
브라우저의 useragent 값이나 쿠키, 세션을 통해 locale 값을 처리한다.
그래서 우선 해당 xml에 아래처럼 추가해준다.

출처: https://unabated.tistory.com/entry/다국어-처리-localeResolver-messageSource [랄라라]


    @RequestMapping("/choiceLan.do")
    public String choiceLang(@RequestParam("lang") String lang,OnEmp onemp, HttpSession session,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("선택한 언어:"+lang);
        System.out.println("전달 데이터 확인 : " + onemp);
        // 해당되는 선택 언어가 message폴드 하위에 있는 다국어 선택 파일을 
        // 지정해서, 해당 위치/시간에 해당하는 언어가 나오게 된다.
        Locale locale = new Locale(lang);
        localResolver.setLocale(request,response, locale);
        return "OnEmp/Login/login";
    }  

참고문헌 localeResolver 란 :: 쥬니의 개발블로그 (tistory.com)

 

localeResolver 란

스프링 localeResolver 기본설정 @Configuration @EnableAutoConfiguration @ComponentScan public class I18nConfig extends WebMvcConfigurerAdapter { @Bean public LocaleResolver localeResolver() { // 쿠키..

juntcom.tistory.com

Spring Framework 메세지 국제화(다국어 지원) 사용하기 (tistory.com)

 

Spring Framework 메세지 국제화(다국어 지원) 사용하기

스프링 프레임웍에서 다국어 지원기능을 사용해 보겠습니다. 기본적으로 텍스트로 저장되는 properties 파일을 언어별로 만들어서 사용합니다. 이번에 해볼것은 다음과 같습니다. 1. 메세지 프로

offbyone.tistory.com

랄라라 :: 다국어 처리 - localeResolver, messageSource (tistory.com)

 

다국어 처리 - localeResolver, messageSource

스프링에서 다국어를 처리하려면 LocaleChangeInterceptor + messageSource 조합으로 가능하다. 국가별로 페이지들 별도로 만드는짓은 더이상 하지 말자. 만약 서버단에서 위의 조합으로 다국어 처리된

unabated.tistory.com

 

'2. 웹' 카테고리의 다른 글

[github] dynamic 프로젝트 생성하기  (0) 2021.11.04
포트폴리오 준비  (0) 2021.11.02
[Spring] 환경설정 web-xml 뜯어보기  (0) 2021.11.02
MVC패턴이란 무엇일까?  (0) 2021.11.02
[spring] 스프링환경설정2 web.xml  (0) 2021.09.18

github web 

1.  repository 생성 
2.  생성된 repository create 아무 파일 해야 main이 생성됨 (?) 맞나요 ㅠㅠ 


github-desktop

1. file- clone 클릭 

eclipse
4.  open project file system(원래는 import해야되는데. 지금안돼서.ㅠㅠ_)
5.  탐색기(window-git- finish ) 
6. 프로젝트 우클릭 => 프로퍼티 클릭 => > project Facts = > dynaminc, java, javascript 선택 
7. 커밋!!!!!!예쓰 끝! 

브런치 생성 중 main이라고 이름이 떠도 당황하지 마세요

노예제이름을 연상시킨다고 하여 master에서 main으로 변경되었습니다.  

 

* 추가 : 혹시 권한접근이 안된다면 토큰을 생성해보세요. 깃헙에서 아이디접근 말고 토큰으로 접근하도록 변경되었다고 했어요! 

'4.팀프로젝트' 카테고리의 다른 글

[Github] 사용과정 알아보기  (0) 2021.11.04
1. 다운로드 ( github가입, github-desktop설치) 

 

 

 

2. Repository 생성 (대시보드 화면에서 new를 클릭) 

(1). Repository 명을 작성하고

(2) Descirption에 설명을 적어준다. 

(3) 오픈소스로 활용 시 public, 유출되선 안되는 코드가 있을 경우 private을 설정한다. Readme는 필수조건은 아니므로      패스 

 

3. github-desktop 로그인 및 clone a repository from the internet 클릭 

4. 레퍼지토리 검색 or 클릭 후 경로설정 ( 원하는대로)  - clone 클릭 

5. 그럼 이제 이런 화면이 뜨죠잉 

6. 바탕화면에 보면 설치가 되어있는데 빈 파일이다. (아직 파일생성안했기때문이다) 

github에 있는 저장소를 내 컴퓨터로 가져오기 완료! ( 원드라이브 용량없어서 x표시....히힛) 

 

'4.팀프로젝트' 카테고리의 다른 글

[github활용하기] brunch생성 master - main  (0) 2021.11.04

 2021년 5월 3일(월) ~ 2021년 10월 26일 (수) 

날짜를 적어야겠노라면 휴대폰 달력을 반드시봐야 하는 나인데, 이 교육의 기간은 나에게 너무 특별해서 날짜와 요일, 날시까지 다 기억난다. 28년의 인생에서 가장 뿌듯하고도 스스로에게 잘했다고 칭찬해주고 싶다. 

코딩을 시작하게 된 계기

중, 고, 대학교 과정에서 공부한 사회학, 사회복지학, 이전 직장에서의 일들도 모두 값지고 즐겁긴 했지만, 나는 어디선가 계속해서 성장하고 공부하고, 공유하고, 글을쓰고픈 갈망이 있었다. 입사동기들도 도데체 언제부터 코딩에 발을 붙이게 된거냐고 물어볼때마다 나도 정말 모르겠다. 유혜진이 코딩을 한다고? 라고 말할때마다 기분이 나쁘다기보다는 스스로도 누군가에게 묻고싶을 정도로 신기했을 정도니까. 정리해보자면 세가지다.

 

1. 끊임없이 배우는 걸 나는 좋아한다. 배울 때 살아있음을 느끼고, 모르는 상태가 즐겁다.

2. 나의 지식을 축척해가는 일을 즐거워한다.

3. 원인을 파헤치고, 이유를 찾고 논리적인 흐름이 중요하다.

직장을 다니면서 나를 알게되었기 때문에 조금 더 갈팡질팡하지 않고 빠른 결단으로 들어설 수 있었다. 

3가지를 알게 되기까지, 이전 직장에서의 경험 그리고 19년도 공부해서 취득했던 사회조사분석사가 큰 몫을 했다. 통계 공부와 실습을 병행하면서 수학에도 즐거움을 다시 느끼기 시작했었고, 직장에서 경험했던 고통스러운 시간도 나를 알아가는 발판이 되어주었던 것 같다. 힘들었던 이유는 5분단위로 일이 끊기고 전화받는 환경이 힘들었던 것이다. 그런데 그런 일이 또 맞는 동기를 보면서 적성의 문제라고 인정하기 시작했던 것 같다. 이미 이전부터 철학수업을 들으며 논리를 펼치며 글을 쓰는 일이 나에겐 중요했던 걸 알기때문에 서서히 새로운 일을 하고싶다는 확신이 생기기 시작했고, 그 과정에서 코딩이 친밀했던 이유는 어쩌면 spss를 공부하며 성공할 수 있었던 자신감 때문이었던 것 같다.  

 

교육기관 선정

생활코딩, 부스트코스cs 강의, 스파르타코딩클럽, 신촌메가스터디에서 모든 교육을 섭렵했다. 지금 생각해보면 그냥 공부가 하고 싶었던 것 같다. 그저 무언가를 자꾸 알아가고 배우고싶다는 열망이 있어서 그 어떤 과정도 재미있었다. 도중에 인프런을 통해서 [비전공자, 코딩교육] 이라는 pdf를 다운받아서 경험담을 듣게 되었고, 국비교육을 선택할지 3개월간 6-700만원을 내고 취업에 뛰어드는 일을 선택할지 굉장한 고민을 많이 했었다. 국비교육을 선택한 이유는 돈을 아끼자는 마음이었고, 긴 기간동안 조금 더 제대로 배우고자하는 마음이 컸기 때문이었다. 지금 생각해보면 개인적으로는 잘 한 선택이었다고 생각한다. okky를 통해서 조금 더 나은 교육센터가 어떤 곳인지 후기를 골라가며 선택하게 되었다. 애초부터 의존적으로 살고싶지 않다는 마음이었기때문에 방향성을 제시하는쪽으로교육생을 키워가는 이곳이 좋았다. 

 

 

교육 전 IT산업에 대한 생각, 코딩에 대한 생각 변화
 

이전에는 그랬던 것 같다. '수학천재', '사회성부족해질 수 밖에없는..', '허리굽어지는일', '척박한 환경'의 사람들. 그리고, 지금도 생각이 동일하다. 수학머리는 남자들이 대부분 빠르게 돌아가는 경우도 있고 컴퓨터 앞에 앉아있다보니 사람들을 만날새가 없고, 허리가 정말 굽어지고, 눈이 안좋아지고, 밤낮이 바뀐다. 

그러나 중요한 건 내가 이 일을 왜 선택했는가에 대한 명확한 이유가 한가지 있어야 한다는 것이 중요하다. 어느 일이나 장단점은 있기 마련이다. 

그럼에도 불구하고, 지금의 취업준비과정이 피곤하면서도 마음은 행복했던 이유는 계속 공부를 하고 깨달아 갈 수 있어서다. 실제 취업 후에 현장에서는 내가 만든 기능이나 웹이 정말 이용자들의 업무 생산성을 높일 수 있다면, 그게 조금 더 인간에게 이로운 방향으로 작동한다면 나는 정말 더할 나위 없이 기쁠 것이다. 최종 목적지는 그것이어야 한다고 생각한다. 

코드를 작성하고 쓰다보면 코드로 소통하는 일이라는 것을 깨닫는다. 개발자도 치열하다. 

1. 오류가 생기면 해결이 가능할까라는 마음에 불안함을 항상 마주하고 

2. 다시 수정해야하는 일이 생길때 수정하다가 더 오류가 커지면 불안하다. 

3. 정말 생소한개념을 마주했을때 두려움도 생긴다.

 

두려움과 불안의 연속

그럼에도 해결되었고, 그 힘은 조원들의 소통과 나의 인내였다. 

" 코드가 익숙해지면 된다" 는 마음으로 버티고버티며 계속 보았다. 

이런 일련의 과정 속에서 삶에 대한 태도도 조금 변화하기 시작했다. 

마주한 문제는 해결될 수 있다는 자신감과, 정말 모르겠을때는 옆 사람과 함께 하면된다는 것 

그리고 내 고집이 정답이 아니라는 것이다. 

배우는 게 좋았으면서도 모르는 상황을 마주했을때 두려움을 마주하는 나를 보면서 모순인가 생각했지만

어쩌면 나는 이 스릴을 즐기고 있는지도 모른다. 

자바강의를 들을 때 밤새서 같이 버티던 비전공자 친구 1명이 중간에 나갔는데, 그 친구 생각이 종종난다.

공부할때는 항상 분기점이 있었고 분기점을 넘어서면 터널을 통과한 것 처럼 보이는 게 급속도로 많아졌다. 

그 기쁨을 아직도 기억하는데, 그 고통을 딛고 그 친구도 함께 할 수 있었다면 참 좋았을 것이라고 말이다. 

 

다짐

지금보다 더 힘들어질 수 도 있다.

취업을 하면 이런 과정이 배로 늘어날 것이고, 두려움도 배로 늘것이다.

조직내 관계도 지금의 양상과 다르기 때문에 더 쉽지 않아질 것이고

소통역량은 계속해서 늘려가야할 것이고

기한 내에 한계를 넘어서 구현해야할 것이고

잠도 자지 못할 것이고 

불안 할 것이지만 단 한가지, 안정적인 직장을 포기하고 내가 이 길을 선택한 이유를 스스로 반드시 기억한다.

공부하는 삶이 좋고, 깨달음의 순간이 즐겁고 좋아서 선택했다는 것

이후에 찾아올 괴로움의 시간도 감내할 자신이 나에게는 있다. 

더 나은 환경을 기대하지는 않는다.그저 내가 바랬던 것만을 기억하기때문에 즐거울 수 있다는 다짐 뿐이다.겸손한 개발자가 될 거다. 2부(기술 정리) 는 포폴정리하구 써야지! 

 

 

 

 

 

'6. 코딩하면서 느끼는것' 카테고리의 다른 글

글쓰기 특강  (0) 2018.10.27

 

web.xml 이란 ? 

web.xml이란 webapplication의 deployment Descriptor로서 xml형식의 파일이다. 

모든 web application은 반드시 web.xml파일을 가진다.

web-inf폴더의 하위를 보면 이 xml파일을 찾을 수 있고, 내부에설정된 내용은

web application시작 시 메모리에 로딩된다. 

 

[브라우저]가 [java servlet]에 접근하기 위해 was(tomcat)에 필요한 정보를 알려줘야 

해당하는 servlet을 호출할 수 있고 이것을 정하는 곳이 web.xml이다

 

매우 중요한 부분이지용 ?


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
 id="WebApp_ID" version="4.0">
  <display-name>onbiz</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/views/error/error404.jsp</location>
  </error-page>
  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
  <session-config>
  	<session-timeout>10</session-timeout>
  </session-config>
</web-app>

 

web.xml 의 역할은 무엇이있을까?

Diaspatcher-servlet : 클라이언트의 요청을 가로채어 컨트롤러에 보낸다( 클라이언트 요청을 최초로 받는 클래스)

contextLoarderListner

encodingFilter 

 

이렇게 세가지가 있다. 


1. welcome-file-list : 웰컴 파일이란 디렉토리의 기본 웹 페이지이다.

클라이언트가 서블릿 이름을 생략하고 디렉토리까지만 지정해서 요청한다면 웹 서버는 해당 디렉토리에서 웰컴 파일을 찾아서 응답한다. 여러 개의 웰컴 파일이 있으면 위에서부터 아래로 순차적으로 조회하고 먼저 찾은 것을 클라이언트에게 보낸다. <welcome-file-list>태그 안에 순서대로 작성한다. 

 

2. filter 

인코딩을 UTF-8로 설정하여 필터링하겠다는 설정이다.
https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html

3. errorpage 

에러가 생겼을 경우 location을 설정하여 사용자가 정의한 인터페이스로 에러를 보여주는 것을 설정한다.

4. listner

 

[서블릿/JSP] 리스너(Listner)란? 이벤트 리스너의 개념 설명. 구현 및 등록하기

리스너란? 이벤트, 리스너, 이벤트핸들러 간략 개념정리 리스너는 단어의 뜻으로 보자면 (소리를) 듣는 사람, 청취자입니다. 프로그래밍에서의 리스너는 무언가 소리를 듣는 사람을 뜻하기 보다

dololak.tistory.com

이해한 바로 요약해보자면, 클라이언트가 요청한 내용을 객체에 담아 가져오도록 하기 위해 리스너를 설정한다.

스프링에서 현재 HttpServletRequest 가져오는 방법

  • 이벤트 - 발생한 특정 사건(마우스 클릭, 키보드 입력, 클라이언트로부터의 HTTP 요청, 웹어플리케이션 시작, 웹어플리케이션 종료 등)
  • 이벤트 소스 - 이벤트가 발생한 대상(근원지)으로 마우스, 키보드, 웹어플리케이션(ServletContext) 등
  • 리스너, 핸들러 - 이벤트가 발생되기를 기다렸다가 발생시 실행되는 메서드나 함수. 또는 메서드를 가진 객체



출처: https://dololak.tistory.com/616 [코끼리를 냉장고에 넣는 방법]

 

5. session-config

세션유지시간을 설정하며 단위는 분이다. <session-timeout> 태그 사이에 작성한다. 

+ Recent posts