A. spring mvc 通过<error-page>处理404,怎么记录造成404的请求
如何定义404
404,说白了就是找不到页面,那么如何定义“找不到”呢?
我们可以通过源代码来看看Spring MVC如何定义“404”的:
// Determine handler for the current request.
mappedHandler = getHandler(processedRequest, false);
if (mappedHandler == null || mappedHandler.getHandler() == null) {
noHandlerFound(processedRequest, response);
return;
}
getHandler是根据请求的url,通过handlerMapping来匹配到Controller的过程。
如果匹配不到,那么就执行noHandlerFound方法。这个方法很简单,返回一个404的错误代码。
我们的Web容器,比如tomcat,会根据这个错误代码来生成一个错误界面给用户。
那么,我们如何自定义这个界面呢?
重写noHandlerFound方法
最先想到的肯定是重写noHandlerFound方法,这个方法是protected,可以重写。
我们需要将页面重定向到我们自定义的404界面,那么只需要
@Override
protected void noHandlerFound(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.sendRedirect(request.getContextPath() + "/notFound");
}
这里我们的Controller里需要定义一个@requestMapping("/notFound")的这么一个方法,用来返回一个404页面
或者,这里应该可以采用直接访问静态文件的方法。
另外,也可以通过抛出一个异常
这样我们就实现了自定义的404页面。那么,还有别的方法吗?
利用Spring MVC的最精确匹配
Spring MVC对于url的匹配采用的是一种叫做“最精确匹配的方式”,举个例子
比如我们同时定义了“/test/a”, "/test/*",那么若请求的url结尾为/test/a,那么则会匹配精确的那个,也就是"/test/a"
我们是不是可以利用这个特点来找到那些找不到的页面?
1、首先我们定义一个拦截所有url的规则@requestMapping("*"),那么实际上不存在找不到的页面了,也就是永远不会进入noHandlerFound方法体内
2、后面的步骤和平时一样,为别的请求都配置上@requestMapping
那么请求过来,要么进入我们精确匹配的method(也就是找的到的),要么进入@requestMapping("*)拦截的方法体内(也就是找不到的)
那么我们只要让@requestMapping("*)拦截的这个方法返回一个自定义的404界面就OK了~
利用web容器提供的error-page
还记得之前提到的web容器会提供一个404的默认界面吗?
其实我们完全可以替换成我们自己的界面,那么看起来这种方法应该是最简单的了。
只需要在web.xml文件中写上如下代码就可以了:
<error-page>
<error-code>404</error-code>
<location>/resource/view/404.htm</location>
</error-page>
不过值得注意的是,这里配置的的location其实会被当成一个请求来访问。
那么我们的DispatcherServlet会拦截这个请求而造成无法访问,此时的结果是用户界面一片空白。
所以这里的404.htm其实是一个静态资源,我们需要用访问静态资源的方式去访问。
而在我的Spring MVC里,resource目录下的文件都是不会被拦截的
比较三种方式的区别
1、最方便:那肯定是第三种了,我们只需要提供一个静态页面即可
2、最快捷:第一种肯定最慢,因为它会发起2个请求。第二种和第三种应该差不多
3、最灵活:从灵活性上来看,第三种肯定是最缺乏的,但是其实对于404来说并不是需要经常变化的,不过也保不准可能可以允许用户自定义404界面等,这里一、二两种方式则提供了灵活性。
4、通用性:第三种应该是最通用了,而一、二 两种则要依赖Spring MVC
B. 在开发JSP过程中 设置显示错误信息页面问题(web.xml配置error page)。具体看问题补充
你用的是什么框架,用的是struts还是spring,他们都有错误视图配置,具体你自己查资料;如果你用的是纯的servlet,那么实现异常过滤器,在这里指定错误视图~!用web.xml配置不管用的
C. java web无web.xml怎样配置error-page
你使用spring mvc肯定会有web.xml不然不可能运行,下面的方法能够满足你的需求
<error-page>
<error-code>404</error-code>
<location>/jsp/error/notFound.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/jsp/error/codeError.jsp</location>
</error-page>
<error-page>
<location>/jsp/error/xxxxxxError.jsp</location>
<exception-type>java.lang.xxxxx</exception-type>
</error-page>
其中每一种错误都可以通过<exception-type>指定具体的类型
D. javaweb怎么实现根据错误码调转到指定页面
<!-- 异常配置 -->
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/error.jsp</location>
</error-page>
<!-- 找不到页面配置 -->
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
如果是多个,可以用逗号隔开。如:404,500
E. web.xml的error-page标签,不起作用~~
在page_not_found.jsp页面上有用isErrorPage="true"?
F. 在Web.xml中如何配置错误页面的拦截
javaWeb项目,错误拦截,需要在web.xml文件中进行一些配置:
<!-- 400错误 请求无效 -->
<error-page>
<error-code>400</error-code>
<location>/error.jsp</location>
</error-page>
<!-- 404 页面不存在错误 -->
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<!-- 500 服务器内部错误 -->
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
-------------------------一下为一些异常的配置
<!-- java.lang.Exception异常错误 -->
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
<!-- java.lang.NullPointerException异常错误 -->
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error.jsp</location>
</error-page>
等吧,只要能出现的异常,捕捉后,可以统一写一个页面进行相关的处理。
希望能够帮助到你。
G. javaweb项目的web.xml配置的错误页面起不到作用访问报错后页面并没有跳转到配置的错误页面中
<!--错误跳转页面-->
<error-page>
<!--路径不正确-->
<error-code>404</error-code>
<location>/WEB-INF/errorpage/404.jsp</location>
</error-page>
<error-page>
<!--没有访问权限,访问被禁止-->
<error-code>405</error-code>
<location>/WEB-INF/errorpage/405.jsp</location>
</error-page>
<error-page>
<!--内部错误-->
<error-code>500</error-code>
<location>/WEB-INF/errorpage/500.jsp</location>
</error-page>
只有程序发生错误或不能处理该请求时,才会触发相应的错误,跳转到相应的页面。
如404,只能当请求的页面不存在时,就会跳转到那个页面,并不是说所有情况都会跳到404的页面。
H. JSP跳转error页面
对于无法跳转的解决:
1.确保location属性中填写的错误页面是绝对路径
2.确保error.jsp的大小>1024字节
3.确保在error.jsp页面中添加<%@ page
isErrorPage="true"%>
注2:对于服务器端程序我们无法要求客户端去修改IE配置,因此流行的“在IE【工具】->【Internet选项】->【高级】中勾掉【显示友好http错误提示】”这种解决办法一般不予考虑;不管在哪个配置文件中配置,如果不起作用,通常是由于错误文件太小引起的,error.jsp的大小要大于1024字节。
试试吧,你也可以试试if语句自己判断get的值自己加语句跳转页面
I. 在IE中,当JS代码运行错误时怎么设置会弹出WebpageError
根据提示框,可以看到错误信息:
getComputedStyle is null or undefined
意思是 getComputedStyle 这个对象不存在或者是空对象。
J. import org.springframework.boot.web.servlet.ErrorPage; 依赖哪个包,导入的时候会报错
<!--应该是这个-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.web.servlet</artifactId>
<version>3.2.2.RELEASE</version>
<type>pom</type>
</dependency>