Ako zaregistrovať servlet v Jave

1. Úvod

Tento článok poskytne prehľad toho, ako zaregistrovať servlet v rámci Jakarty EE a Spring Boot. Konkrétne sa pozrieme na dva spôsoby registrácie Java Servletu v Jakarte EE - jeden pomocou a web.xml súbor a druhý pomocou anotácií. Potom zaregistrujeme servlety v Spring Boot pomocou konfigurácie XML, konfigurácie Java a prostredníctvom konfigurovateľných vlastností.

Skvelý úvodný článok o servletoch nájdete tu.

2. Registrácia servletov v Jakarte EE

Prejdime si dva spôsoby registrácie servletu v Jakarte EE. Najskôr môžeme zaregistrovať servlet prostredníctvom web.xml. Prípadne môžeme použiť Jakarta EE @WebServlet anotácia.

2.1. Cez web.xml

Najbežnejším spôsobom registrácie servletu v rámci vašej aplikácie Jakarta EE je jeho pridanie do vašej web.xml spis:

 index.html index.htm index.jsp Príklad com.baeldung. Príklad príklad / príklad 

Ako vidíte, zahŕňa to dva kroky: (1) pridanie nášho servletu do servera servlet značka, nezabudnite tiež určiť zdrojovú cestu k triede, v ktorej sa servlet nachádza, a (2) špecifikovať cestu URL, na ktorej bude servlet vystavený v vzor adresy URL značka.

Jakarta EE web.xml súbor sa zvyčajne nachádza v Webový obsah / WEB-INF.

2.2. Prostredníctvom anotácií

Teraz zaregistrujme náš servlet pomocou @WebServlet anotácia k našej vlastnej triede servletov. To vylučuje potrebu mapovania servletov v serveri server.xml a registrácia servletu v web.xml:

