Sobes.tech
Middle

Kaip sukurti servletą Spring'e?

sobes.tech AI

Atsakymas iš AI

Spring'e galite sukurti servlet keliais būdais:

  1. Naudojant HttpServletBean arba FrameworkServlet: Spring teikia abstrakčius klases, kurios išplečia HttpServlet, palengvindamos integraciją su Spring kontekstu. FrameworkServlet yra labiau bendras ir naudojamas daugelyje Spring žiniatinklio karkasų (pvz., DispatcherServlet).

    // Pavyzdys paprasto servleto, kuris paveldi iš `FrameworkServlet`
    // Realiame taikyme dažnai reikės daugiau konfigūracijų
    public class MySpringServlet extends org.springframework.web.servlet.FrameworkServlet {
    
        @Override
        protected void doService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
            // Užklausos apdorojimo logika
            response.getWriter().write("Hello from MySpringServlet!");
        }
    }
    
  2. Rankinis registravimas naudojant @Bean ir ServletRegistrationBean: Spring konfigūracijoje (dažniausiai su @Configuration) galite sukurti savo servleto egzempliorių ir apvynioti jį ServletRegistrationBean. Tai leidžia lankstiai nustatyti URL žemėlapius ir servleto parametrus.

    import org.springframework.boot.web.servlet.ServletRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @Configuration
    public class ServletConfig {
    
        @Bean
        public ServletRegistrationBean<HttpServlet> myCustomServletRegistration() {
            ServletRegistrationBean<HttpServlet> registration = new ServletRegistrationBean<>(new MyCustomServlet());
            registration.addUrlMappings("/custom-servlet/*"); // URL žemėlapis
            registration.setLoadOnStartup(1); // Užkrauti pradžioje
            return registration;
        }
    
        // Pavyzdinis naudotojo servletas
        public static class MyCustomServlet extends HttpServlet {
            @Override
            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
                response.getWriter().write("This is a custom servlet!");
            }
        }
    }
    
  3. Naudojant standartinius servletų mechanizmus Spring Boot (@ServletComponentScan): Spring Boot'e, jei pridėsite @ServletComponentScan anotaciją prie pagrindinio programos klasės (ar bet kurios konfigūracijos klasės), Spring Boot automatiškai skenuos paketus, kuriuose yra žymės @WebServlet, @WebFilter, @WebListener anotacijomis, ir juos registruos.

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @SpringBootApplication
    @ServletComponentScan // Įjungia standartinių servleto anotacijų skenavimą
    public class MySpringBootApp {
        public static void main(String[] args) {
            SpringApplication.run(MySpringBootApp.class, args);
        }
    
        // Pavyzdinis servletas, kuris bus automatiškai užregistruotas
        @WebServlet("/auto-servlet")
        public static class AutoRegisteredServlet extends HttpServlet {
            @Override
            protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
                response.getWriter().write("Automatically registered servlet!");
            }
        }
    }
    

Pasirinkimas priklauso nuo jūsų poreikių. Integracijai su Spring kontekstu ir jo galimybėmis (pvz., DI) dažnai naudojami FrameworkServlet arba registracija per ServletRegistrationBean. Paprastiems atvejams arba esamų servleto migracijai tinka @ServletComponentScan. Dauguma Spring MVC žiniatinklio programų pagrindinis servletas yra DispatcherServlet, kuris automatiškai konfigūruojamas Spring Boot'e.