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!