@WebServlet (name = "AnnotationExample", description = "Príklad servletu používajúci anotácie", urlPatterns = {"/ AnnotationExample"}) verejná trieda Príklad rozširuje HttpServlet {@Override chránený void doGet (požiadavka HttpServletRequest, HttpServletResponseception odpoveď, odpoveď I) response.setContentType ("text / html"); PrintWriter out = response.getWriter (); out.println ("

Ahoj Svet!

"); } }

Vyššie uvedený kód ukazuje, ako pridať túto anotáciu priamo do servletu. Servlet bude stále k dispozícii na rovnakej ceste URL ako predtým.

3. Registrácia servletov v Spring Boot

Teraz, keď sme si ukázali, ako registrovať servlety v Jakarte EE, poďme sa pozrieť na niekoľko spôsobov registrácie servletov v aplikácii Spring Boot.

3.1. Programová registrácia

Spring Boot podporuje 100% programovú konfiguráciu webovej aplikácie.

Najskôr implementujeme WebApplicationInitializer rozhranie, potom implementujte WebMvcConfigurer rozhranie, ktoré vám umožňuje prepísať predvolené predvolené hodnoty namiesto toho, aby ste museli špecifikovať každé konkrétne konfiguračné nastavenie, čo vám ušetrí čas a umožní vám pracovať s niekoľkými vyskúšanými a skutočnými nastaveniami priamo z krabice.

Pozrime sa na ukážku WebApplicationInitializer implementácia:

public class WebAppInitializer implementuje WebApplicationInitializer {public void onStartup (ServletContext container) hodí ServletException {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext (); ctx.register (WebMvcConfigure.class); ctx.setServletContext (kontajner); ServletRegistration.Dynamic servlet = container.addServlet ("dispatcherExample", nový DispatcherServlet (ctx)); servlet.setLoadOnStartup (1); servlet.addMapping ("/"); }}

Ďalej poďme implementovať WebMvcConfigurer rozhranie:

@Configuration verejná trieda WebMvcConfigure implementuje WebMvcConfigurer {@Bean public ViewResolver getViewResolver () {InternalResourceViewResolver resolver = nový InternalResourceViewResolver (); resolver.setPrefix ("/ WEB-INF /"); resolver.setSuffix (". jsp"); spätný rezolver; } @Override public void configureDefaultServletHandling (konfigurátor DefaultServletHandlerConfigurer) {configurer.enable (); } @Override public void addResourceHandlers (register ResourceHandlerRegistry) {registry.addResourceHandler ("/ resources / **") .addResourceLocations ("/ resources /"). SetCachePeriod (3600) .resourceChain (true) .addResolver (nový PathResourceR) ; }}

Vyššie uvádzame niektoré z predvolených nastavení pre servlety JSP výslovne s cieľom podpory .jsp zobrazenia a poskytovanie statických zdrojov.

3.2. Konfigurácia XML

Ďalším spôsobom konfigurácie a registrácie servletov v rámci Spring Boot je použitie web.xml:

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

The web.xml použitá na zadanie konfigurácie na jar je podobná tej, ktorá sa nachádza v Jakarte EE. Vyššie vidíte, ako špecifikujeme niekoľko ďalších parametrov pomocou atribútov pod servlet značka.

Tu používame na dokončenie konfigurácie ďalšie XML:

Pamätajte, že vaša jar web.xml bude obvykle bývať v src / main / webapp / WEB-INF.

3.3. Kombinácia XML a programovej registrácie

Poďme zmiešať prístup konfigurácie XML s programovou konfiguráciou Spring:

public void onStartup (ServletContext container) hodí ServletException {XmlWebApplicationContext xctx = nový XmlWebApplicationContext (); xctx.setConfigLocation ('classpath: /context.xml'); xctx.setServletContext (kontajner); ServletRegistration.Dynamic servlet = container.addServlet ("dispečer", nový DispatcherServlet (ctx)); servlet.setLoadOnStartup (1); servlet.addMapping ("/"); }

Nakonfigurujme tiež servlet dispečera:

3.4. Registrácia spoločnosťou Bean

Môžeme tiež programovo nakonfigurovať a zaregistrovať naše servlety pomocou a ServletRegistrationBean. Ďalej to urobíme, aby sme si mohli zaregistrovať HttpServlet (ktorým sa vykonáva javax.servlet.Servlet rozhranie):

@Bean public ServletRegistrationBean exampleServletBean () {ServletRegistrationBean bean = nový ServletRegistrationBean (nový CustomServlet (), "/ exampleServlet / *"); bean.setLoadOnStartup (1); spätná fazuľa; }

Hlavnou výhodou tohto prístupu je, že vám umožňuje pridať do svojej jarnej aplikácie viac servletov, ako aj rôzne druhy servletov.

Namiesto jednoduchého použitia a DispečerServlet, čo je konkrétnejší druh HttpServlet a najbežnejší druh používaný v WebApplicationInitializer programový prístup ku konfigurácii, ktorý sme preskúmali v časti 3.1, použijeme jednoduchší HttpServlet inštancia podtriedy, ktorá vystavuje štyri základné HttpRequest operácie prostredníctvom štyroch funkcií: doGet (), doPost (), doPut ()a doDelete () presne ako v Jakarte EE.

Pamätajte, že HttpServlet je abstraktná trieda (takže ju nemožno vytvoriť inštanciou). Vlastné rozšírenie môžeme ľahko vybičovať, aj keď:

verejná trieda CustomServlet rozširuje HttpServlet {...}

4. Registrácia servletov s vlastnosťami

Ďalším, aj keď nezvyčajným, spôsobom konfigurácie a registrácie vašich servletov je použitie súboru vlastných vlastností načítaného do aplikácie pomocou súboru PropertyLoader, PropertySource, alebo Zdroje majetku inštančný objekt.

To poskytuje prechodný druh konfigurácie a schopnosť inak sa prispôsobovať application.properties ktoré poskytujú malú priamu konfiguráciu pre nevložené servlety.

4.1. Prístup k vlastnostiam systému

Do našej môžeme pridať niekoľko vlastných nastavení application.properties súbor alebo iný súbor vlastností. Pridajme niekoľko nastavení pre konfiguráciu našich DispatcherServlet:

servlet.name = dispatcherExample servlet.mapping = / dispatcherExampleURL

Načítajme naše vlastné vlastnosti do našej aplikácie:

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

A teraz k týmto vlastnostiam môžeme pristupovať prostredníctvom:

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

4.2. Prístup vlastných vlastností

Začnime písmenom a zvyk.vlastnosti spis:

servlet.name = dispatcherExample servlet.mapping = / dispatcherExampleURL

Potom môžeme použiť hromadný načítač vlastností:

verejné vlastnosti getProperties (reťazcový súbor) vyvolá IOException {vlastnosti prop = nové vlastnosti (); InputStream vstup = null; vstup = getClass (). getResourceAsStream (súbor); prop. zaťaženie (vstup); if (input! = null) {input.close (); } vratná podpera; }

A teraz môžeme tieto vlastné vlastnosti pridať ako konštanty k našim WebApplicationInitializer implementácia:

private static final PropertyLoader pl = nový PropertyLoader (); súkromné ​​statické konečné vlastnosti springProps = pl.getProperties ("custom_spring.properties"); verejný statický konečný reťazec SERVLET_NAME = springProps.getProperty ("servlet.name"); public static final String SERVLET_MAPPING = springProps.getProperty ("servlet.mapping");

Potom ich môžeme použiť napríklad na konfiguráciu nášho servletu dispečera:

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

Výhodou tohto prístupu je absencia .xml údržba, ale s ľahko upraviteľnými konfiguračnými nastaveniami, ktoré nevyžadujú opätovné nasadenie kódovej základne.

4.3. The PropertySource Prístup

Rýchlejším spôsobom, ako dosiahnuť vyššie uvedené, je využiť Spring PropertySource ktorý umožňuje prístup a načítanie konfiguračného súboru.

PropertyResolver je rozhranie implementované Konfigurovateľné prostredie, ktorý sprístupňuje vlastnosti aplikácie pri spustení a inicializácii servletu:

@Configuration @PropertySource ("classpath: /com/yourapp/custom.properties") verejná trieda ExampleCustomConfig {@Autowired ConfigurableEnvironment env; public String getProperty (reťazcový kľúč) {return env.getProperty (kľúč); }}

Hore autowire závislosť do triedy a určiť umiestnenie nášho súboru vlastných vlastností. Potom môžeme načítať našu najvýraznejšiu vlastnosť volaním funkcie getProperty () odovzdanie hodnoty String.

4.4. Programový prístup PropertySource

Vyššie uvedený prístup (ktorý zahŕňa načítanie hodnôt vlastností) môžeme kombinovať s nižšie uvedeným prístupom (ktorý nám umožňuje tieto hodnoty programovo určiť):

ConfigurableEnvironment env = nový StandardEnvironment (); MutablePropertySources props = env.getPropertySources (); Mapová mapa = nová HashMap (); map.put ("kľúč", "hodnota"); props.addFirst (nový MapPropertySource ("Mapa", mapa));

Vytvorili sme mapu spájajúcu kľúč s hodnotou a potom ju pridajte k Zdroje majetku povolenie vyvolania podľa potreby.

5. Registrácia vložených servletov

Na záver sa tiež pozrieme na základnú konfiguráciu a registráciu vložených servletov v rámci Spring Boot.

Vložený servlet poskytuje funkčnosť celého webového kontajnera (Tomcat, Jetty atď.) Bez toho, aby ste museli webový kontajner inštalovať alebo udržiavať osobitne..

Môžete pridať požadované závislosti a konfiguráciu pre jednoduché nasadenie živého servera všade tam, kde je takáto funkcia podporovaná bezbolestne, kompaktne a rýchlo.

Pozrieme sa iba na to, ako to urobiť Tomcat, ale rovnaký prístup je možné uplatniť aj na mólo a alternatívy.

Zadajme závislosť pre vložený webový kontajner Tomcat 8 v pom.xml:

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

Teraz pridajme značky potrebné na úspešné pridanie Tomcatu do .vojna vyrobené spoločnosťou Maven v čase zostavenia:

 embeddedTomcatExample org.codehaus.mojo appassembler-maven-plugin 2.0.0 spustenie cieľa. Zostavenie hlavného balíka webapp 

Ak používate Spring Boot, môžete namiesto nich pridať Spring spring-boot-starter-tomcat závislosť na tvojom pom.xml:

 org.springframework.boot poskytnutý spring-boot-starter-tomcat 

5.1. Registrácia cez vlastnosti

Spring Boot podporuje konfiguráciu väčšiny možných nastavení Spring pomocou application.properties. Po pridaní potrebných závislostí vloženého servletu do vášho pom.xml, môžete vložený servlet prispôsobiť a nakonfigurovať pomocou niekoľkých takýchto možností konfigurácie:

server.jsp-servlet.class-name = org.apache.jasper.servlet.JspServlet server.jsp-servlet.registered = skutočný server.port = 8080 server.servlet-path = /

Vyššie sú uvedené niektoré z nastavení aplikácie, ktoré možno použiť na konfiguráciu DispatcherServlet a statické zdieľanie zdrojov. K dispozícii sú tiež nastavenia pre vložené servlety, podporu SSL a relácie.

Tu je skutočne príliš veľa konfiguračných parametrov na zoznam, ale celý zoznam si môžete pozrieť v dokumentácii Spring Boot.

5.2. Konfigurácia cez YAML

Podobne môžeme nakonfigurovať náš vložený kontajner servletu pomocou YAML. To si vyžaduje použitie špecializovaného zavádzača vlastností YAML - YamlPropertySourceLoader - ktorý vystavuje náš YAML a sprístupňuje kľúče a hodnoty v ňom na použitie v našej aplikácii.

YamlPropertySourceLoader sourceLoader = nový YamlPropertySourceLoader (); PropertySource yamlProps = sourceLoader.load ("yamlProps", zdroj, null);

5.3. Programová konfigurácia prostredníctvom TomcatEmbeddedServletContainerFactory

Programová konfigurácia vloženého kontajnera servletu je možná prostredníctvom podtriedy inštancie EmbeddedServletContainerFactory. Môžete napríklad použiť TomcatEmbeddedServletContainerFactory na konfiguráciu vášho vloženého servletu Tomcat.

The TomcatEmbeddedServletContainerFactory zabalí org.apache.catalina.startup.Tomcat objekt poskytujúci ďalšie možnosti konfigurácie:

@Bean public ConfigurableServletWebServerFactory servletContainer () {TomcatServletWebServerFactory tomcatContainerFactory = nový TomcatServletWebServerFactory (); return tomcatContainerFactory; }

Potom môžeme nakonfigurovať vrátenú inštanciu:

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

Každé z týchto konkrétnych nastavení je možné konfigurovať pomocou ktorejkoľvek z vyššie opísaných metód.

Môžeme tiež priamo pristupovať k a manipulovať s nimi org.apache.catalina.startup.Tomcat objekt:

Tomcat tomcat = nový Tomcat (); tomcat.setPort (port); tomcat.setContextPath ("/ springboottomcatexample"); tomcat.start ();

6. Záver

V tomto článku sme preskúmali niekoľko spôsobov, ako zaregistrujte servlet v aplikácii Jakarta EE a Spring Boot.

Zdrojový kód použitý v tejto príručke je k dispozícii v projekte Github.