第十篇——JDBC操作数据库之Filter过滤器(拦截404)

JavaWeb中提交中文经常会出现404,500等错误,想必各位都遇到过吧,例如:


这个界面相信大家也熟悉吧,但非常不友善,我非常讨厌,决定修理他!

先看看相关知识点:

过滤器有四种拦截方式!分别是:REQUEST、FORWARD、INCLUDE、ERROR

REQUEST:
直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;

FORWARD:

转发访问执行过滤器。包括RequestDispatcher#forward()方法,<jsp:forward>标签都是转发访问;

INCLUDE:
包含访问执行过滤器。包括RequestDispatcher#include()方法,<jsp:include>标签都是包含访问;

ERROR:
当目标资源在web.xml中配置为<error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

拦截方式的配置问题:可以在<filter-mapping>中添加0~n个<dispatcher>子元素,来说明当前访问的拦截方式。
默认拦截方式为REQUEST,例如:
<dispatcher>REQUEST</dispatcher>

Go~

步骤说明:

1、代码请参考——第九篇JDBC操作数据库之Filter过滤器(乱码)

2、在第九篇基础上继续实现功能——第十篇JDBC操作数据库之Filter过滤器(拦截404)。


一、ErrorFilter.java

1.路径com.Filter

2.当发生错误打印到控制台

package com.Filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * Created by Ray on 2018/3/13 0013.
 **/
public class ErrorFilter implements Filter {
    //初始化
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    //拦截请求
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("检测到有误信息");
        chain.doFilter(request,response);
    }

    //销毁
    public void destroy() {

    }
}

二、error404.jsp

1.当发生404错误跳转到此页面

<%@ 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>
    <h2>抱歉,您输入的路径有误!</h2>
</body>
</html>


三、error500.jsp

1.当发生500错误跳转到此页面

<%@ 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>
    <h2>抱歉,内部服务器出错!</h2>
</body>
</html>

 

四、web.xml

1.添加头文件有相关代码提示

2.添加拦截

<error-page>
    <error-code>404</error-code>
    <location>/error/error404.jsp</location>
</error-page>

3.设置拦截方式

<filter-mapping>
    <filter-name>ErrorFilter</filter-name>
    <url-pattern>/error.jsp</url-pattern>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>
<?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">
    <servlet>
        <servlet-name>BookList</servlet-name>
        <servlet-class>com.control.BookList</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookList</servlet-name>
        <url-pattern>/BookList</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>BookAdd</servlet-name>
        <servlet-class>com.control.BookAdd</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookAdd</servlet-name>
        <url-pattern>/BookAdd</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>BookUpdate</servlet-name>
        <servlet-class>com.control.BookUpdate</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookUpdate</servlet-name>
        <url-pattern>/BookUpdate</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>BookDoUpdate</servlet-name>
        <servlet-class>com.control.BookDoUpdate</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookDoUpdate</servlet-name>
        <url-pattern>/BookDoUpdate</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>BookDelete</servlet-name>
        <servlet-class>com.control.BookDelete</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookDelete</servlet-name>
        <url-pattern>/BookDelete</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>BookDoDelete</servlet-name>
        <servlet-class>com.control.BookDoDelete</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookDoDelete</servlet-name>
        <url-pattern>/BookDoDelete</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>BookBatchAdd</servlet-name>
        <servlet-class>com.control.BookBatchAdd</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookBatchAdd</servlet-name>
        <url-pattern>/BookBatchAdd</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>BookBatchDelete</servlet-name>
        <servlet-class>com.control.BookBatchDelete</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookBatchDelete</servlet-name>
        <url-pattern>/BookBatchDelete</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>BookFind</servlet-name>
        <servlet-class>com.control.BookFind</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookFind</servlet-name>
        <url-pattern>/BookFind</url-pattern>
    </servlet-mapping>

    <!--配置过滤器-->
    <filter>
        <filter-name>CharSetFilter</filter-name>
        <filter-class>com.Filter.CharSetFilter</filter-class>
        <init-param>
            <!--用来指定一个具体的字符集-->
            <param-name>charset</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <!--映射过滤器-->
    <filter-mapping>
        <filter-name>CharSetFilter</filter-name>
        <!--“/*”表示拦截所有的请求 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--拦截404,500页面-->
    <error-page>
        <error-code>404</error-code>
        <location>/error/error404.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/error/error500.jsp</location>
    </error-page>
    <filter>
        <filter-name>ErrorFilter</filter-name>
        <filter-class>com.Filter.ErrorFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ErrorFilter</filter-name>
        <url-pattern>/error.jsp</url-pattern>
        <dispatcher>ERROR</dispatcher>
    </filter-mapping>
</web-app>


五、页面效果

设置前:


设置后:


ok!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值