Servlet

前言(jsp中写代码的弊端)
之前咱们在jsp中嵌入了大量的java 代码,不符合MVC思想,而且给程序的扩展维护,人员的分工合作带来很大的困难,前端只懂HTML代码,而大量的java代码在页面,万一前端开发人员小手一抖删掉了一些数据,此时带来的风险太大,而且程序的可读性差,大量的代码全部混合在页面,造成页面超载。如果出现问题,找错困难,可维护性太差。
要求:jsp只做页面显示,不允许写java代码
Java代码写在哪里?写在后台程序中,表现层使用servlet
servlet介绍
servlet是一种服务器端的应用程序,具有独立于平台和协议的特性,可以生成动态的web页面。它担当客户请求(web浏览器或其他HTTP客户程序)和服务器响应(HTTP服务器上的数据库或应用程序)的中间层。
JSP是servlet的一种形式,每个JSP页面实际上就是一个servlet实例——JSP页面由servlet引擎转换成servlet,servlet负责响应客户请求。也就是说使用JSP实际上还是使用servlet,因为web应用中每个JSP页面都会由servlet容器生成servlet。
要求:jsp不允许出现java代码,仅仅做数据展示,servlet主要做业务逻辑的处理
核心:接受客户端的请求,参数的接受, 响应
servlet的实现方式(三种,第三种常用)
第一种:实现Servlet接口,实现所有的方法,其中init方法,service方法,destroy方法是其声明周期方法
第二种:继承GenericServlet
第三种:继承HttpSevlet, 重写doGet和doPost方法
Servlet_第1张图片

Servlet的生命周期就是指从创建,到服务,最终销毁的整个过程
观察实现servlet接口的方式,观察其生命周期方法执行的过程init , service, destroy
当服务器启动的时候,其实并没有调用servlet的生命周期方法,也没有创建servlet对象
当用户第一次访问项目中资源的时候,此时会创建servlet对象,并调用init方法进行对象初始化,然后调用service方法提供服务,init只会执行一次
后期用户的每一次访问都会调用service方法进行服务
当服务器正常关闭的时候,会执行servlet的destroy方法,进行销毁的操作,销毁的方法也仅仅只执行一次
但是如果在web.xml中配置了load- on - startup = 1的话,在服务器启动的时候就会创建servlet对象并初始化,但是一般不去配置
Servlet_第2张图片

servlet核心API介绍
Servlet核心API其实都是围绕两个核心对象展开的,request,response
获取用户的请求参数:接受请求,接受参数
获取用户请求参数的多个值
获取请求方式
获取和创建cookie的值
获取session对象
获取转发器对象进行转发
重定向操作
过滤器介绍(需求 : 用户拦截)
Servlet过滤器Fileter是一个小型的web组件,它们通过拦截请求和响应,以便查看、提取或以某种方式操作客户端和服务器之间交换的数据,实现“过滤”的功能
Filter是在Servlet 2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器完成。过滤器是以一种组件的形式绑定到WEB应用程序当中的,与其他的WEB应用程序组件不同的是,过滤器是采用了“链”的方式进行处理的
Servlet_第3张图片

过滤器原理
调用目标资源之前,让一段代码执行。web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源具体的servlet,即web资源就会被访问,否则web资源不会被访问。
每一个过滤器中有一个filterChain对象,这个对象就是过滤器的链,doFilter, - 放行,如果这个方法被调用则说明可以访问下一个过滤器,如果不调用这个方法,此时请求就停止
注意: 当在web.xml中配置了一个filter之后,在web容器(tomcat服务器)启动的时候会自动加载该filter,这个时候filter就会初始化,那么后续的只要有匹配的路径来访问web资源时,就会调用doFilter方法。其destroy方法在web容器关闭,或web应用移除时会调用
过滤器的实现与配置
编写java类实现Filter接口,并实现其doFilter方法。
在web.xml文件中对编写的filter类进行注册,其实和servlet的配置是一样的
域对象
就是一个容器,主要是用来存储数据并且数据传递
PageContext
page域指的是pageContext,表示JSP页面,是四大作用域中最小的一个。存储的值只在当前页面有效
Request
request域指Request,一次请求来到服务器,服务器创建,服务器这次请求响应结束后销毁request,request里面的数据只有当前的一个请求域内,也就是请求转发前后的servlet可以共享。
Session
session域指的是session
在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。
当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。其作用域是一次会话
ServletContext
application域指的是ServletContext
ServletContext对象是作用返回最大的域对象,并且整个工程只有一个该对象 ,ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。
只要是域对象都有一些共同的方法:
request.setAttribute(String key, Object value);
 request.getAttribute(key);
request.removeAttribute(key);
 

你可能感兴趣的:(servlet,java,前端)