Servletler - Ek Açıklamalar
Şimdiye kadar, Servlet'in uygulamanızı bir web sunucusuna dağıtmak için dağıtım tanımlayıcısını (web.xml dosyası) nasıl kullandığını öğrendiniz. Servlet API 3.0, javax.servlet.annotation adlı yeni bir paket sunmuştur. Bir servlet sınıfına açıklama eklemek için kullanılabilecek açıklama türleri sağlar. Ek açıklama kullanırsanız, dağıtım tanımlayıcısı (web.xml) gerekli değildir. Ancak tomcat7 veya tomcat'in sonraki herhangi bir sürümünü kullanmalısınız.
Ek açıklamalar, sunucu uygulaması bildirimi ve sunucu uygulaması eşlemesi gibi web dağıtım tanımlayıcı dosyasındaki (web.xml) eşdeğer XML yapılandırmasının yerini alabilir. Servlet kapsayıcıları, açıklamalı sınıfları dağıtım zamanında işler.
Servlet 3.0'da tanıtılan açıklama türleri şunlardır:
Sr.No. | Ek Açıklama ve Açıklama |
---|---|
1 | @WebServlet Bir sunucu uygulaması bildirmek için. |
2 | @WebInitParam Bir başlatma parametresi belirlemek için. |
3 | @WebFilter Bir sunucu uygulaması filtresi bildirmek için. |
4 | @WebListener Bir WebListener bildirmek için |
5 | @HandlesTypes ServletContainerInitializer'ın işleyebileceği sınıf türlerini bildirmek için. |
6 | @HttpConstraint Bu açıklama, ServletSecurity açıklamasında karşılık gelen bir HttpMethodConstraint öğesinin OLMADIĞI tüm HTTP protokol yöntemlerine uygulanacak güvenlik kısıtlamalarını temsil etmek için ServletSecurity açıklamasında kullanılır. |
7 | @HttpMethodConstraint Bu açıklama, belirli HTTP protokol mesajlarındaki güvenlik kısıtlamalarını temsil etmek için ServletSecurity açıklamasında kullanılır. |
8 | @MultipartConfig Servlet sınıfında belirtilebilen, Servlet örneklerinin multipart / form-data MIME tipine uyan talepleri beklediğini belirten açıklama. |
9 | @ServletSecurity Bu açıklama, HTTP protokol mesajlarında bir Servlet konteyneri tarafından uygulanacak güvenlik kısıtlamalarını belirtmek için bir Servlet uygulama sınıfında kullanılır. |
Burada bazı Ek Açıklamaları ayrıntılı olarak tartıştık.
@Hayalhanemersin
@WebServlet, bir konteyner ile bir Servlet yapılandırmasını bildirmek için kullanılır. Aşağıdaki tablo, WebServlet açıklamaları için kullanılan özniteliklerin listesini içerir.
Sr.No. | Öznitelik ve Açıklama |
---|---|
1 | String name Servlet Adı |
2 | String[] value URL kalıpları dizisi |
3 | String[] urlPatterns Bu Filtrenin uygulandığı URL modelleri dizisi |
4 | Int loadOnStartup Tam sayı değeri size başlangıç sıralaması ipucu verir |
5 | WebInitParam[] initParams Bu Servlet için başlatma parametreleri dizisi |
6 | Boolean asyncSupported Bu Servlet tarafından desteklenen zaman uyumsuz işlem |
7 | String smallIcon Varsa, bu Servlet için küçük simge |
8 | String largeIcon Varsa, bu Servlet için büyük simge |
9 | String description Varsa, bu Servlet'in açıklaması |
10 | String displayName Varsa, bu Servlet'in görünen adı |
En az bir URL kalıbı, value veya urlPattern ek açıklamanın özniteliği, ancak ikisi birden değil.
value özniteliğin, ayarlanan tek öznitelik URL kalıbı olduğunda kullanılması önerilir, aksi takdirde urlPattern özellik kullanılmalıdır.
Misal
Aşağıdaki örnek @WebServlet ek açıklamasının nasıl kullanılacağını açıklar. Metni görüntüleyen basit bir servlettir.Hello Servlet.
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value = "/Simple")
public class Simple extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("<h3>Hello Servlet</h3>");
out.print("</body></html>");
}
}
Derleme Simple.java her zamanki gibi ve sınıf dosyanızı <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içine koyun.
Şimdi sadece http: // localhost: 8080 / Simple'ı çalıştırarak herhangi bir sunucu uygulamasını çağırmayı deneyin . Web sayfasında aşağıdaki çıktıyı göreceksiniz.
Hello servlet
@Evleneceksen
@WebInitParam ek açıklaması, bir Servlet veya bir Filtre için bir başlatma parametresi belirtmek için kullanılır. Bir WebFilter veya WebSevlet ek açıklamalarında kullanılır. Aşağıdaki tablo, WebInitParam ek açıklaması için kullanılan özniteliklerin listesini içerir.
Sr.No. | Öznitelik ve Açıklama |
---|---|
1 | String name Başlatma parametresinin adı |
2 | String value Başlatma parametresinin değeri |
3 | String description Başlatma parametresinin açıklaması |
Misal
Aşağıdaki örnek, @WebServlet ek açıklaması ile birlikte @WeInitParam ek açıklamasının nasıl kullanılacağını açıklar. Metni görüntüleyen basit bir servlettir.Hello Servlet ve dize değeri Hello World! hangisinden alınır init parametreleri.
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(value = "/Simple", initParams = {
@WebInitParam(name = "foo", value = "Hello "),
@WebInitParam(name = "bar", value = " World!")
})
public class Simple extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("<h3>Hello Servlet</h3>");
out.println(getInitParameter("foo"));
out.println(getInitParameter("bar"));
out.print("</body></html>");
}
}
Derleme Simple.java her zamanki gibi ve sınıf dosyanızı <Tomcat-installationdirectory>; / webapps / ROOT / WEB-INF / classes.
Şimdi sadece http: // localhost: 8080 / Simple'ı çalıştırarak herhangi bir sunucu uygulamasını çağırmayı deneyin . Web sayfasında aşağıdaki çıktıyı göreceksiniz.
Hello Servlet
Hello World!
@Webfilter
Bu, bir sunucu uygulaması filtresini bildirmek için kullanılan açıklamadır. Dağıtım zamanında konteyner tarafından işlenir ve ilgili filtre belirtilen URL modellerine, sunucu uygulamalarına ve dağıtım programı türlerine uygulanır.
@WebFilteraçıklama, bir web uygulamasındaki bir filtreyi tanımlar. Bu açıklama bir sınıfta belirtilir ve bildirilen filtre hakkında meta verileri içerir. Açıklamalı filtre, en az bir URL modeli belirtmelidir. Aşağıdaki tablo, WebFilter ek açıklaması için kullanılan öznitelikleri listeler.
Sr.No. | Öznitelik ve Açıklama |
---|---|
1 | String filterName Filtrenin adı |
2 | String[] urlPatterns Filtrenin uygulandığı değerler dizisi veya urlPatterns sağlar |
3 | DispatcherType[] dispatcherTypes Filtrenin uygulandığı dağıtıcı türlerini (İstek / Yanıt) belirtir |
4 | String[] servletNames Bir dizi sunucu uygulaması adı sağlar |
5 | String displayName Filtrenin adı |
6 | String description Filtrenin açıklaması |
7 | WebInitParam[] initParams Bu filtre için başlatma parametreleri dizisi |
8 | Boolean asyncSupported Bu filtre tarafından desteklenen zaman uyumsuz işlem |
9 | String smallIcon Varsa, bu filtre için küçük simge |
10 | String largeIcon Varsa, bu filtre için büyük simge |
Misal
Aşağıdaki örnek, @WebFilter ek açıklamasının nasıl kullanılacağını açıklar. Init-param'ın değerini gösteren basit bir LogFiltertest-paramve konsoldaki geçerli zaman damgası. Bu, filtrenin istek ve yanıt arasında bir arayüz katmanı gibi çalıştığı anlamına gelir. Burada urlPattern için "/ *" kullanıyoruz. Bu, bu filtrenin tüm sunucu uygulamaları için geçerli olduğu anlamına gelir.
import java.io.IOException;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.*;
import java.util.*;
// Implements Filter class
@WebFilter(urlPatterns = {"/*"}, initParams = {
@WebInitParam(name = "test-param", value = "Initialization Paramter")})
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// Log the current timestamp.
System.out.println("Time " + new Date().toString());
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ) {
/* Called before the Filter instance is removed
from service by the web container*/
}
}
Derleme Simple.java her zamanki gibi ve sınıf dosyanızı <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içine koyun.
Şimdi sadece http: // localhost: 8080 / Simple'ı çalıştırarak herhangi bir sunucu uygulamasını çağırmayı deneyin . Web sayfasında aşağıdaki çıktıyı göreceksiniz.
Hello Servlet
Hello World!
Şimdi, sunucu uygulaması konsolunu açın. Orada, değerini bulacaksınızinit parametre testparam ve current timestamp servlet bildirim mesajlarıyla birlikte.