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