JSP网站开发基础总结《十》

  经过上一篇的介绍相信大家对JSP提供的过滤器一定有了一个概念,本篇我们就一起再来研究一下关于创建多个过滤器时,如果有两个以上过滤器的过滤规则相同,那么这些过滤器的执行顺序如何呢?答案是根据我们在web.xml中声明的先后顺序进行执行,也就是先声明的先执行,后声明的后执行。文字的描述大家可能还是不明白,下面就让我们用程序验证一下。

 1、新建Filter类:

  因为我们需要完成对于多个过滤器的,执行时的先后顺序判断,所以我们至少需要新建两个Filter类。

  a、firstFilter.java:

public class firstFilter implements Filter {

    public void destroy() {
        System.out.println("Destory-----first");
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain arg) throws IOException, ServletException {
        System.out.println("start-----first");
        arg.doFilter(request, response);//没有该方法,页面将一直处于加载状态。
        System.out.println("end-----first");
    }

    public void init(FilterConfig arg0) throws ServletException {
        System.out.println("Init-----first");
    }

}

  b、secondFilter.java:

public class secondFilter implements Filter {

    public void destroy() {
        System.out.println("Destroy----second");
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("start----second");
        chain.doFilter(request, response);
        System.out.println("end----second");
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Init----second");
    }

}

 2、web.xml声明:

  这里需要注意的时,要达到上面的效果,我们需要在声明过滤规则中,保证两个过滤器匹配的请求一致。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <!-- 过滤器对象firstFilter声明 -->
 <filter>
  <filter-name>firstFilter</filter-name>
  <!-- 过滤器名 -->
  <filter-class>cn.imcook.filter.firstFilter</filter-class>
  <!-- 指定我们新建的过滤器对象的地址 -->
 </filter>

  <!-- 过滤器对象secondFilter声明 -->
 <filter>
  <filter-name>secondFilter</filter-name>
  <filter-class>cn.imcook.filter.secondFilter</filter-class>
 </filter>

 <!-- 过滤器firstFilter的规则声明  -->
 <filter-mapping>
  <filter-name>firstFilter</filter-name>
  <!-- 指定规则对于的过滤器对象 -->
  <url-pattern>/index.jsp</url-pattern>
  <dispatcher>REQUEST</dispatcher>
  <!-- 该处有四个值可选,默认是REQUEST -->
 </filter-mapping>

  <!-- 过滤器secondFilter的规则声明  -->
 <filter-mapping>
  <filter-name>secondFilter</filter-name>
  <url-pattern>/index.jsp</url-pattern>
  <dispatcher>REQUEST</dispatcher>
 </filter-mapping>

 <!-- 错误处理 -->
 <error-page>
  <error-code>404</error-code>
  <location>/error404.jsp</location>
 </error-page>
 <error-page>
  <error-code>500</error-code>
  <location>/error500.jsp</location>
 </error-page>

 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
</web-app>

 3、启动项目测试:

  在浏览器地址栏输入:http://localhost:8080/HelloWord/index.jsp,观察myeclipse控制台的输出:

  

  到这里我想大家对于多个Filter执行顺序的问题,应该已经明白其中的道理了吧。

 4、404、500错误过滤:

  大家在上面的web.xml中一定看到了,两个关于404、500错误的过滤监听声明,这是如何实现的呢?我们只需要在我们的web.xml中对这两个错误进行一下声明,系统就会开始监听,一旦出现错误,将会跳转到我们实现设置好的错误提醒页面。

  a、error404.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>404</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    <center>
        <h1>您访问的地址不存在。<a href="index.jsp" style="color: red">返回首页</a></h1>
    </center>
  </body>
</html>

  b、error500.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>500</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    <center>
        <h1>页面出错了,程序猿正在努力修复中...<a href="index.jsp" style="color: red">返回首页</a></h1>
    </center>
  </body>
</html>

  c、用于测试500错误的Test.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>测试</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my one web!">
  </head>

  <body>
    <center>
        <h1>500错误验证页面</h1>
        <%=2/0 %><!-- 0不能作为被除数 -->
    </center>
  </body>
</html>

 5、效果:

  a、当我们在地址栏输入一个不存在页面时:

  

  b、当我们在地址栏输入http://localhost:8080/HelloWord/Test.jsp:

  

  到这里对于JSP提供Filter类的构建就为大家总结完毕,对于这些功能具体使用,还需大家自己好好摸索。如有疑问,欢迎留言讨论。

时间: 2024-10-12 21:15:25

JSP网站开发基础总结《十》的相关文章

JSP网站开发基础总结《二》

有了上一篇的学习,我相信大家对于JSP一定有了一定的认识,从今天开始我们真正开启JSP模式,如果你有HTML的基础,那学起JSP来也就方便了很多了,首先JSP做为网站开发语言,它与HTML有很多相似的地方.网站是什么?网站就是通过一个个网页叠加起来的,通过一定的相互关联,最后便组成了网站,那既然是由一页页的网页组成的,我们就先从网页开始进入我们JSP开发世界. JSP网页与传统的HTML网页,基本语法方面是相通的,HTML中的语法规则,在JSP网页中同样适用,不同的是HTML网页的后缀名为.ht

