Servlet是JavaWeb三大组件之一,且最重要.
Servlet是javaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet
1.导入Servlet依赖坐标
javax.servlet javax.servlet-api 3.1.0 provided
2.自定义类实现Servlet接口,并重写接口中的所有方法
public class ServletDemo implements Servlet {public void init(ServletConfig servletConfig) throws ServletException {System.out.println("init执行");}public ServletConfig getServletConfig() {return null;}public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("service执行");}public String getServletInfo() {return null;}public void destroy() {System.out.println("destroy执行了");}
}
3.在类上使用@WebServlet 注解,配置该 Servlet的访问路径
@WebServlet("/demo")
public class ServletDemo implements Servlet {
}
servlet是用来给浏览器响应动态资源
用来处理客户端发送过来的请求,并对该请求进行响应
我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet
@WebServlet("/demo2")
public class HttpServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get方法执行");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("post方法执行");}
}
Servlet 从3.0版本后开始支持使用注解配置,3.0版本前只支持 XML 配置文件的配置方式
作用:在HttpServletRequest到达 目标资源(Servlet/jsp,png,css.js) 之前,拦截客户的HttpServletRequest .根据需要检查HttpServletRequest,也可以修HttpServletRequest 头和数据.
Filter 可以根据需求,配置不同的拦截资源路径
@WebFilter("/*")
public class MyFirstFilter implements Filter {static {// 加载:JVM将硬盘上的MyFirstFilter.class字节码中的内容通过流的方式读取到内存System.out.println("字节码正在被加载到内存.....");}public MyFirstFilter() {System.out.println("构造函数被执行了");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("正在初始化");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("doFilter begin");//放行,继续访问本次的目标资源,本次请求的是index.jsp,index.jsp目标资源//chain.doFilter(request, response);System.out.println("doFilter end");}@Overridepublic void destroy() {System.out.println("destroy被执行了");}
}
注解配置Filter,而这种配置方式的优先级是按照过滤器类名(字符串)的自然排序。
比如有如下两个名称的过滤器 : BFilterDemo 和 AFilterDemo 。那一定是 AFilterDemo 过滤器先执行。
这个也是注解配置过滤器链的缺点
Filter的生命周期和WEB应用的生命周期一致(ServletContext)
Web核心技术之Filter过滤器
复习_过滤器
监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件
Listener分类:JavaWeb中提供了8个监听器
一类监听器:监听域对象的创建和销毁
二类监听器:监听域对象的属性变更
所谓的域对象的属性变更,就是向域对象中进行以下操作时
三类监听器:监听JAVABEAN对象在Sessioin中的状态变更(绑定,解绑,钝化,活化)
1.监听ServletContext的创建和销毁
@WebListener
public class ServletContextListenerDemo implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("ServletContext被创建了");}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("ServletContext被销毁了");}
}
应用场景:
2.监听Session的创建和销毁
@WebListener
public class SessionListenerDemo implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent httpSessionEvent) {System.out.println("session被创建了");}@Overridepublic void sessionDestroyed(HttpSessionEvent httpSessionEvent) {System.out.println("session被销毁了");}
}
session的生命周期
应用场景:
3.监听Request的创建和销毁
…
Tomcat启动的时候,需要识别webapps下的各个WEB应用,识别各个WEB应用的同
时为每个WEB应用创建对应的对象ServletContext,一个WEB应用对应一个
ServletContext.
每个ServletContext中都有一个很大的MAP,并且tomcat在启动之初就向
这个MAP中放入了大量的键值对的数据.当然我们也可以通过程序向这个大的MAP中
放入键值对的数据.
注意:一个web应用对应唯一的一个ServletContext对象
同整个web应用的生命周期一致
1.如何获取ServletContext对象
ServletContext servletContext=getServletContext();
2.多个Servlet之间共享数据
由于一个WEB应用只有一个ServletContext对象,当我们在访问服务端的Servlet时,都可以在Servlet中获取到当前应用唯一的ServletContext对象,所以可以利用ServletContext对象来实现共享数据.
3.获取到WEB项目下指定资源
4.获取到整个WEB全局的配置信息
5.获取到文件的mime类型
客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
Cookie是保存在客户端的,Session是保存在服务端的
domain(域名) + path(路径) + name
如果路径和名称一样,两次addCookie(),后者将覆盖前者。
Cookie
服务端会话跟踪技术:将数据保存到服务端