Vodič za Java EE bilješke povezane s webom

1. Pregled

Java EE napomene olakšavaju život programera omogućavajući im da odrede kako bi se komponente aplikacije trebale ponašati u spremniku. To su moderne alternative za XML deskriptore i u osnovi omogućuju izbjegavanje koda.

U ovom ćemo se članku usredotočiti na napomene predstavljene sa Servlet API 3.1 u programu Java EE 7. Ispitat ćemo njihovu svrhu i proučiti njihovu upotrebu.

2. Web bilješke

Servlet API 3.1 predstavio je novi skup tipova bilješki koji se mogu koristiti u Servlet klase:

  • @WebServlet
  • @WebInitParam
  • @WebFilter
  • @WebListener
  • @ServletSecurity
  • @HttpConstraint
  • @HttpMethodConstraint
  • @MultipartConfig

Detaljno ćemo ih ispitati u sljedećim odjeljcima.

3. @WebServlet

Jednostavno rečeno, ova nam napomena omogućuje deklariranje Java klasa kao servleta:

@WebServlet ("/ account") javna klasa AccountServlet proširuje javax.servlet.http.HttpServlet {javni void doGet (HttpServletRequest zahtjev, HttpServletResponse odgovor) baca IOException {// ...} public void doPostlet (HttpServServServServ) IOException {// ...}}

3.1. Korištenje atributa @WebServlet Bilješka

@WebServlet ima skup atributa koji nam omogućuju prilagodbu servleta:

  • Ime
  • opis
  • urlPatterns
  • initParams

Možemo ih koristiti kao što je prikazano u primjeru u nastavku:

@WebServlet (name = "BankAccountServlet", description = "Predstavlja bankovni račun i njegove transakcije", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " štednja ")}) javna klasa AccountServlet proširuje javax.servlet.http.HttpServlet {String accountType = null; javna void init (ServletConfig config) baca ServletException {// ...} javna void doGet (HttpServletRequest zahtjev, HttpServletResponse odgovor) baca IOException {// ...} javna void doPost (HttpServletRequest zahtjev, HttpSnsexvErception {HttpServceResportException ...}}

The Ime atribut nadjačava zadani naziv servleta koji je prema zadanim postavkama potpuno kvalificirani naziv klase. Ako želimo pružiti opis onoga što servlet radi, možemo koristiti opis atribut.

The urlPatterns atribut koristi se za specificiranje URL-ova na kojima je servlet dostupan (ovom vrijednosti se mogu dati više vrijednosti kao što je prikazano u primjeru koda).

4. @WebInitParam

Ova se napomena koristi s initParams atribut @WebServlet napomena i parametri inicijalizacije servleta.

U ovom primjeru postavljamo parametar inicijalizacije servleta tip, na vrijednost "uštede":

@WebServlet (name = "BankAccountServlet", description = "Predstavlja bankovni račun i njegove transakcije", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " štednja ")}) javna klasa AccountServlet proširuje javax.servlet.http.HttpServlet {String accountType = null; javna void init (ServletConfig config) baca ServletException {accountType = config.getInitParameter ("type"); } javna void doPost (zahtjev HttpServletRequest, odgovor HttpServletResponse) baca IOException {// ...}}

5. @WebFilter

Ako želimo izmijeniti zahtjev i odgovor servleta ne dotičući se njegove interne logike, možemo koristiti WebFilter bilješka. Filtre možemo povezati sa servletom ili s grupom servleta i statičkim sadržajem određivanjem uzorka URL-a.

U donjem primjeru koristimo @WebFilter napomena za preusmjeravanje neovlaštenog pristupa stranici za prijavu:

@WebFilter (urlPatterns = "/ account / *", filterName = "LoggingFilter", description = "Filtriraj sve URL-ove transakcija računa") javna klasa LogInFilter implementira javax.servlet.Filter {public void init (FilterConfig filterConfig) baca ServletException {} public void doFilter (zahtjev ServletRequest, odgovor ServletResponse, lanac FilterChain) baca IOException, ServletException {HttpServletRequest req = (HttpServletRequest) zahtjev; HttpServletResponse res = (HttpServletResponse) odgovor; res.sendRedirect (req.getContextPath () + "/login.jsp"); chain.doFilter (zahtjev, odgovor); } javna prazna uništiti () {}}

6. @WebListener

Ako želimo znanje ili kontrolu nad tim kako i kada se servlet i njegovi zahtjevi inicijaliziraju ili mijenjaju, možemo koristiti @WebListener bilješka.

Da bismo napisali web slušatelja, moramo proširiti jedno ili više sljedećih sučelja:

  • ServletContextListener - za obavijesti o ServletContext životni ciklus
  • ServletContextAttributeListener - za obavijesti kada a ServletContext atribut se mijenja
  • ServletRequestListener - za obavijesti kad god se podnese zahtjev za resursom
  • ServletRequestAttributeListener - za obavijesti kada se atribut doda, ukloni ili promijeni u a ServletRequest
  • HttpSessionListener - za obavijesti o stvaranju i uništavanju nove sesije
  • HttpSessionAttributeListener - za obavijesti kada se novi atribut dodaje ili uklanja iz sesije

Ispod je primjer kako možemo koristiti a ServletContextListener za konfiguriranje web aplikacije:

@WebListener javna klasa BankAppServletContextListener implementira ServletContextListener {public void contextInitialized (ServletContextEvent sce) {sce.getServletContext (). SetAttribute ("ATTR_DEFAULT_LANGUAGE", "engleski"); } javni void contextDestroyed (ServletContextEvent sce) {// ...}}

7. @ServletSecurity

Kad želimo odrediti sigurnosni model za naš servlet, uključujući uloge, zahtjeve za kontrolu pristupa i provjere autentičnosti, koristimo napomenu @ServletSecurity.

U ovom ćemo primjeru ograničiti pristup našem AccountServlet koristiti @ServletSecurity napomena:

@WebServlet (name = "BankAccountServlet", description = "Predstavlja bankovni račun i njegove transakcije", urlPatterns = {"/ account", "/ bankAccount"}, initParams = {@WebInitParam (name = "type", value = " ušteda ")}) @ServletSecurity (value = @HttpConstraint (roleAllowed = {" Member "}), httpMethodConstraints = {@HttpMethodConstraint (value =" POST ", roleAllowed = {" Admin "})}) javna klasa AccountServlet proširuje javax. servlet.http.HttpServlet {String accountType = null; javna void init (ServletConfig config) baca ServletException {// ...} javna void doGet (HttpServletRequest zahtjev, HttpServletResponse odgovor) baca IOException {// ...} javna void doPost (HttpServletRequest zahtjev, HttpSnsexvErcevncerStvErcevncerStvErcevncerStrvErcevncerStrvErcevSrvtrErcevncerStrvvErcetvErcetcence = 1000d; Niz paramDepositAmt = request.getParameter ("dep"); dvostruki depozitAmt = Double.parseDouble (paramDepositAmt); accountBalance = accountBalance + depositAmt; Writer za PrintWriter = response.getWriter (); writer.println ("Stanje računa" + accountType + "je:" + accountBalance + ""); Writer.flush (); }}

U ovom slučaju, prilikom pozivanja datoteke AccountServlet, preglednik iskače zaslon za prijavu kako bi korisnik mogao unijeti važeće korisničko ime i lozinku.

Možemo koristiti @HttpConstraint i @HttpMethodConstraint napomene za specificiranje vrijednosti za atribute vrijednost i httpMethodConstraints, od @ServletSecurity bilješka.

@HttpConstraint napomena odnosi se na sve HTTP metode. Drugim riječima, određuje zadano sigurnosno ograničenje.

@HttpConstraint ima tri atributa:

  • vrijednost
  • ulogeDopušteno
  • transportGarancija

Od ovih atributa, najčešće korišteni atribut je ulogeDopušteno. U gornjem primjeru isječka koda, korisnici koji pripadaju ulozi Član smiju pozivati ​​sve HTTP metode.

@HttpMethodConstraint napomena nam omogućuje da odredimo sigurnosna ograničenja određene HTTP metode.

@HttpMethodConstraint ima sljedeće atribute:

  • vrijednost
  • emptyRoleSemantic
  • ulogeDopušteno
  • transportGarancija

U gornjem primjeru isječka koda pokazuje kako doPost metoda ograničena je samo na korisnike koji pripadaju Admin ulogu, dopuštajući da funkciju pologa obavlja samo an Admin korisnik.

8. @MultipartConfig

Ova se napomena koristi kada moramo označiti servlet kojim ćemo rukovati višedijelni / obrasci-podaci zahtjeva (obično se koristi za servlet za prijenos datoteka).

Ovo će razotkriti getParts () i getPart (ime) metode HttpServletRequest može se koristiti za pristup svim dijelovima kao i pojedinačnom dijelu.

Učitana datoteka može se zapisati na disk pozivom na pisanje (fileName) objekta Part.

Sada ćemo pogledati primjer servleta UploadCustomerDocumentsServlet što pokazuje njegovu upotrebu:

@WebServlet (urlPatterns = {"/ uploadCustDocs"}) @MultipartConfig (fileSizeThreshold = 1024 * 1024 * 20, maxFileSize = 1024 * 1024 * 20, maxRequestSize = 1024 * 1024 * 25, location = "./custDocs "D) public class UploadCustomervD produžuje HttpServlet {zaštićen void doPost (zahtjev HttpServletRequest, odgovor HttpServletResponse) baca ServletException, IOException {for (Dio dio: request.getParts ()) {part.write ("myFile"); }}}

@MultipartConfig ima četiri atributa:

  • fileSizeThreshold - Ovo je prag veličine prilikom privremenog spremanja učitane datoteke. Ako je veličina učitane datoteke veća od ovog praga, pohranit će se na disk. Inače, datoteka se pohranjuje u memoriju (veličina u bajtovima)
  • maxFileSize - Ovo je maksimalna veličina prenesene datoteke (veličina u bajtovima)
  • maxRequestSize - Ovo je najveća veličina zahtjeva, uključujući prenesene datoteke i druge podatke obrasca (veličina u bajtovima)
  • mjesto - To je direktorij u kojem se pohranjuju prenesene datoteke

9. Zaključak

U ovom smo članku pogledali neke Java EE napomene predstavljene sa Servlet API 3.1 i njihovu svrhu i njihovu upotrebu.

Izvorni kod povezan s ovim člankom možete pronaći na GitHubu.


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