tomcat 400错误跳转自定义页面

tomcat 400错误跳转自定义页面

springMVC在web.xml设置可以拦截404,500等错误跳转到自定义页面,但是无法拦截400错误。

<error-page>
	<error-code>404error-code>
	<location>./404.jsplocation>
error-page>
<error-page>
	<error-code>500error-code>
	<location>./500.jsplocation>
error-page>

根据官网给出的方案需要重写ErrorReportValve处理400错误跳转到自定义页面,首先需要更改tomcat中的server.xml文件,在host中添加Valve,页面将不显示错误的详细信息。

<Host name="localhost"  appBase="webapps" 
	unpackWARs="true" autoDeploy="true">
	   <Valve className="org.apache.catalina.valves.ErrorReportValve" 
	   showReport="false" showServerInfo="false" />
Host>

然后要新建一个maven项目进行对ErrorReportValve的重写,在pom.xml里添加需要的文件。

<dependency>
    <groupId>org.apache.tomcatgroupId>
    <artifactId>tomcat-catalinaartifactId>
    <version>${tomcat.version}version>
dependency>
<dependency>
    <groupId>org.apache.tomcatgroupId>
    <artifactId>tomcat-coyoteartifactId>
    <version>${tomcat.version}version>
dependency>
<dependency>
    <groupId>org.apache.tomcatgroupId>
    <artifactId>tomcat-el-apiartifactId>
    <version>${tomcat.version}version>
dependency>
<dependency>
    <groupId>org.apache.tomcatgroupId>
    <artifactId>tomcat-jaspic-apiartifactId>
    <version>${tomcat.version}version>
dependency>
<dependency>
    <groupId>org.apache.tomcatgroupId>
    <artifactId>tomcat-juliartifactId>
    <version>${tomcat.version}version>
dependency>
<dependency>
    <groupId>org.apache.tomcatgroupId>
    <artifactId>tomcat-servlet-apiartifactId>
    <version>${tomcat.version}version>
dependency>
<dependency>
    <groupId>org.apache.tomcatgroupId>
    <artifactId>tomcat-utilartifactId>
    <version>${tomcat.version}version>
dependency>
<dependency>
    <groupId>org.apache.tomcatgroupId>
    <artifactId>tomcat-util-scanartifactId>
    <version>${tomcat.version}version>
dependency>

重写tomcat的ErrorReportValve,新建CustomErrorReportValve

public class CustomErrorReportValve extends ErrorReportValve

重写report,读取需要的400页面,然后StringBuilder输出,也可以直接在StringBuilder中写html代码进行输出。

 @Override
 protected void report(Request request, Response response, Throwable t) {
	 StringBuilder sb = new StringBuilder(); 
	 response.setContentType("text/html");
	 response.setCharacterEncoding("utf-8");
	 sb.append("自定义HTML页面");
	 Writer writer = response.getReporter();
	  if (writer != null) {
	    writer.write(sb.toString());
	  }
}

然后项目打包。

mvn clean compile package

最后放到tomcat lib中,还需要更改server.xml文件,在host中添加errorReportValveClass为自定义class

 <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" errorReportValveClass="org.aspire.errorValve.CustomErrorReportValve">

重新启动tomcat,400页面就跳转到自定义的页面了。
(如果页面乱码在pom.xml里添加build即可解决)

<build>
   <plugins>
       <plugin>
           <groupId>org.apache.maven.pluginsgroupId>
           <artifactId>maven-compiler-pluginartifactId>
           <configuration>
               <source>1.6source>
               <target>1.6target>
               <encoding>utf-8encoding>
           configuration>
       plugin>
   plugins>
build>

https://aspiresoftware.in/blog/catalinatomcat-custom-error-report-valve-to-handle-errors-exceptions/

你可能感兴趣的:(安全扫描,java,tomcat)