Kako registrirati servlet na Javi

1. Uvod

Ovaj će članak pružiti pregled kako registrirati servlet u Jakarta EE i Spring Boot. Konkretno, razmotrit ćemo dva načina za registraciju Java Servleta u Jakarta EE - jedan pomoću a web.xml datoteku, a drugi pomoću bilješki. Tada ćemo registrirati servlete u Spring Boot-u koristeći XML konfiguraciju, Java konfiguraciju i kroz konfigurabilna svojstva.

Sjajan uvodni članak o servletima možete pronaći ovdje.

2. Registriranje servleta u Jakarti EE

Idemo na dva načina za registraciju servleta u Jakarti EE. Prvo, možemo registrirati servlet putem web.xml. Alternativno, možemo koristiti Jakarta EE @WebServlet bilješka.

2.1. Preko web.xml

Najčešći način registracije servleta u aplikaciji Jakarta EE je dodavanje u svoj web.xml datoteka:

 index.html index.htm index.jsp Primjer com.baeldung.Primjer Primjer / Primjer 

Kao što vidite, to uključuje dva koraka: (1) dodavanje našeg servleta u servlet oznakom, osiguravajući da navedete i izvornu putanju do klase u kojoj se nalazi servlet, i (2) navodeći URL putanju na kojoj će servlet biti izložen u url-uzorak označiti.

Jakarta EE web.xml datoteka se obično nalazi u WebContent / WEB-INF.

2.2. Putem bilješki

Sada registrirajmo naš servlet pomoću @WebServlet napomena na našoj klasi prilagođenog servleta. Ovo eliminira potrebu za preslikavanjima servleta u poslužitelj.xml i registracija servleta u web.xml:

