본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 38일차 -59

by oncerun 2020. 4. 22.
반응형

에러 발생 시 구별

 

1. web.xml 에러

servlet등록이 잘못되어 있을 때를 말한다. servlet-name, servlet-classm url-pattern을 오타 없이 정확히 기입했는지 확인하자.


2. 서블릿 어노테이션

생성한 servlet의 어노테이션에 오타가 있을 경우 서버가 시작되지 않는다. 때문에 어노테이션 부분을 잘못 썼는지 다시 한번 확인해 보자.


3. 포트번호(8080) 충돌

기본 설정 포트번호인 8080에 다른 서버가 잡혀 있어서 톰캣 서버가 이 포트번호에 접속하려는 경우 충돌이 발생하면 역시 에러가 난다. 톰캣의 conf폴더의 server.xml파일에서 포트번호를 다른 번호로 변경해주자(보통 8090이나 80을 사용한다).

 

4. 404 Error

URL이 매칭 되지 않아 페이지를 찾을 수 없을 때 발생되는 에러입니다.

매핑을 확인해야 합니다.

우리가 이클립스를 이용해 톰캣을 이용하게 되면 서버 탭에서 3가지의 옵션 사항이 있습니다.

 

서버 설정

 

 

Sever Locations에서는 톰캣의 경로 및 배포 경로를 지정할 수 있습니다.

 

Use workspace metadata - 이클립스의 실행환경에 톰캣의 가상 파일을 만들어 작동시키는 것입니다.

Use Tomcat installation - 실제 설치된 톰캣 경로에 배포하는 것입니다.

Use custom location - 사용자가 지정한 위치에 배포하는 것입니다.

 

만약 이클립스 실행환경에서 사용하다 실 서버에 적용시키기 위해선 실제 톰캣의 파일에 배포하여야 합니다.

 

 

HTML 태그

 

Form 태그의 Action

 

 우리가 매핑했던 주소를 적어줍니다. 

 

form action="hello"라고 하면 hello의 해당되는 서블릿에게 폼 내부의 입력값들을 전달합니다.

 

form action의 값은 절대 경로와 상대 경로가 존재합니다.

http에서의 절대 경로는  http://localhost/WebPrj/hello.html방식으로 정해 줄 수 있습니다.

 

 

Text 태그의 Name

 

text태그의 name속성은 사용자에게 입력받은 값을 매핑된 서블릿에게 값을 넘겨주는 태그입니다.

넘겨받은 이름의 값은 문자열로 서블릿에게 전달되므로 데이터를 재사용할 경우에는 형 변환을 해주어야만 합니다.

하지만 사용자가 NULL값이나 빈공 백을 입력할 경우에도 형 변환을 한다면 오류를 발생하므로 조건 처리를 해줍니다.

 

<input type="text" name="text1"/> 입력받은 값을 text1이라는 이름으로 값이 서블릿에게 전달되며 서블릿에서는 request.getParameter("tex1");으로 값을 전달받을 수 있습니다.

String c_ =request.getParameter("c");//반드시 문자열로 변환해주어야한다.
		
		if(c_!=null && !c_.equals(""))
			c = Integer.parseInt(c_);

 

 

 

Charset 설정

한글이 깨지는 이유 두 가지


1. 서버에서 한글을 지원하지 않는 문자코드로 인 코딩한 경우

2. 서버에서는 utf-8로 인코딩해서 보냈지만 브라우저가 다른 코드로 잘못 해석한 경우.

 

각 브라우저마다 각자 인코딩하는 방식 다를 수 있습니다.

예를 들어 Crome은 EUC-KR NAVER는 UTF-16 등등 

이렇게 기본 인코딩이 설정되어있다면 우리가 URL을 요청받아 서블릿 결괏값을 전해줄 때

문자가 깨질 수 가있습니다.

 

이러한 현상을 막기 위해 우리는 서블릿에

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

이라는 코드를 작성합니다.

 

Sevlet에서 한글을 직접 입력하거나 post방식인 form에서 데이터가 넘어오는 경우 한글을 지원받으려면

setCharacterEncoding("UTF-8")

response.setContentType("text/html;charset=UTF-8");

을 작성해주어야 한다.

setCharacterEncoding은 웹서버에서 charset을 지정해주어 클라이언트에게 보내는 방식입니다.

setContentType는 브라우저의 기본 인코딩 설정대로 인코딩하지 말고 Content type을 response.setContentType("text/html;charset=UTF-8");으로 개발자가 정해주므로

UTF-8로 해석해서 사용자에게 보여주라는 뜻이다.

 

 

SubQuery 부가 질의가 많다면?

 

우리는 get = 주문서와 같은 페이지를 제공하고 사용자가 전부 질의를 작성한 뒤

사용자가 post형식으로 서버에 제출한다.

 

GET.

GET은 요청을 전송할 때 데이터를 쿼리 스트링을 통해 전송합니다.

우리의 URL을 보면 http://localhost/WebPrj/calc? x=213&y=213

와같이 calc뒤에? 질의문이 존재합니다.

? 뒤에 이름과 값으로 이루는 요청 파라미터를 쿼리 스트링이라고 부릅니다.

요청 파라미터가 2개이므로 &연산자로 연결했습니다.

GET은 불필요한 요청을 제한하기 위해 요청에 대한 응답 값을 캐시로 저장될 수 있습니다.

CSS, IMAGE 같은 정적인 콘텐츠는 변경될 일이 적기 때문에 요청을 반복적으로 보내지 않아도 됩니다.

따라서 동일한 요청이 반복될 때 서버에 요청을 하는 대신 캐시 된 데이터를 이용합니다.

 

POST

 

POST는 리소스를 생성/변경하기 위해 설계되었기에 GET과 달리 데이터를 BODY에 담아서 전송합니다.

HTTP 메시지의 BODY는 길이의 제한이 없이 데이터를 전송할 수 있기에 대용량 데이터를 서버에 요청할 수 있습니다.

또한 POST로 요청할 때는 Content-Type에 요청 데이터의 타입과 혹시 모를 Encoding 방식을 표시해야 합니다.

 

get은 정적이므로 동일한 요청을 하더라도 동일한 응답이 돌아와야 합니다. 따라서 웹서핑을 하고나 게시글을 읽는 등 조회를 하는 행위를 get으로 요청하게 됩니다.

반대로 post는 서버에게 동일한 요청을 여러 번 해도 항상 다를 수 있습니다.

그렇기 때문에 post는 서버의 데이터를 변경시킬 때 사용될 수 있습니다.

우리가 게시판에 글을 쓰고  글이 서버에 저장됩니다. 이러한 데이터를 저장하거나 삭제, 수정 등을 할 때

post를 사용합니다.

 

반응형

댓글