Servlet 개발 기술 기초

1.Servlet 개요
1.sun 회사 가 제공 하 는 동적 웹 자원 개발 기술.본질은 이전 자바 애플 릿 입 니 다.이 애플 릿 은 서버 가 호출 할 수 있 도록 Servlet 인 터 페 이 스 를 실현 해 야 합 니 다.
2.Servlet 개발 의 두 단계
*실험:Servlet 의 빠 른 입문
(1)절차 1:자바 프로그램 을 써 서 Servlet 인 터 페 이 스 를 실현 합 니 다.(기본 구현 클래스 GenericServlet 을 직접 계승 합 니 다)

package cn.itheima;
import java.io.*;
import javax.servlet.*;
public class FirstServlet extends GenericServlet{
	public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{
		res.getOutputStream().write("My FirstServlet!".getBytes());
	}
}

(2)컴 파일 된 가방 의.class 를 WEB-INF/classes 외 에 웹 애플 리 케 이 션 의 웹.xml 등록 Servlet 을 설정 합 니 다.


  FirstServlet
  cn.itheima.FirstServlet
 
 
  FirstServlet
  /FirstServlet
 

3.MyEclipse 를 이용 하여 Servlet 개발
2.Servlet 의 상세 한 설명
1.라 이 프 사이클:한 가지 사물 이 언제 태 어 나 고 언제 죽 는 지,생존 기간 에 반드시 할 수 있 는 일,이런 것들 을 함께 놓 는 것 이 바로 이 사물 의 성명 주기 이다.
2.Servlet 의 생명주기:일반적으로 servlet 가 처음 방 문 했 을 때 메모리 에 대상 을 만 들 고 생 성 후 init()방법 으로 초기 화 합 니 다.모든 요청 에 대해 서 는 service(req,resp)방법 으로 요청 을 처리 합 니 다.이 때 는 Request 대상 으로 요청 정 보 를 밀봉 하고 Response 대상(처음에는 비어 있 었 음)으로 응답 메 시 지 를 대표 하여 service 방법 으로 전 송 됩 니 다.서비스 방법 처리 가 완료 되면 서버 서버 로 돌아 가 Response 의 정보 조직 에 따라 응답 메 시 지 를 브 라 우 저 에 되 돌려 줍 니 다.응답 이 끝 난 후 servlet 는 삭제 되 지 않 고 메모리 에 남아 다음 요청 을 기다 리 고 있 습 니 다.서버 가 닫 히 거나 웹 응용 프로그램 이 가상 호스트 에서 제 거 될 때 까지 servlet 대상 이 소각 되 고 소각 하기 전에 destroy()방법 으로 뒷수습 을 합 니 다.
3.Servlet 인터페이스의 계승 구조
Servlet 인터페이스:servlet 가 가 져 야 할 방법 을 정 의 했 습 니 다.모든 Servlet 는 이 인 터 페 이 스 를 직접 또는 간접 적 으로 실현 해 야 합 니 다.
|
----genericServlet:Servlet 인터페이스 에 대한 기본 적 인 실현,유 니 버 설 Servlet,이것 은 추상 적 인 유형 입 니 다.그 중의 대부분 방법 은 기본 적 인 실현 을 했 습 니 다.service 방법 만 추상 적 인 방법 으로 상속 자가 스스로 실현 해 야 합 니 다.
|
----httpServlet:HTTP 프로 토 콜 에 최 적 화 된 Servlet 을 진행 하여 GenericServlet 클래스 를 계승 하고 그 중의 service 추상 적 인 방법 을 실현 했다.기본 적 인 실현 에서 요청 한 요청 방식 을 판단 하고 요청 방식 에 따라 각각 다른 doXXX()방법 을 호출 했다.보통 저희 가 HttpServlet 을 직접 계승 하면 돼 요.
4.웹.xml 등록 Servlet 주의사항
4.1 탭 으로 Servlet 등록


  FirstServlet
  cn.itheima.FirstServlet

메모:servlet 의 전체 클래스 이름 을 원 합 니 다.자바 나 class 확장 파일 경 로 를 포함 하 는 것 이 아 닙 니 다.


 
  FirstServlet
  /FirstServlet
 