@WebServlet (name = "AnnotationExample", opis = "Primjer servlet Korištenje Primjedbe", urlPatterns = { "/ AnnotationExample"}) public class Primjer proteže HttpServlet {@Override zaštićena void doGet (HttpServletRequest zahtjev, HttpServletResponse odgovora) baca ServletException, IOException { response.setContentType ("text / html"); PrintWriter out = response.getWriter (); out.println ("

Pozdrav svijete!

"); } }

Gornji kod pokazuje kako dodati tu napomenu izravno u servlet. Servlet će i dalje biti dostupan na istoj putanji URL-a kao i prije.

3. Registriranje servleta u Spring Boot

Sad kad smo pokazali kako registrirati servlete u Jakarta EE, pogledajmo nekoliko načina za registraciju servleta u Spring Boot aplikaciji.

3.1. Programska registracija

Spring Boot podržava 100% programsku konfiguraciju web aplikacije.

Prvo ćemo primijeniti WebApplicationInitializer sučelje, a zatim implementirajte WebMvcConfigurer sučelje, koje vam omogućuje nadjačavanje unaprijed zadanih zadanih vrijednosti, umjesto da morate navesti svaku određenu postavku konfiguracije, štedi vam vrijeme i omogućuje rad s nekoliko isprobanih i istinitih postavki.

Pogledajmo uzorak WebApplicationInitializer provedba:

javna klasa WebAppInitializer implementira WebApplicationInitializer {public void onStartup (spremnik ServletContext) baca ServletException {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext (); ctx.register (WebMvcConfigure.class); ctx.setServletContext (spremnik); ServletRegistration.Dynamic servlet = container.addServlet ("depecherExample", novi DispatcherServlet (ctx)); servlet.setLoadOnStartup (1); servlet.addMapping ("/"); }}

Dalje, provedimo WebMvcConfigurer sučelje:

@Configuration javna klasa WebMvcConfigure implementira WebMvcConfigurer {@Bean public ViewResolver getViewResolver () {InternalResourceViewResolver resolver = new InternalResourceViewResolver (); resolver.setPrefix ("/ WEB-INF /"); resolver.setSuffix (". jsp"); povratnik; } @Override public void configureDefaultServletHandling (DefaultServletHandlerConfigurer configurer) {configurer.enable (); } @Override public void addResourceHandlers (Registry ResourceHandlerRegistry) {registry.addResourceHandler ("/ resources / **") .addResourceLocations ("/ resources /"). SetCachePeriod (3600) .resourceChain (true) .addResolver (new)). ; }}

Iznad smo izričito naveli neke zadane postavke za JSP servlete kako bismo ih podržali .jsp pogledi i posluživanje statičkih resursa.

3.2. XML konfiguracija

Dovršen je još jedan način konfiguriranja i registracije servleta unutar Spring Boot-a web.xml:

 dispečer org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/dispatcher.xml 1 dispečer / 

The web.xml koja se koristi za specificiranje konfiguracije u proljeće slična je onoj koja se nalazi u Jakarti EE. Iznad možete vidjeti kako odredujemo još nekoliko parametara putem atributa ispod servlet označiti.

Ovdje koristimo drugi XML za dovršavanje konfiguracije:

Sjetite se svog proljeća web.xml obično će živjeti u src / main / webapp / WEB-INF.

3.3. Kombinirajući XML i programsku registraciju

Pomiješamo pristup XML konfiguracije s Springovom programskom konfiguracijom:

javna praznina onStartup (spremnik ServletContext) baca ServletException {XmlWebApplicationContext xctx = novi XmlWebApplicationContext (); xctx.setConfigLocation ('put puta: /context.xml'); xctx.setServletContext (spremnik); ServletRegistration.Dynamic servlet = container.addServlet ("dispečer", novi DispatcherServlet (ctx)); servlet.setLoadOnStartup (1); servlet.addMapping ("/"); }

Konfigurirajmo i servlet dispečera:

3.4. Registracija od strane Bean-a

Također možemo programski konfigurirati i registrirati naše servlete pomoću a ServletRegistrationBean. U nastavku ćemo to učiniti kako bismo registrirali HttpServlet (koji provodi javax.servlet.Servlet sučelje):

@Bean public ServletRegistrationBean exampleServletBean () {ServletRegistrationBean bean = new ServletRegistrationBean (new CustomServlet (), "/ exampleServlet / *"); bean.setLoadOnStartup (1); grah za povratak; }

Glavna prednost ovog pristupa je što vam omogućuje dodavanje višestrukih servleta kao i različitih vrsta servleta u vašu Spring aplikaciju.

Umjesto da se jednostavno koristi DispatcherServlet, što je specifičnija vrsta HttpServlet i najčešća vrsta koja se koristi u WebApplicationInitializer programski pristup konfiguraciji koji smo istražili u odjeljku 3.1, koristit ćemo jednostavniji HttpServlet instanca podklase koja izlaže četiri osnovna HttpRequest operacije kroz četiri funkcije: doGet (), doPost (), doPut (), i doDelete () baš kao u Jakarti EE.

Zapamtite da je HttpServlet apstraktna klasa (tako da se ne može instancirati). Ipak, lako možemo prilagoditi prilagođeno proširenje:

javna klasa CustomServlet proširuje HttpServlet {...}

4. Registriranje servleta sa svojstvima

Drugi, iako neobičan način konfiguriranja i registracije vaših servleta je upotreba datoteke prilagođenih svojstava koja se u aplikaciju učitava putem PropertyLoader, PropertySource, ili PropertySources objekt instance.

To pruža srednju vrstu konfiguracije i mogućnost drugačijeg prilagođavanja primjena.svojstva koji pružaju malo izravne konfiguracije za ne ugrađene servlete.

4.1. Pristup svojstvima sustava

U naše možemo dodati neke prilagođene postavke primjena.svojstva datoteku ili drugu datoteku svojstava. Dodajmo nekoliko postavki za konfiguriranje našeg DispatcherServlet:

servlet.name = depešaExample servlet.mapping = / depešaExampleURL

Učitajmo svoja prilagođena svojstva u našu aplikaciju:

System.setProperty ("custom.config.location", "classpath: custom.properties");

A tim svojstvima sada možemo pristupiti putem:

System.getProperty ("custom.config.location");

4.2. Pristup prilagođenim svojstvima

Počnimo s a običaj.svojstva datoteka:

servlet.name = depešaExample servlet.mapping = / depešaExampleURL

Tada možemo koristiti pokretački program za učitavanje svojstava:

javna svojstva getProperties (datoteka niza) baca IOException {Svojstva prop = nova svojstva (); InputStream input = null; input = getClass (). getResourceAsStream (datoteka); prop.load (ulaz); if (input! = null) {input.close (); } povratni oslonac; }

A sada ta prilagođena svojstva možemo dodati kao konstante u naše WebApplicationInitializer provedba:

privatni statički konačni PropertyLoader pl = novi PropertyLoader (); privatna statička konačna svojstva springProps = pl.getProperties ("custom_spring.properties"); javni statički završni niz SERVLET_NAME = springProps.getProperty ("servlet.name"); javni statički završni niz SERVLET_MAPPING = springProps.getProperty ("servlet.mapping");

Zatim ih možemo koristiti za, na primjer, konfiguriranje našeg servleta za dispečere:

ServletRegistration.Dynamic servlet = container.addServlet (SERVLET_NAME, novi DispatcherServlet (ctx)); servlet.setLoadOnStartup (1); servlet.addMapping (SERVLET_MAPPING);

Prednost ovog pristupa je odsustvo .xml održavanje, ali s lako modificiranim konfiguracijskim postavkama koje ne zahtijevaju preraspodjelu baze koda.

4.3. The PropertySource Pristup

Brži način da se postigne gore navedeno je korištenje Spring-a PropertySource što omogućuje pristup i učitavanje konfiguracijske datoteke.

PropertyResolver je sučelje koje implementira Podesivo okruženje, što svojstva aplikacije čini dostupnima pri pokretanju i inicijalizaciji servleta:

@Configuration @PropertySource ("classpath: /com/yourapp/custom.properties") javna klasa ExampleCustomConfig {@Autowired ConfigurableEnvironment env; javni String getProperty (ključ niza) {return env.getProperty (ključ); }}

Iznad, automatski povezujemo ovisnost u klasu i određujemo mjesto naše datoteke prilagođenih svojstava. Tada možemo dohvatiti svoje istaknuto svojstvo pozivanjem funkcije getProperty () prelazeći u vrijednost String.

4.4. Programski pristup PropertySource

Gornji pristup (koji uključuje dohvaćanje vrijednosti svojstava) možemo kombinirati s pristupom u nastavku (koji nam omogućuje programsko određivanje tih vrijednosti):

ConfigurableEnvironment env = novi StandardEnvironment (); MutablePropertySources rekviziti = env.getPropertySources (); Karta karte = novi HashMap (); map.put ("ključ", "vrijednost"); props.addFirst (novi MapPropertySource ("Map", karta));

Izradili smo kartu koja povezuje ključ s vrijednošću, a zatim je dodajte na PropertySources omogućujući pozivanje prema potrebi.

5. Registriranje ugrađenih servleta

Na kraju ćemo pogledati i osnovnu konfiguraciju i registraciju ugrađenih servleta u Spring Boot.

Ugrađeni servlet pruža cjelovitu funkcionalnost web spremnika (Tomcat, Jetty, itd.) Bez potrebe za zasebnom instalacijom ili održavanjem web spremnika.

Možete dodati potrebne ovisnosti i konfiguraciju za jednostavno postavljanje poslužitelja uživo gdje god je takva funkcionalnost podržana bezbolno, kompaktno i brzo.

Pogledat ćemo samo kako to učiniti Tomcat, ali isti pristup može se poduzeti za Jetty i alternative.

Navedimo ovisnost za ugrađeni web-spremnik Tomcat 8 u pom.xml:

 org.apache.tomcat.embed tomcat-embed-core 8.5.11 

Sad dodajmo oznake potrebne za uspješno dodavanje Tomcata u .rat proizveo Maven u vrijeme izrade:

 embeddedTomcatExample org.codehaus.mojo appassembler-maven-plugin 2.0.0 ciljno pokretanje.Glavni paket webapp sastaviti 

Ako koristite Spring Boot, umjesto toga možete dodati Spring's spring-boot-starter-tomcat ovisnost o vašem pom.xml:

 osiguran org.springframework.boot spring-boot-starter-tomcat 

5.1. Registracija putem nekretnina

Spring Boot podržava konfiguriranje većine mogućih postavki Springa putem primjena.svojstva. Nakon što dodate potrebne ugrađene ovisnosti servleta u svoj pom.xml, možete prilagoditi i konfigurirati svoj ugrađeni servlet koristeći nekoliko takvih opcija konfiguracije:

server.jsp-servlet.class-name = org.apache.jasper.servlet.JspServlet server.jsp-servlet.registered = true server.port = 8080 server.servlet-path = /

Iznad su neke od postavki aplikacije koje se mogu koristiti za konfiguriranje DispatcherServlet i statičko dijeljenje resursa. Dostupne su i postavke za ugrađene servlete, SSL podršku i sesije.

Ovdje je doista previše konfiguracijskih parametara da biste ih ovdje mogli navesti, ali cijeli popis možete vidjeti u dokumentaciji Spring Boot.

5.2. Konfiguracija putem YAML-a

Slično tome, možemo konfigurirati svoj ugrađeni spremnik servleta pomoću YAML-a. To zahtijeva upotrebu specijaliziranog učitavača svojstava YAML - YamlPropertySourceLoader - koji izlaže naš YAML i čini ključeve i vrijednosti u njemu dostupnim za upotrebu u našoj aplikaciji.

YamlPropertySourceLoader sourceLoader = novi YamlPropertySourceLoader (); PropertySource yamlProps = sourceLoader.load ("yamlProps", resurs, null);

5.3. Programska konfiguracija putem TomcatEmbeddedServletContainerFactory

Programska konfiguracija ugrađenog spremnika servleta moguća je putem subklasirane instance EmbeddedServletContainerFactory. Na primjer, možete koristiti TomcatEmbeddedServletContainerFactory za konfiguriranje vašeg ugrađenog Tomcat servleta.

The TomcatEmbeddedServletContainerFactory obavija org.apache.catalina.startup.Tomcat objekt koji pruža dodatne mogućnosti konfiguracije:

@Bean public ConfigurableServletWebServerFactory servletContainer () {TomcatServletWebServerFactory tomcatContainerFactory = novo TomcatServletWebServerFactory (); povratak tomcatContainerFactory; }

Tada možemo konfigurirati vraćenu instancu:

tomcatContainerFactory.setPort (9000); tomcatContainerFactory.setContextPath ("/ springboottomcatexample");

Svaka od tih određenih postavki može se konfigurirati bilo kojom od prethodno opisanih metoda.

Također možemo izravno pristupiti i manipulirati org.apache.catalina.startup.Tomcat objekt:

Tomcat tomcat = novi Tomcat (); tomcat.setPort (luka); tomcat.setContextPath ("/ springboottomcatexample"); tomcat.start ();

6. Zaključak

U ovom smo članku pregledali nekoliko načina za registrirajte Servlet u aplikaciji Jakarta EE i Spring Boot.

Izvorni kod korišten u ovom vodiču dostupan je u projektu Github.


$config[zx-auto] not found$config[zx-overlay] not found