자바 웹 입문:Hello Servlet

8801 단어 JavaWebServlet
Servlet 개요
4.567917.servet sun 회사 가 동적 웹 기술 을 개발 합 니 다
  • Servlet(Server Applet)은 자바 Servlet 의 약칭 으로 작은 서비스 프로그램 이나 서비스 커 넥 터 라 고 불 린 다.자바 로 작 성 된 서버 엔 드 프로그램 은 플랫폼 과 프로 토 콜 에 독립 된 특성 을 가지 고 있 으 며,주요 기능 은 상호작용 적 으로 데 이 터 를 조회 하고 생 성하 여 동적 웹 콘 텐 츠 를 생 성 하 는 것 이다
  • 4.567917.넓 은 의미 의 Servlet 은 이 Servlet 인 터 페 이 스 를 실현 한 모든 종 류 를 말한다.Servlet 은 자바 를 지원 하 는 응용 서버 에서 실 행 됩 니 다.원리 적 으로 볼 때,Servlet 는 모든 종류의 요청 에 응답 할 수 있 지만,절대 다수의 경우 Servlet 는 HTTP 프로 토 콜 을 기반 으로 하 는 웹 서버 만 확장 할 수 있다4
  • sun 회 사 는 api 에서 인 터 페 이 스 를 제공 합 니 다.만약 에 우리 가 servlet 프로그램 을 개발 하려 면 우 리 는 두 가지 만 해 야 합 니 다
  • 1.일반 클래스 를 써 서 servlet 인 터 페 이 스 를 실현 합 니 다.
    2.기 록 된 servlet 을 서버 에 넣 습 니 다.
    sun 회 사 는 두 가지 기본 구현 클래스 인 Http Servlet 과 GenericServlet 을 제시 했다.
    Hello Servlet
    공정 구조
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhBPeiJV-1620396757425)(C:\Users\ASUS\Desktop\javaweb_study\javaweb\web服务器讲解.assets\image-20210507221216543.png)]
    1.maven 프로젝트 를 만 들 고 웹 프레임 워 크 를 추가 합 니 다.
    2.도입 의존
    
    dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.0</version>
        </dependency>
      </dependencies>
    
    3.Servlet 프로그램 을 만 들 고 HttpServlet 인 터 페 이 스 를 실현 하 는 일반 클래스 를 만 듭 니 다.
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    /**
     * @author crush
     *  idea        alt + enter
     *          ctrl + o
     */
    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            PrintWriter writer = resp.getWriter();
            writer.print("hello Servlet");
            System.out.println("");
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    4.Servlet 맵 작성
    왜 매 핑 이 필요 합 니까?브 라 우 저 를 통 해 방문 해 야 하 는 것 이 아니 라 브 라 우 저 는 웹 서버 에 연결 해 야 합 니 다.웹 서버 에 우리 가 쓴 servlet 를 등록 하고 브 라 우 저 에 접근 할 수 있 는 경 로 를 제공 해 야 합 니 다.
    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        <servlet>
            <servlet-name>hello</servlet-name>
            <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>hello</servlet-name>
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    </web-app>
    
    테스트:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dO79ndZl-1620396757428)(C:\Users\ASUS\Desktop\javaweb_study\javaweb\web服务器讲解.assets\image-20210507221205112.png)]
    Servlet 의 실행 과정
    Servlet 프로그램 은 웹 서버 에서 호출 되 었 습 니 다.웹 서버 는 클 라 이언 트 의 Servlet 접근 요청 을 받 은 후:
    ① 웹 서버 는 먼저 이 Servlet 의 인 스 턴 스 대상 을 불 러 오고 만 들 었 는 지 확인 합 니 다.그렇다면 ④ 단 계 를 직접 집행 하고 그렇지 않 으 면 ② 단 계 를 집행 한다
  • ② 이 Servlet 의 인 스 턴 스 대상 을 불 러 오고 만 듭 니 다
  • ③ Servlet 인 스 턴 스 대상 의 init()방법 을 호출 합 니 다4.567917.④ HTTP 요청 메 시 지 를 밀봉 하 는 HttpServletRequest 대상 과 HTTP 응답 메 시 지 를 대표 하 는 HttpServletResponse 대상 을 만 든 다음 Servlet 의 service()방법 을 호출 하여 요청 과 응답 대상 을 매개 변수 로 전달 합 니 다⑤ 웹 프로그램 이 정지 되 거나 다시 시작 되 기 전에 Servlet 엔진 은 Servlet 을 마 운 트 해제 하고 마 운 트 해제 하기 전에 Servlet 의 destroy()방법 을 호출 합 니 다img
    5.Mapping 문제:
    1.Servlet 에서 맵 경 로 를 지정 할 수 있 습 니 다.
    
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
    2.하나의 Servlet 은 여러 개의 맵 경 로 를 지정 할 수 있 습 니 다.
    
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>
    
    3.하나의 Servlet 에서 일반적인 맵 경 로 를 지정 할 수 있 습 니 다.
    
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.crush.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello.*</url-pattern>
    </servlet-mapping>
    
    4.기본 요청 경로
    
    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.crush.servlet.HelloServletDays</servlet-class>
    </servlet>    
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
    5.접두사 나 접 두 사 를 지정 할 수 있 습 니 다.
    
    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>com.crush.servlet.HelloServletDays</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>*.crush</url-pattern>
    </servlet-mapping>
    
    6.우선 순위 문제
    고정된 맵 경 로 를 지정 하 는 우선 순위 가 가장 높 습 니 다.찾 지 못 하면 기본 처리 요청 을 합 니 다.
    아 날로 그 지정 error 페이지
    1.ErrorServlet 클래스 를 작성 합 니 다.
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    /**
     * @Author: crush
     * @Date: 2021-05-07 23:03
     * version 1.0
     */
    public class ErrorServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            PrintWriter writer = resp.getWriter();
            writer.print("404");
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    2.맵 경로 설정
    
    <servlet>
        <servlet-name>error</servlet-name>
        <servlet-class>com.crush.servlet.ErrorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
    테스트:존재 하지 않 는 경 로 를 방문 하면 우리 가 쓴 ErrorServlet 에 직접 방문 하여 다른 구체 적 인 경 로 를 방문 하 는 것 은 변 하지 않 습 니 다.
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUm7RU9R-1620400096023)(C:\Users\ASUS\Desktop\JavaWeb_study\JavaWeb\5Servlet概述.assets\image-20210507230742029.png)]
    총결산
    이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

    좋은 웹페이지 즐겨찾기