목차
서블릿
Servlet은 서버에서 실행되는 Java 애플릿으로 클라이언트 요청을 처리하고 브라우저의 동적 자원에 응답하는 데 사용되는 일련의 사양입니다. Servlet의 핵심은 Java 코드의 API를 통해 클라이언트에 콘텐츠를 동적으로 출력하는 Java 코드입니다.
서블릿 일반 Java 프로그램의 차이점 :
1) 서블릿 인터페이스를 구현해야합니다.
2) 서블릿 컨테이너 (서버)에서 실행해야합니다.
3) 서블릿 프로그램은 사용자 요청 매개 변수를 수신하고 브라우저에 데이터를 출력 할 수 있습니다.
서블릿 실행 원칙 :
원리:
1) URL 입력 : http : // localhost / 8080 / day08 / count 프로젝트 루트 디렉토리 day08을 방문하여 tomcat 서버의 webapps에서 day08 폴더를 찾습니다.
2) web.xml 구성 파일로 이동하여 가상 경로 개수 (url-pattern)를 읽은 다음 가상 경로에 해당하는 servlet-name을 통해 <servlet-name>에서 servlet-name을 찾고 마지막으로 해당 servlet 애플릿을 찾습니다. 호출 실행
3) 서블릿 객체 생성 ------> init ()를 호출하여 객체 초기화 ------> 서블릿에서 서비스 메소드 실행 --------> 데이터를 브라우저 객체로 반환
4) tomcat이 닫히면 서블릿은 destroy 메소드를 호출하여 파괴합니다.
서블릿 라이프 사이클
라이프 사이클 : 객체 생성에서 소멸까지의 프로세스는 라이프 사이클입니다. 전체 서블릿 사이클에는 세 가지 방법이 포함됩니다.
1) init () : init 메소드를 사용하여 서블릿을 초기화합니다.
2) service () : 클라이언트에서 서비스에 대한 모든 호출을 처리합니다.
3) destroy () : 서비스 센터에서 서블릿을 제거한 다음 destroy 메소드를 사용하여 파괴하고 마지막으로 가비지 수집 및 종료
서블릿의 순환 :
서블릿 아키텍처 :
서블릿 인터페이스
↓
GenericServlet 추상 클래스 : 전달 된 서블릿은 서비스 메소드를 제외한 모든 메소드를 구현하고 servletCOnfig의 모든 메소드를 구현합니다.
↓
HTTPServlet 인터페이스 : httpservlet은 http 요청을 처리하는 데 사용되며 서블릿의 모든 방법을 구현하며 다른 요청 처리 방법을 세분화합니다.
기본 원칙 :
우리가 직접 만든 클래스는 HTTPServlet을 상속 한 다음 HTTPServlet이 GenericServlet을 상속하고 마지막으로 GenericServlet이 서블릿 인터페이스를 구현합니다. 이점은 다음과 같습니다. 우리가 만든 새 클래스는 모든 메서드를 다시 작성할 필요가없고 원하는 메서드 만 다시 작성하면됩니다. 그게 다야.
서블릿 인터페이스 : 메소드 정의 (라이프 사이클의 세 가지 메소드 : init (), service (), destroy ())
GenericServlet :
1) 파기 방식 구현 (프로그램에 편리하고 파기 방식은 향후 작성되지 않으나 데이터 파기가 필요한 경우 직접 오버라이드 가능)
2) 서비스 방법 추상화 계속
3) init 메소드 구현 (멤버 변수 할당 및 자체 매개 변수없는 init (0) 호출)
HTTPServlet :
1) 강제 요구, 대응 대상 (향상된 기능)
2)이 클래스의 서비스 메소드 호출 (요청 메소드를 얻기 위해 요청 메소드를 7 개로 나누고 특정 요청 메소드 실행)
서블릿 경로 일치 :
url-pattern : 요청 네트워크 주소와 서블릿 클래스 간의 매핑 관계를 설정합니다.
경로 쓰기 방법 :
1) 정확한 경로 일치 : "/"로 시작하고 그 뒤에 정확한 경로,
2) 디렉토리 일치 : "/"로 시작하고 "*"로 끝납니다.
3) 접미사 이름 일치 : "*"로 시작하고 접미사 이름으로 끝납니다.
4) 기본 일치 : "/",이 경로를 사용하지 마십시오. 이미 사용중인 서블릿이 있으며 모든 웹 서버에 두 개의 serlvet이 있습니다 (기본 서블릿 및 jspservlet)
경로 일치 우선 순위 : 정확히 일치> 디렉토리 일치> 접미사 이름 일치> 기본 일치
서블릿 작성 :
1) 클래스 생성 및 HTTPServlet 상속 (서블릿을 직접 생성 할 수도 있음)
2) web.xml 구성
3) doget 또는 dopost 메소드를 작성하십시오.
주석 사용 :
web.xml 구성 :
필요에 따라 doget 또는 dopost에 요구 사항을 작성할 수 있습니다.
ServletContext
웹 서버가 시작되면 각 웹 프로젝트에 해당하는 ServletContext 객체를 생성합니다.
주요 효과 :
1) 도메인 객체 (서블릿은 도메인 객체를 통해 통신하고 데이터 공유 프로세스를 운영 할 수 있음)
2) 서버에있는 리소스의 실제 주소를 가져와 전체 프로젝트의 리소스를 관리합니다.
3) 전역 구성 매개 변수 가져 오기
4) 파일의 MIME 유형 가져 오기
도메인 개체 :
범위 내에서 데이터를 공유합니다.
데이터 저장 : void setAttribute (String name, object value)
데이터 가져 오기 : Object getAttribute (String name)
데이터 삭제 : void removeAttribute (strng name)
데이터 저장 :
public class MyServletContext extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获得ServletContext 对象.方法();
ServletContext sc1 = this.getServletContext();
ServletContext sc2 = this.getServletContext();
System.out.println(sc1 );
System.out.println(sc2 );
//往servletContext对象中存数据
//存api
sc1.setAttribute("ds" , "吉吉国王");
//直接获得数据
Object ds = sc2.getAttribute("ds");
System.out.println("oneServlet : " + ds);
}
}
데이터 가져 오기
public class MyServletContext2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获得ServletContext 对象.方法();
ServletContext sc1 = this.getServletContext();
ServletContext sc2 = this.getServletContext();
System.out.println(sc1 );
System.out.println(sc2 );
//直接获得数据
//当没有人进行存储的时候 值为null
Object ds = sc2.getAttribute("ds");
System.out.prntln("twoServlet : " + ds);
//删除数据
sc2.removeAttribute("ds");
}
}
프로젝트 리소스 관리
getRealPath () 프로젝트의 로컬 실제 경로 (컴파일 된 경로) 가져
오기 getResourceAsStream () 프로젝트 아래의 리소스 파일을 가져 와서 스트림으로 변환 (컴파일 됨)
public class GetResourceServlet extends HttpServlet {
/**
* 在java代码中 获得项目的资源 img/1.jpg
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获得ServletContext对象
ServletContext sc = getServletContext();
//2.获得这张图片的真实地址 .get 获得 Real 真实 Path路径 获得项目在本地磁盘的真实路径
//获得的是编译路径 获得最后拼接的路径
String realPath = sc.getRealPath("/img/1.jpg");
System.out.println(realPath);
//File file = new File
//直接获得项目下的文件 并转换成流对象
InputStream is = sc.getResourceAsStream("/img/1.jpg");
System.out.println(is);
}
}
파일의 MIME 유형 가져 오기 : (이해)
- getMimeType ( "접미사가있는 파일 이름")
프로젝트의 초기화 매개 변수 가져 오기 (이해) :
<context-parm> 구성 프로젝트 초기화 매개 변수를 통한 web.xml의 매개 변수
getInitParameter ( "매개 변수 이름")