JSP网站开发基础总结《一》

经过JAVASE的学习相信大家对JAVA已经不再陌生,那么JAVA都可以干什么呢?做算法.应用程序.网站开发都可以,从今天开始为大家奉上JAVAEE之JSP动态网站开发基础总结. 既然是动态网站开发,那它与传统的静态网站有什么区别呢?动态两字体现在什么地方?何为动态网站呢?相信学过HTML的小伙伴都知道,HTML是一个非常强大的网站开发语言,在没有出现动态网站开发语言之前,它被奉为网站开发利器,不过对于HTML网站开发存在一个问题,就是网站没办法实时更新,网站一旦开发完成不论经过多长时间,网站上

JSP网站开发基础总结《八》

JSP的学习总结到本篇已经八篇了,内容比较多,但都是实战,本篇最后为大家介绍一个小效果:百度分页.就是当我们遍历的数据对象较多时,这时我们就会看到了这个效果了,那他是如何实现的呢?下面我们就一起学习一下. 1.分页数据获取方法: 获得数据总数: public int getSize() { int num = 0; Connection conn = null; Statement st = null; ResultSet rs = null; conn = DBO.getConnection(

JSP网站开发基础总结《四》

经过前几篇的摸爬滚打,下面我们就开始我们真正的数据库操作了,本篇重点在于如何在网站端编写数据库操作语句,内容不多,就是我们常见的增删改查. 0.数据库对象创建: 在JAVASE基础知识总结时,就为大家点明了,JAVA是一种面向对象编程语言,所以我们再进行数据库创建之前,要先创建一个对象类. /* * 实例化数据库中的对象 */ public class Student { private int id;//学生ID private String name;//学生姓名 private int s

JSP网站开发基础总结《十四》

对于JSP的知识总结,已经为大家分享的差不多了,本篇就为大家做一下最后总结,本篇总结的主题是文件上传和下载,在之前的随笔中也有为大家分享过文件上传和下载的知识,不过都是通过JAVA提供的上传下载类实现的,本篇将通过文件输入输出流的方式为大家精讲一下文件的上传和下载实现,我相信当你了解了底层的实现后,会很方便你对于文件的上传和下载进行拓展.好了废话不多说,下面我们开始本篇的总结. 1.上传分析: 文件上传就是,我们通过Form表单中的input属性,向后台发送用户需要上传的文件,后台当发现用户发送

JSP网站开发基础总结《九》(转)

本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻松的完成之前的那个功能了,而且可以在很多地方使用,非常实用.废话不多说,下面开始简单为大家介绍一下JSP提供的过滤器类. 1.过滤器简介: 过滤器是什么?过滤器就是根据过滤规则对过滤源进行过滤,然后得到过滤结果.Web过滤器的是什么呢?首先Web过滤器的过滤源是用户的各种请求,过滤规则是开发人员实现

JSP网站开发基础总结《九》

本篇属于附加篇,在之前的总结中给大家提到过一个关于登录状态验证的效果,当时是通过Session对象完成的,今天我查了一下,JSP为我们封装了一个用于过滤用的过滤器类Filter,通过它我们就可以非常轻松的完成之前的那个功能了,而且可以在很多地方使用,非常实用.废话不多说,下面开始简单为大家介绍一下JSP提供的过滤器类. 1.过滤器简介: 过滤器是什么?过滤器就是根据过滤规则对过滤源进行过滤,然后得到过滤结果.Web过滤器的是什么呢?首先Web过滤器的过滤源是用户的各种请求,过滤规则是开发人员实现

JSP网站开发基础总结《十二》

前两篇已经简单为大家介绍了一下,有关Filter接口的知识,本篇就让我们以一个登录小功能,来具体实现一下过滤器的作用,便于大家掌握.具体为大家介绍一下如何使用Filter对访问进行过滤,及如何防止中文乱码的问题,内容不多,大家只要简单一练习便可以掌握. 1.登录表单: 和一般的表单没有任何区别,大家可以新建一个Login.jsp作为登录界面,在其中添加一个表单即可. <body> <center> <form method="post" action=&q

JSP网站开发基础总结《七》

按照计划本篇将为大家总结搜索功能的两种实现:确定搜索与模糊搜索.所谓精确搜索便是指,根据用户的输入的搜索内容,在数据库中寻找具有一一对应的关系的数据,一般都是用户在数据库中的主键值.而模糊搜索,是一种根据用户输入的信息,进行匹配,将具有相似信息的数据对象返回给用户.这两者在代码上的区别仅仅在于sql语句不同.下面就具体为大家介绍一下. 搜索输入框的设计,在上一篇中已经为大家介绍过,这里就不再赘述.下面直接开始我们本篇的内容. 1.精确搜索: 用于搜索的java方法: public Student