[JavaWeb] 서블릿 연구 노트

목차

서블릿

서블릿 라이프 사이클

서블릿 아키텍처 :

서블릿 경로 일치 :

서블릿 작성 :

ServletContext

도메인 개체 :

프로젝트 리소스 관리

파일의 MIME 유형 가져 오기 : (이해)

프로젝트의 초기화 매개 변수 가져 오기 (이해) :


서블릿

        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 ( "매개 변수 이름")

추천

출처blog.csdn.net/weixin_43267344/article/details/108611297