servlet基础03(Filter/jsp语法)

Filter(过滤器)

数据源和目标程序之间的一个类,比目标程序先一步拿到请求,过滤一些不合理的请求,响应时也会经过过滤器。也就是说一次请求成功,会经过2次过滤器

一个类实现implements Filter就是一个过滤器

public class Filter_01 implements Filter {
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
       //过滤器初始化函数
  }

   @Override
   public void destroy() {
      //过滤器销毁函数
  }

   @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       //执行的代码或者判断请求是否合理,必定会执行的方法
       //FilterChain filterChain.doFilter()是否会执行才是判断请求是否合理的函数
  }
}

配置过滤器

通过xml文件和注释,两个不是替代关系,可以互补

<filter>
       <filter-name>Filter_01</filter-name>   <!--过滤器名称-->
       <filter-class>cn.powernode.Servlet_core.Filter_01</filter-class>   <!--过滤器地址-->
   </filter>
   <filter-mapping>
       <filter-name>Filter_01</filter-name>
       <url-pattern>/context</url-pattern>    <!--目标程序-->
   </filter-mapping>

doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)方法中的FilterChain filterChain参数的doFilter()方法是判定标准

filterChain.doFilter(servletRequest,servletResponse);//写法

过滤器执行顺序

单个过滤器的执行顺序

请求时执行filterChain.doFilter()方法之前的代码,响应执行的是这个方法后面的方法。

简单来说就是,得到请求后会按顺序执行,当执行到filterChain.doFilter()方法就会跳转到目标程序,目标程序执行完又跳转回来执行filterChain.doFilter()方法之后的代码

多个过滤器的执行顺序

xml从上到下顺序执行,注解方式是按照类名的字典顺序

xml和注解方式都有,就先执行xml文件的过滤器,再执行注解

特殊情况:一个过滤器既有xml配置,又有注解配置,过滤器会正常执行,并且执行2次,一次执行xml,一次执行注解。这种情况很少

过滤范围

一个过滤器的范围

单个请求过滤: <url-pattern>/context</url-pattern> context是请求名称,指这个过滤器过滤指向这段代码的请求

全部请求过滤:<url-pattern>/*</url-pattern> 只要向这个服务器发送请求,就会被这个过滤器过滤

部分过滤请求:<url-pattern>/包名或者文件夹名/*</url-pattern> 过滤向这些包名下的代码的请求

过滤器的应用

字符编码过滤器:如果在过滤器中设置字符编码,就不需要在servlet类中调整字符编码了,如果这个过滤器过滤的是所有请求,那么全部servlet就不需要调整字符编码

登陆过滤器。。。

jsp动态页面

jsp页面的本质上就是另外一种形式的servlet类

在程序执行时是没有jsp页面的,jsp页面在执行时会被翻译成servlet来运行

servlet中可以写java代码也可以编写前端代码

jsp中可以编写前端页面代码,也可以写java代码

换句话说两者是可以互换的,但是还是各司其职比较好不要混写

jsp语法构成

1.指令元素

语法:<%@ 指令 %> 指令有:page、include、taglib

page:页面会自动生成,功能是设置jsp页面基本结构

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

include:包含其他页面一块显示

<%@include file="HelloWorld.html"%>

taglib:目前忽略

2.脚本元素

在jsp页面中编写java代码

<%! 声明标签 %> 可以写类的属性和方法,相当于在里面写一个类的信息

<% 脚本标签 %> 逻辑代码,相当于main方法,循环、判断等

<%= 输出标签 %> 输出一些数据

*面试题:jsp和html有什么区别

jsp注释:<%-- --%> 不会出现在浏览器端,html注释:<!-- - -> 会出现在浏览器端的源代码中,html注释会造成信息泄露

jsp注释可以注释掉jsp语法,html不能注释掉jsp语法,但能注释掉jsp语法的结果

*面试题:jsp中9个内置对象

内置对象:不需要创建,直接能用的

request 请求对象,和servlet的完全一致

response 响应对象,和servlet的一致

session 会话对象,和servlet的完全一致

application 等于ServletContext对象,全局对象

config 等于ServletConfig对象一致

page 值是this关键字,类型为Object,在类中表示当前对象,在页面中表示当前页面

out JspWriter打印输出流

exception jsp中的异常对象,存储程序中的异常信息

pageContext jsp独有的功能强大的对象,该对象有获取另外8个对象的方法,还可以操作jsp中的四个作用域。该对象是作为系统的默认对象来使用的,由系统来操作,程序员基本上是不使用这个对象

*面试题:jsp中的四个作用域

page:一个页面,作用范围是一个页面,page对象中没有操作作用域的方法,对象的委托给pageContext对象使用(没有什么作用,但是是存在的)

request:一次请求,和servlet完全一致

session:一次会话,和servlet完全一致

application 服务器运行,全局

jsp异常处理

当在jsp中使用java代码,出现了异常,这个页面就无法使用

可以在这个页面中使用errorPage属性跳转到别的页面

<%@page errorPage="index.jsp" %>   
<%--当这个页面出现了异常将跳转到index.jsp页面--%>
在index.jsp页面中要设置:
<%@page isErrorPage="true" %>   代表这个页面是异常处理页面
在index.jsp页面中打印异常信息

 

posted @ 2021-08-31 16:57  墨衣i  阅读(82)  评论(0)    收藏  举报