三亞網(wǎng)紅餐廳衡水網(wǎng)站seo
SpringBoot系列文章目錄
SpringBoot知識(shí)范圍-學(xué)習(xí)步驟–【思維導(dǎo)圖知識(shí)范圍】
文章目錄
- SpringBoot系列文章目錄
- 本系列校訓(xùn)
- SpringBoot技術(shù)很多很多
- 環(huán)境及工具:
- 必要的知識(shí)
- 深層一些的知識(shí)
- 上效果圖
- 在Spring Boot里使用ErrorPage
- 還要注意的是
- 配套資源
- 作業(yè):
本系列校訓(xùn)
用免費(fèi)公開(kāi)視頻,卷飛培訓(xùn)班哈人!打死不報(bào)班,賺錢(qián)靠狠干!
只要自己有電腦,前后項(xiàng)目都能搞!N年苦學(xué)無(wú)人問(wèn),一朝成名天下知!
SpringBoot技術(shù)很多很多
本文專(zhuān)指ErrorPage出錯(cuò)頁(yè)面,可以是SSM的項(xiàng)目,也可以是springBoot 的項(xiàng)目
韓順平說(shuō):學(xué)習(xí)JAVA的人有兩大難
第一困惑,JAVA能百度到的知識(shí)太多太多,完全不知道學(xué)啥
第二困惑,就是不知道以什么樣的順序去學(xué),有的時(shí)候亂看一堆視頻有遺漏,有的時(shí)候,兩邊的視頻還有重復(fù)。
Spring的外圍技術(shù)就更多了。其實(shí),ErrorPage就是其中之一。
所以,學(xué)習(xí)東西要系統(tǒng)一些,如果基本功不夠,那后面的技術(shù)就會(huì)學(xué)的很浮。
環(huán)境及工具:
本系列環(huán)境
環(huán)境 | win11 |
---|---|
工具 | idea 2017/idea 2018 |
jdk | 1.8 |
數(shù)據(jù)庫(kù) | mysql5.5 |
maven | 3.2.1 |
項(xiàng)目導(dǎo)入方式 | maven 導(dǎo)入 |
數(shù)據(jù)庫(kù)前端工具 | mysql-front (navicat 也可以) |
數(shù)據(jù)庫(kù)前端工具:mysql-front (navicat 也可以)
主要是這些跟PHPStudy 2018 整合了,所以有的時(shí)候懶的打開(kāi)navicat
關(guān)于環(huán)境的重要性,直接看上面的《SpringBoot 的項(xiàng)目編譯即報(bào)錯(cuò)處理–JSB系列之001》
必要的知識(shí)
error-page元素用于將一段錯(cuò)誤代碼或一個(gè)異常類(lèi)型映射到Web應(yīng)用中的資源路徑,從而在產(chǎn)生特殊的HTTP錯(cuò)誤或指定的Java異常時(shí),將顯示相關(guān)的資源。
error-code元素包含HTTP錯(cuò)誤代碼。exception-type是Java異常類(lèi)型的完全限定的名稱(chēng)。location元素是Web應(yīng)用中的資源相對(duì)于應(yīng)用目錄的路徑。
下圖就是一個(gè)錯(cuò)誤頁(yè)面的例子:
本質(zhì)上就是讓你原來(lái)的錯(cuò)誤頁(yè)數(shù),換了一個(gè)“膚”,所以,其實(shí),錯(cuò)誤頁(yè)面是接手了以前的那一堆的文字(這個(gè)會(huì)讓客戶(hù)很難受)
但是問(wèn)題也是相對(duì)的。
事實(shí)上成熟的程序員更愿意看到的是這樣的出錯(cuò)頁(yè)面,因?yàn)檫@里包括了出錯(cuò)的信息,方便程序員修正這個(gè)錯(cuò)誤,
所以,ErrorPage(錯(cuò)誤頁(yè)面)一般是在項(xiàng)目的后期再加上去,不然很影響項(xiàng)目的前期調(diào)錯(cuò)
這里舉個(gè)例子要注意的是這是JSP技術(shù),每次產(chǎn)生HTTP 404錯(cuò)誤代碼時(shí),下面的部署描述符可使Web容器顯示error404.html頁(yè)面:
JSP page指令errorPage設(shè)置錯(cuò)誤頁(yè)
errorPage 屬性用來(lái)指定一個(gè) JSP 頁(yè)面,由該頁(yè)面來(lái)處理當(dāng)前頁(yè)面中拋出但未被捕獲的任何異常(即類(lèi)型為 Throwable 的對(duì)象)。它的應(yīng)用方式如下:
<%@ page errorPaqe=“Relative URL” %>
會(huì)出現(xiàn)錯(cuò)誤的頁(yè)面
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page errorPage="error.jsp"%>
<html>
<head>
<title>test errorPage</title>
</head>
<body>
<center><h2>errorPage屬性測(cè)試</h2></center>
</body>
</html>
錯(cuò)誤處理頁(yè)error.jsp
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%>
<%@ page isErrorPage="true"%><%--表示該頁(yè)面是錯(cuò)誤頁(yè) --%>
<html>
<head>
<title>test isErrorPage</title>
</head>
<body>
<center><h2>isErrorPage屬性測(cè)試</h2></center>
</body>
</html>
深層一些的知識(shí)
異常由外到內(nèi)如下:
web服務(wù)器處理異常—>web應(yīng)用里面web.xml處理異?!?gt;Spring框架處理異常---->控制器注釋處理異常
—>控制器方法里面try處理異常
這里有一個(gè)順序的問(wèn)題
-
Tomcat異常處理
簡(jiǎn)單,暴力,項(xiàng)目實(shí)施人員就搞定,完全不管項(xiàng)目技術(shù)。 -
Web應(yīng)用程序
有web.xml 的時(shí)候真香系列
:在conf/web.xml里面加入錯(cuò)誤頁(yè)面配置信息。
<error-page><error-code>404</error-code><location>/WEB-INF/jsp/404.jsp</location></error-page> <error-page><error-code>500</error-code><location>/WEB-INF/jsp/500.jsp</location></error-page><error-page><exception-type>java.lang.Exception</exception-type><location>/WEB-INF/jsp/error.jsp</location></error-page>
- Spring框架處理異常
就是本文啦。
上效果圖
這里的效果圖是本項(xiàng)目的,要區(qū)分開(kāi)
在Spring Boot里使用ErrorPage
這里還需要配置類(lèi)的知識(shí),請(qǐng)參見(jiàn)《SpringBoot 的配置類(lèi)–JSB系列之003》
這里一定要把這個(gè)知識(shí)點(diǎn)弄懂,還有就是配置類(lèi)與其它的controller的運(yùn)行順序。
package com.code.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configuration
public class WebConfig extends WebMvcConfigurerAdapter implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new ErrorPageInterceptor());super.addInterceptors(registry);}
}
然后,做一個(gè)ErrorPageInterceptor 攔截器
package com.code.config;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;/*** @program: ccx-axis-change* @description: 自定義errorPage攔截器* @author: YangPeng* @create: 2018-07-11 15:51**/
@Component
public class ErrorPageInterceptor extends HandlerInterceptorAdapter {private List<Integer> errorCodeList = Arrays.asList(404, 403, 500);@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throwsException {if (errorCodeList.contains(response.getStatus())) {//捕獲異常后進(jìn)行重定向,controller對(duì)應(yīng)的requestMapping為/error/{code}response.sendRedirect("/error/" + response.getStatus());return false;}return super.preHandle(request, response, handler);}
}
再然后,是處理這個(gè)映射地址的controler類(lèi)
package com.code.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;/*** @program: ccx-axis-change* @description: 自定義controller,來(lái)接收攔截器攔截后重定向的請(qǐng)求* @author: YangPeng* @create: 2018-07-11 15:51**/
@Controllerpublic class ErrorPageController {@RequestMapping(value = "/error/{code}")public String error(@PathVariable int code, Model model) {String pager = "";switch (code) {case 403:model.addAttribute("code", 404);pager = "/common/error_403";break;case 404:model.addAttribute("code", 500);pager = "/common/error_404";break;case 500:model.addAttribute("code", 500);pager = "/common/error_500";break;}return pager;}
}
最后還要做一個(gè)errorpage.html 或error.jsp的頁(yè)面。
這里寫(xiě)的簡(jiǎn)單一些。
<html>
<head><title>Title</title>
</head>
<body>
<img src="../img/error.jpg">
</body>
</html>
最后的成果。
還要注意的是
如果項(xiàng)目里使用了shiro 的話(huà),一定要把 驗(yàn)證碼的URL放出來(lái),不然的話(huà),你的驗(yàn)證碼的路徑被你自己的shiro 敵我不分的胡亂殺掉了。
這里就不詳細(xì)說(shuō)了,這個(gè)知識(shí)點(diǎn)涉及的問(wèn)題,比驗(yàn)證碼還多。
/*** 配置shiro的過(guò)濾器*/@Bean(SHIRO_FILTER)public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();// 設(shè)置安全管理器factoryBean.setSecurityManager(securityManager);// 設(shè)置未登陸的時(shí)要跳轉(zhuǎn)的頁(yè)面factoryBean.setLoginUrl(loginUrl);Map<String, String> filterChainDefinitionMap = new HashMap<>();// 設(shè)置放行的路徑if (anonUrls != null && anonUrls.length > 0) {for (String anon : anonUrls) {filterChainDefinitionMap.put(anon, "anon");}}filterChainDefinitionMap.put("/static/**", "anon"); // 先把頁(yè)面全放行了,不然調(diào) 試起來(lái)太麻煩了 ,by項(xiàng)目花園范德彪filterChainDefinitionMap.put("/code/**", "anon"); //這里要注意的是把驗(yàn)證碼的URL放出來(lái),不然不會(huì)顯示到登陸上。by項(xiàng)目花園范德彪// 設(shè)置登出的路徑if (null != logOutUrl) {filterChainDefinitionMap.put(logOutUrl, "logout");}// 設(shè)置攔截的路徑if (authcUlrs != null && authcUlrs.length > 0) {for (String authc : authcUlrs) {filterChainDefinitionMap.put(authc, "authc");}}Map<String, Filter> filters=new HashMap<>();
// filters.put("authc", new ShiroLoginFilter());//配置過(guò)濾器factoryBean.setFilters(filters);factoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);return factoryBean;}
成功之后就可以展示出效果圖的樣子了。
另外:
數(shù)據(jù)源里的datasource 的名字。用戶(hù)名,密碼。還有就是mysql 的驅(qū)動(dòng)是com.mysql.jdbc.Driver
總的來(lái)說(shuō),
com.mysql.jdbc.Driver
是 mysql-connector-java 5.5之前的,
com.mysql.cj.jdbc.Driver
是 mysql-connector-java 6及6之后的的,
初學(xué)者容易陷入一個(gè)誤區(qū),就是什么東西最新版是最好的,事實(shí)上很有可能他寫(xiě)的東西,明明JDK6.0就完全足夠。一邊喊著自己的機(jī)器內(nèi)存不足,一邊讓內(nèi)存運(yùn)行著他自己用不到的東西。就比如說(shuō)idea應(yīng)該算是這些開(kāi)發(fā)者工具里最卡的。有人可能明明只是打開(kāi)幾個(gè)網(wǎng)頁(yè),那為什么不使用webstorm? 甚至不是寫(xiě)很多代碼的時(shí)候,為什么不選擇更輕量級(jí)的VSCode?
配套資源
配套資源
SpringBoot中ErrorPage(錯(cuò)誤頁(yè)面)的使用–【ErrorPage組件】
https://download.csdn.net/download/dearmite/88136229
作業(yè):
無(wú),看懂即是神
范德彪經(jīng)典語(yǔ)錄: 學(xué)SpringBoot,你不能按套路出牌,你要靈活