4.2 하 나 는 여러 개 에 대응 할 수 있다.
4.3*일치 문자 로 설정 할 수 있 지만*.do 또는/로 시작 하 는/*로 끝 나 는 경로 여야 합 니 다.
~일치 하 는 문자 의 도입 으로 인해 하나의 가상 경 로 는 여러 servlet-mapping 에 대응 할 수 있 습 니 다.이때 어느 것 이 가장 servlet 을 찾 고*.do 등급 이 가장 낮 습 니까?
4.4 하위 탭 을 설정 하기 위해 서버 가 시 작 될 때 servlet 를 불 러 올 수 있 습 니 다.그 중에서 설정 한 수 치 는 시작 순 서 를 지정 합 니 다.

servlet>
invoker

org.apache.catalina.servlets.InvokerServlet

2

4.5 결 성 servlet:servlet 의 대외 방문 경로 가/로 설정 되면 이 servlet 은 결 성 servlet 이 고 다른 servlet 가 처리 하지 않 는 요청 은 모두 그것 으로 처리 합 니 다.
~conf/web.xml 에 결 성 servlet 을 설정 하 였 습 니 다.정적 자원 에 대한 접근 과 오류 페이지 의 출력 은 이 결 성 servlet 에서 처리 합 니 다.만약 에 우리 가 부족 한 servlet 를 써 서 아빠 웹.xml 의 부족 한 servlet 을 덮어 쓰 면 정적 웹 자원 에 접근 할 수 없습니다.그래서 설정 을 추천 하지 않 습 니 다.
4.6servlet 의 라인 안전 문제
4.6.1 일반적인 상황 에서 하나의 servlet 는 메모리 에 하나의 인 스 턴 스 처리 요청 만 있 기 때문에 여러 요청 이 전 송 될 때 여러 개의 스 레 드 가 이 servlet 대상 을 조작 합 니 다.이 때 스 레 드 안전 문 제 를 초래 할 수 있 습 니 다.
(1)servet 의 구성원 변 수 는 스 레 드 보안 문제 가 있 을 수 있 습 니 다.
*실험:구성원 변수 inti=0 을 정의 합 니 다.doXXX()방법 에서 i++작업 을 하고 i 값 을 클 라 이언 트 에 출력 합 니 다.이 때 지연 으로 인해 스 레 드 안전 문제 가 발생 할 수 있 습 니 다.
(2)servet 에서 자원 파일 을 조작 할 때 여러 스 레 드 가 같은 파일 을 조작 하여 스 레 드 안전 문 제 를 일 으 킵 니 다.
*실험:하나의 파 라 메 터 를 가지 고 오 기 를 요청 합 니 다.servlet 는 요청 파 라 메 터 를 파일 에 기록 하고 이 파일 을 읽 습 니 다.읽 은 값 을 클 라 이언 트 에 인쇄 합 니 다.스 레 드 보안 문제 가 있 을 수 있 습 니 다.
4.6.2 해결 방법
(1)동기 코드 블록 을 이용 하여 문 제 를 해결한다.결함 은 같은 시간 에 동기 코드 블록 은 하나의 요청 만 처리 할 수 있 고 효율 이 낮 기 때문에 동기 코드 블록 에는 핵심 적 인 스 레 드 안전 문 제 를 야기 하 는 코드 만 포함 되 어 있 습 니 다.
(2)이 servlet 에 SingleThreadModel 인 터 페 이 스 를 구현 합 니 다.이것 은 태그 인터페이스 입 니 다.표 시 된 servlet 는 메모리 에 servlet 풀 을 저장 합 니 다.스 레 드 가 왔 고 풀 에 servlet 대상 처리 가 없 으 면 새 것 을 만 듭 니 다.풀 에 남 은 servlet 이 있 으 면 직접 사용 합 니 다.이것 은 결코 정말로 라인 안전 문 제 를 해결 할 수 없다.이 인 터 페 이 스 는 이미 폐기 되 었 다.
(3)두 가지 해결 방안 이 모두 완벽 하지 못 하기 때문에 servlet 에서 구성원 변 수 를 나타 내지 않도록 한다.
3.ServletConfig
1.servlet 설정 대상 을 대표 하여 웹.xml 에서 설정 할 수 있 습 니 다.


 Demo5Servlet
 cn.itheima.Demo5Servlet
 
 data1
 value1
 
 

그리고 servlet 에서 this.getServletConfig()를 이용 하여 ServletConfig 대상 을 가 져 옵 니 다.이 대상 은 getInitParameter()와 getInitParameterNames()방법 을 제공 하여 설정 에 있 는 설정 항목 을 옮 겨 다 닐 수 있 습 니 다.
servlet 에 죽은 내용 을 쓰 고 싶 지 않 으 면 여기에 설정 할 수 있 습 니 다.
4.ServletContext
1.현재 웹 응용 대상 을 대표 합 니 다.
2.도 메 인 대상 으로 사용 하고 서로 다른 servlet 사이 에 데 이 터 를 전달 하 며 역할 범 위 는 전체 웹 응용 이다.
라 이 프 사이클:웹 애플 리 케 이 션 이 용기 에 불 러 올 때 전체 웹 애플 리 케 이 션 을 대표 하 는 ServletContext 대상 을 만 듭 니 다.서버 가 닫 히 거나 웹 애플 리 케 이 션 이 용기 에서 제거 되면 ServletContext 대상 이 따라 삭 제 됩 니 다.
도 메 인:도 메 인 은 하나의 상자 로 이해 합 니 다.이 안에 데 이 터 를 배치 할 수 있 습 니 다.도 메 인 이 라 고 부 르 면 그 는 볼 수 있 는 범위 가 있 습 니 다.이 범위 내 에서 이 도 메 인 중의 데 이 터 를 조작 할 수 있 습 니 다.그러면 이런 대상 을 도 메 인 대상 이 라 고 합 니 다.
3.웹.xml 에서 전체 웹 응용 프로그램의 초기 화 파 라 메 터 를 설정 하고 ServletContext 를 이용 하여 얻 을 수 있 습 니 다.


param1
pvalue1

this.getServletContext().getInitParameter("param1")
this.getServletContext().getInitParameterNames()

4.서로 다른 servlet 사이 에서 리 트 윗

this.getServletContext().getRequestDispatcher("/servlet/Demo10Servlet").forward(request, response);

방법 실행 이 끝나 면 서 비 스 는 서버 로 돌아 가 고 서버 가 대상 servlet 을 호출 합 니 다.그 중에서 request 는 다시 만 들 고 이전 request 의 데 이 터 를 복사 합 니 다.
5.자원 파일 읽 기
5.1 상대 경 로 는 기본적으로 자바 가상 컴퓨터 가 시작 하 는 디 렉 터 리 이기 때문에 상대 경 로 를 직접 쓰 면 tomcat/bin 디 렉 터 리 에 비해 자원 을 가 져 올 수 없습니다.절대 경로 로 쓰 면 프로젝트 가 다른 환경 에 발표 되 었 을 때 절대 경로 가 잘못 되 었 습 니 다.
5.2 이 문 제 를 해결 하기 위해 ServletContext 는 this.getServletContext().getRealPath("/1.properties")를 제공 하여 자원 에 들 어 가 는 가상 경 로 를 제공 하고 이 자원 이 현재 환경 에서 의 실제 경 로 를 되 돌려 줍 니 다.this.getServletContext().getResourceAsStream("/1.properties")은 자원 의 가상 경 로 를 이 자원 의 실제 경로 로 되 돌려 줍 니 다.
5.3 servlet 이 아 닌 자원 파일 을 가 져 올 때 ServletContext 대상 이 사용 하지 않 습 니 다.이 때 는 클래스 로 더 만 사용 할 수 있 습 니 다.
classLoader.getResourceAsStream("..................................................................
classLoader.getResource(".../1.properties").getPath()는 자원 의 실제 경 로 를 직접 되 돌려 줍 니 다.업데이트 지연 문제 가 없습니다.
총결산
이상 은 바로 본 고 에서 Servlet 개발 기술 기초 에 관 한 모든 내용 이 므 로 여러분 에 게 도움 이 되 기 를 바 랍 니 다.관심 이 있 는 친 구 는 본 사 이 트 를 계속 참고 할 수 있 습 니 다.
Servlet 세 션 기술 기초 분석
그리고 본 사이트 의 다른 관련 주제 에 부족 한 점 이 있 으 면 댓 글로 지적 해 주 십시오.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기