編譯軟件:IntelliJ IDEA 2019.2.4 x64
操作系統(tǒng):win10 x64 位 家庭版
服務(wù)器軟件:apache-tomcat-8.5.27
一. Servlet、Filter、Listener的注解方式是什么?
Servlet、Filter和Listener都支持使用注解的方式進(jìn)行配置:
-
Servlet
:常用的注解是@WebServlet,可以在Servlet類上添加該注解并指定Servlet的url-pattern等屬性來(lái)配置Servlet。 -
Filter
:常用的注解是@WebFilter,可以在Filter類上添加該注解并指定要過(guò)濾的url-pattern等屬性來(lái)配置Filter。 -
Listener
:常用的注解是@WebListener,可以在Listener類上添加該注解來(lái)聲明一個(gè)Listener。
二. 為什么要使用Servlet、Filter、Listener的注解方式?
主要原因:
替代原來(lái)配置文件web.xml的寫(xiě)法
使用注解的好處:
- 使開(kāi)發(fā)更加方便和快速,相比于傳統(tǒng)的在web.xml中配置相關(guān)節(jié)點(diǎn),使用注解的方式可以將配置信息直接寫(xiě)在對(duì)應(yīng)的類上,降低了配置的復(fù)雜性,也不用手動(dòng)添加大量的xml節(jié)點(diǎn),減少了出錯(cuò)的可能性
- 可以提高代碼的可讀性和可維護(hù)性,注解可以直接放在代碼中,對(duì)于開(kāi)發(fā)團(tuán)隊(duì)來(lái)說(shuō)更容易理解,而且當(dāng)應(yīng)用有變化時(shí),只需要修改對(duì)應(yīng)的代碼就可以了,無(wú)需再去尋找web.xml文件并修改其中的配置
三. 如何使用Servlet、Filter、Listener的注解方式?
3.1 Servlet的注解方式
3.1.1 常用用法
位置:
在Servlet實(shí)現(xiàn)類的上方寫(xiě)注解
語(yǔ)法:
//設(shè)置當(dāng)前Servlet的名稱為HelloServlet,訪問(wèn)其路徑為/hello
@WebServlet(name="HelloServlet",value="/hello")
name
:相當(dāng)于配置文件的servlet-name的值value
:相當(dāng)于配置文件的url-pattern
可以簡(jiǎn)寫(xiě):
name可以省略,如果只剩下value屬性,屬性名可以省略,如 @Webservlet(“/hello”)
注意:
value屬性和urlPatterns屬性都可以用來(lái)指定Servlet能夠處理的請(qǐng)求路徑。
如果同時(shí)指定了兩個(gè)屬性,則以u(píng)rlPatterns屬性的值為準(zhǔn)。
例如@WebServlet(name=“HelloServlet”,value=“/hello”,urlPatterns =‘’/first"),最終以/first作為訪問(wèn)路徑**
3.1.2 案例
案例:使用Servlet的注解代替原來(lái)的web.xml映射Servlet,演示其效果
代碼示例如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-428531.html
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//設(shè)置HelloServlet的訪問(wèn)路徑 :/hello
@WebServlet(name = "HelloServlet",value = "/hello")
public class HelloServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("訪問(wèn)了HelloServlet.......");
}
}
3.2 Filter的注解方式
3.2.1 常用用法
位置:
在Filter實(shí)現(xiàn)類的上方寫(xiě)注解
語(yǔ)法:
//聲明一個(gè)Filter,指定該Filter名為HelloFilter,指定了該Filter處理請(qǐng)求的url-pattern為"/hello"
@WebFilter(filterName="HelloFilter",urlPatterns="/hello")
filterName
:相當(dāng)于web.xml中的filter-name標(biāo)簽的值urlPatterns
:相當(dāng)于web.xml中的url-pattern標(biāo)簽的值
注意:
value屬性和urlPatterns屬性都可以用來(lái)指定Servlet能夠處理的請(qǐng)求路徑。
如果同時(shí)指定了兩個(gè)屬性,則以u(píng)rlPatterns屬性的值為準(zhǔn)。
3.2.2 案例
案例:使用F1lter注解代替原來(lái)的web.xml映射的形式設(shè)置HelloFilter的過(guò)濾路徑,演示其效果
代碼示例如下:
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//設(shè)置HelloFilter的過(guò)濾路徑:/hello
@WebFilter(filterName="HelloFilter",urlPatterns="/hello")
public class HelloFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("HelloFilter放行前的代碼...");
filterChain.doFilter(servletRequest,servletResponse);//放行請(qǐng)求
System.out.println("HelloFilter放行后的代碼...");
}
@Override
public void destroy() {
}
}
3.3 Listener的注解方式
3.3.1 常用用法
位置:
在 Listener實(shí)現(xiàn)類的上方寫(xiě)注解
語(yǔ)法:
@WebListener
ps:
此注解方式一般不用寫(xiě)屬性值,且它默認(rèn)只有一個(gè)屬性value(默認(rèn)屬性值為空字符串)
3.3.2 案例
案例:使用Listener的注解代替原來(lái)的web.xml注冊(cè)監(jiān)聽(tīng)器的形式,演示其效果
代碼示例如下:
@WebListener
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext對(duì)象創(chuàng)建后執(zhí)行");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext對(duì)象銷毀后執(zhí)行");
}
}
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-428531.html
到了這里,關(guān)于告別web.xml映射Servlet、Filter、Listener,解鎖注解新方式開(kāi)發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!