注解配置使用
之前我们配置servlet的映射路径的时候是在web.xml文件中实现的,此时如果一个项目有几百个servlet,此时web.xml的配置就会很庞大,非常不方便维护。那么注解配置就出现了,解决了这个问题
注解配置就是在每个servlet之上进行路径的配置
注解配置映射路径
@WebServlet(urlPatterns= {"/emp/*","/dept/*"})
public class EmpServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("使用注解配置的servlet");
}
}
注解配置过滤器(处理字符编码)
package com.xie.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter(urlPatterns= {"/*"})
public class MyFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器初始化");
}
/**
* 拦截处理请求的方法
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//向下转型
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
//放行请求
chain.doFilter(req, resp);
}
@Override
public void destroy() {
System.out.println("销毁过滤器");
}
}
注解配置过滤器(登录验证)
@WebFilter(urlPatterns=
{"/emp/delete","/emp/update","/emp/list"})
public class LoginFilter implements Filter{
}
但是如果有几百个资源(比如说jsp)需要登录验证,那么上面的方式编写还是很困难,此时可以将要进行登录验证的资源统一保存到一个文件夹下,然后过滤器只要对该文件夹进行验证即可
统一保存要验证的资源
@WebFilter(urlPatterns=
{"/emp/delete","/emp/update","/emp/list","/pages/*"})
注解配置监听器
@WebListener
public class ApplicationAttributeListener implements ServletContextAttributeListener{
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
System.out.println("增加新的属性触发:"+event.getName()+"="+event.getValue());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
System.out.println("删除属性触发:"+event.getName()+"="+event.getValue());
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
System.out.println("替换属性触发:"+event.getName()+"="+event.getValue());
}
}
@SuppressWarnings("serial")
@WebServlet(urlPatterns= {"/emp/*","/dept/*"})
public class EmpServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getServletContext().setAttribute("name", "尼古拉斯");
req.getServletContext().setAttribute("name", "斯巴达");
req.getServletContext().removeAttribute("name");
}
}
总结
- 使用注解配置了普通的servlet的映射路径(@WebServlet)
- 使用注解配置了过滤器(@WebFilter)
- 使用注解配置了监听器(@WebListener)