SpringBoot集成slf4j日志配置的方法
前言
日志,作為一個(gè)應(yīng)用系統(tǒng)的重要部分,然而并不會(huì)在項(xiàng)目預(yù)研或需求設(shè)計(jì)階段就作為一個(gè)功能模塊單獨(dú)規(guī)劃設(shè)計(jì),但這絲毫不影響它在任何一個(gè)系統(tǒng)中的重要的地位。
為了保證服務(wù)的高可用,及時(shí)發(fā)現(xiàn)問(wèn)題,迅速解決問(wèn)題等訴求,所以生產(chǎn)環(huán)境一旦出現(xiàn)問(wèn)題,預(yù)警系統(tǒng)就會(huì)通過(guò)郵件、短信甚至電話的方式實(shí)施多維轟炸模式,確保相關(guān)負(fù)責(zé)人不錯(cuò)過(guò)每一個(gè)可能的bug。
預(yù)警系統(tǒng)判斷疑似bug大部分源于日志。比如某個(gè)微服務(wù)接口由于各種原因?qū)е骂l繁調(diào)用出錯(cuò),此時(shí)調(diào)用端會(huì)捕獲這樣的異常并打印ERROR級(jí)別的日志,當(dāng)該錯(cuò)誤日志達(dá)到一定次數(shù)出現(xiàn)的時(shí)候,就會(huì)觸發(fā)報(bào)警。
其次,在以往項(xiàng)目開發(fā)過(guò)程中,我們往往習(xí)慣性使用System.out.println()這個(gè)常用的打印輸出語(yǔ)句來(lái)顯示斷點(diǎn)信息或業(yè)務(wù)運(yùn)行對(duì)象信息或控制臺(tái)日志記錄,其實(shí)大量的使用System.out.println()在一定程度上會(huì)增加資源的消耗。Java日志框架眾多,常用的有java.util.logging,log4j,logback,commons-logging等等。而且SpringBoot 提供了一套日志系統(tǒng),logback是最優(yōu)的選擇。因此本文根據(jù)實(shí)際項(xiàng)目中使用slf4j 的logback來(lái)輸出日志,效率很高。
日志的重要性,不言而喻。
OK,接下來(lái),本文主要總結(jié)一下項(xiàng)目中目前使用的SpringBoot集成slf4j日志配置。
1、slf4j概述
slf4j,即(Simple Logging Facade for Java,簡(jiǎn)單門面日志)。它是對(duì)所有日志框架制定的一種規(guī)范、標(biāo)準(zhǔn)、接口,并不是一個(gè)框架的具體的實(shí)現(xiàn),它只服務(wù)于各種各樣的日志系統(tǒng)。
slf4j提供了統(tǒng)一的記錄日志的接口,對(duì)不同日志系統(tǒng)的具體實(shí)現(xiàn)進(jìn)行了抽象化,只要按照其提供的方法記錄即可,最終日志的格式、記錄級(jí)別、輸出方式等通過(guò)綁定具體的日志系統(tǒng)來(lái)實(shí)現(xiàn)。在項(xiàng)目中使用了slf4j記錄日志,并且綁定了log4j(pom.xml中配置了相應(yīng)的jar包依賴),則日志會(huì)以log4j的風(fēng)格輸出;后期需要改為以logback的風(fēng)格輸出日志,只需要將jar包log4j替換成logback即可,根本不需要修改日志文件的代碼。
首先看下日志打印,如下,在啟動(dòng)類中引入Logger日志記錄:
@SpringBootApplication public class SpringbootSlf4jApplication { private static final Logger logger = LoggerFactory.getLogger(SpringbootSlf4jApplication.class); public static void main(String[] args) { logger.info("===============項(xiàng)目啟動(dòng)了==============="); SpringApplication app = new SpringApplication(SpringbootSlf4jApplication.class); app.run(args); logger.info("===============啟動(dòng)成功了==============="); } }
日志信息:
2020-03-21 11:28:18.017 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - ===============項(xiàng)目啟動(dòng)了===============
2020-03-21 11:28:18.447 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - Starting SpringbootSlf4jApplication on DESKTOP-V8RSTKO with PID 17476
2020-03-21 11:28:18.447 [main] DEBUG com.hl.magic.slf4j.SpringbootSlf4jApplication - Running with Spring Boot v2.1.8.RELEASE, Spring v5.1.9.RELEASE
2020-03-21 11:28:18.447 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - No active profile set, falling back to default profiles: default
2020-03-21 11:28:19.077 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8080 (http)
2020-03-21 11:28:19.087 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"]
2020-03-21 11:28:19.097 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
2020-03-21 11:28:19.097 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.24]
2020-03-21 11:28:19.157 [main] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2020-03-21 11:28:19.157 [main] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 680 ms
2020-03-21 11:28:19.287 [main] INFO o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2020-03-21 11:28:19.387 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"]
2020-03-21 11:28:19.397 [main] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-03-21 11:28:19.397 [main] INFO org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2020-03-21 11:28:19.407 [main] INFO org.springframework.web.servlet.DispatcherServlet - Completed initialization in 10 ms
2020-03-21 11:28:19.410 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path ''
2020-03-21 11:28:19.410 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - Started SpringbootSlf4jApplication in 1.323 seconds (JVM running for 2.024)
2020-03-21 11:28:19.410 [main] INFO com.hl.magic.slf4j.SpringbootSlf4jApplication - ===============啟動(dòng)成功了===============
getLogger(xxxxxxx.class);這個(gè)方法將當(dāng)前所在的類作為入?yún)鬟f,輸出日志就會(huì)顯示對(duì)應(yīng)的xxx類名。這樣聲明的好處就是方便定位日志,準(zhǔn)確編寫class信息能夠提供快速定位日志的效率。
然鵝,SpringBoot內(nèi)部雖然提供了slf4j,但是日志記錄是需要根據(jù)項(xiàng)目實(shí)地需要進(jìn)行配置后,才能發(fā)揮它的最大功效。OK,接下來(lái)一起來(lái)了解下SpringBoot項(xiàng)目集成slf4j日志的配置。
2、pom.xml的日志依賴
pom.xml中日志依賴配置如下:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> </dependency>
3、application.yml的日志配置
SpringBoot框架內(nèi)部已經(jīng)集成slf4j,在使用時(shí),根據(jù)項(xiàng)目實(shí)地需要,還是須對(duì)slf4j進(jìn)行指定配置。
application.yml文件是SpringBoot的一個(gè)及其重要、核心的配置文件。yml 文件的層次感較強(qiáng)且直觀,但對(duì)格式要求比較高,英文冒號(hào)后面必須要有一個(gè)空格,如果換行配置子項(xiàng),須定格輸入兩個(gè)空格后再進(jìn)行配置,否則項(xiàng)目估計(jì)無(wú)法啟動(dòng),而且也不報(bào)錯(cuò)。本文測(cè)試項(xiàng)目的application.yml中日志配置如下:
logging: config: /HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/src/main/resources/logback.xml level: com.hl.magic: trace
注意:
【1】這里logback.xml的配置不同于一般日志配置;
因?yàn)樵趩为?dú)的一個(gè)SpringBoot工程中,配置config標(biāo)簽處為:locbak.xml即可;
這里在SpringBoot工程的一個(gè)子Module中集成日志配置,因此config標(biāo)簽處,設(shè)置為絕對(duì)路徑。
【2】logging.config是用來(lái)指定項(xiàng)目啟動(dòng)的時(shí)候,讀取哪個(gè)配置文件,這里指定的是日志配置文件,即子module項(xiàng)目根路徑下的 logback.xml文件,該文件是日志的主要配置信息。
【3】level用來(lái)配置指定包的路徑下應(yīng)用程序的日志記錄,及其日志級(jí)別。
logging.level用來(lái)指定具體的包中應(yīng)用程序日志的輸出級(jí)別。上面的配置表示com.hl.magic包下的所有日志輸出級(jí)別為 trace,會(huì)將操作數(shù)據(jù)庫(kù)的 sql 打印出來(lái),開發(fā)時(shí)設(shè)置成 trace 方便定位問(wèn)題,在生產(chǎn)環(huán)境上,將這個(gè)日志級(jí)別再設(shè)置成 error 級(jí)別即可。
日志常用的五個(gè)級(jí)別,根據(jù)嚴(yán)重程度由低到高,依次為:debug(調(diào)試 ) < info(消息) < warn(警告) < error(錯(cuò)誤) < fatal(嚴(yán)重錯(cuò)誤)。通??梢愿鶕?jù)實(shí)際所需要的顆粒度的大小選擇其中的幾個(gè),當(dāng)前常用debug,info,warn,error4個(gè)級(jí)別。
4、logback.xml配置文件定義
在引入日志配置后,需要制定日志的配置文件內(nèi)容,這樣系統(tǒng)運(yùn)行后,根據(jù)定制化需求才能輸出我們所需的指定日志記錄信息。
本文測(cè)試用例的日志配置內(nèi)容logback.xml文件,詳細(xì)內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定義日志文件的存儲(chǔ)地址 勿在 LogBack 的配置中使用相對(duì)路徑--> <property name="LOG_HOME" value="/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log"/> <!-- 定義日志格式 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/> <!-- 控制臺(tái)輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>${LOG_HOME}/SpringBoot-Slf4j_%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天數(shù)--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志輸出級(jí)別 --> <logger name="org.springframework" level="INFO"/> <logger name="com.hl.magic" level="INFO"/> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration>
有上邊可以看出,我們可以輕松的在logback.xml中定義日志輸出的格式、路徑、控制臺(tái)輸出格式、文件大小、保存時(shí)長(zhǎng)等內(nèi)容。接下來(lái),就這些內(nèi)容進(jìn)行分析。
5、logback.xml配置文件解析
5.1 定義日志的存儲(chǔ)路徑
logback.xml文件中日志存儲(chǔ)路徑定義:
<!--定義日志文件的存儲(chǔ)地址 勿在 LogBack 的配置中使用相對(duì)路徑--> <property name="LOG_HOME" value="/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log"/>
分析:
首先,定義日志的名稱:LOG_HOME;
其次,設(shè)置輸出value定義為日志的存儲(chǔ)路徑,日志都會(huì)存儲(chǔ)在該路徑下。
注意:這里勿在logback文件中使用相對(duì)路徑,不管是 windows 系統(tǒng)還是 Linux 系統(tǒng),日志存儲(chǔ)的路徑必須要是絕對(duì)路徑。
5.2 定義日志的輸出格式
<!-- 定義日志格式 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
分析:
首先,定義日志格式的名稱:LOG_PATTERN
其次,設(shè)置日志的具體格式value。
"%d" 表示日期(也可以使用"%date");
"%-5level" 表示級(jí)別從左顯示5個(gè)字符寬度;
"%thread" 表示線程名;
"%-30.30logger{30}" 表示如果logger的名稱小于30,就“-”指定左對(duì)齊;如果其名稱長(zhǎng)于30字符,就從左邊較遠(yuǎn)輸出的字符截掉,保持logger的名字長(zhǎng)度最終限制為30個(gè)字符;
"%msg" 表示日志消息,`%n` 是換行符。
5.3 定義控制臺(tái)輸出
<!-- 定義控制臺(tái)輸出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 變量引入 --> <pattern>${LOG_PATTERN}</pattern> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>--> </encoder> </appender>
分析:
使用 <appender>標(biāo)簽設(shè)置控制臺(tái)輸出(`class="ch.qos.logback.core.ConsoleAppender"`)的配置,定義為 “CONSOLE”。使用引入變量的方式: <pattern>${LOG_PATTERN}</pattern>引進(jìn)來(lái)即可。引入上面定義好的輸出格式(LOG_PATTERN)來(lái)輸出
這里,也可以直接配置格式化輸出結(jié)果的方式,不過(guò)體力工作。
5.4 定義日志相關(guān)參數(shù)
在<appender>標(biāo)簽內(nèi)定義一個(gè)名為 “FILE” 的文件參數(shù)配置。主要是配置日志文件的輸出文件名、日志文件保留時(shí)間、日志文件保存的路徑和日志的輸出格式、及單個(gè)日志文件存儲(chǔ)的大小。
<!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件輸出的文件名--> <FileNamePattern>${LOG_HOME}</FileNamePattern> <!--日志文件保留天數(shù)--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!-- 變量引入 --> <pattern>${LOG_PATTERN}</pattern> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符--> <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> --> </encoder> <!--日志文件最大的存儲(chǔ)--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender>
分析:
這里,根據(jù)前面配置的日志變量,引入到配置日志文件的輸出文件名、日志文件保留時(shí)間、日志文件保存的路徑和日志的輸出格式、及單個(gè)日志文件存儲(chǔ)的大小的各個(gè)標(biāo)簽項(xiàng)即可。
5.5 定義日志的輸出級(jí)別
在完成前邊的準(zhǔn)備工作后,最后來(lái)定義一下日志的輸出級(jí)別:
<!-- 日志輸出級(jí)別 --> <logger name="org.springframework" level="ERROR"/> <logger name="com.hl.magic" level="ERROR"/> <root level="ERROR"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root>
分析:
在<logger>標(biāo)簽中來(lái)項(xiàng)目默認(rèn)的日志輸出級(jí)別,這里定義級(jí)別為ERROR(用在生產(chǎn)環(huán)境中),然后針對(duì)ERROR級(jí)別的日志,使用<root>引用上面定義好的控制臺(tái)日志輸出和日志文件的參數(shù)。這樣 logback.xml 文件中的配置就設(shè)置完了。
注意:
<logger>標(biāo)簽并不是只能添加一個(gè),我們還可以指定項(xiàng)目特定包路徑的日志輸出級(jí)別。
本文測(cè)試類配置日志輸出級(jí)別為:DEBUG,使用最低日志輸出級(jí)別,確保后邊測(cè)試時(shí)能夠打印出所有測(cè)試項(xiàng)。如果需要改變?nèi)罩炯?jí)別就在上面配置內(nèi)容修改即可。
6、測(cè)試日志輸出
在程序中,一般使用 Logger(注意引jar包為slf4j) 對(duì)象來(lái)打印出一些日志信息,可以指定打印出的日志級(jí)別,也支持占位符。
定義一個(gè)測(cè)試類:LoggerItemController.java
/** * 日志輸出測(cè)試的controller */ @RestController @RequestMapping("/loggerItem") public class LoggerItemController { private static final Logger logger = LoggerFactory.getLogger(LoggerItemController.class); @GetMapping("/logInfo") public ResponseMessage logTest(){ logger.debug("=====>測(cè)試日志debug級(jí)別打印<===="); logger.info("=====>測(cè)試日志info級(jí)別打印<====="); logger.error("=====>測(cè)試日志error級(jí)別打印<===="); logger.warn("=====>測(cè)試日志warn級(jí)別打印<====="); // 使用占位符打印出一些參數(shù)信息 String csdn = "https://blog.csdn.net/qq_27706119"; String git = "https://github.com/JohnnyHL"; logger.info("======>AndOne丶的CSDN博客:{};AndOne丶的GitHub地址:{};", csdn, git); return new ResponseMessage(ResponseStatus.SUCCESS.getStatus(),ResponseStatus.SUCCESS.getMessage()); } }
先啟動(dòng)項(xiàng)目,瀏覽器訪問(wèn)地址:127.0.0.1:8080/loggerItem/logInfo
查看控制臺(tái)打印信息:
=====>測(cè)試日志debug級(jí)別打印<====
=====>測(cè)試日志info級(jí)別打印<=====
=====>測(cè)試日志error級(jí)別打印<====
=====>測(cè)試日志warn級(jí)別打印<=====
======>AndOne丶的CSDN博客:https://blog.csdn.net/qq_27706119;AndOne丶的GitHub地址:https://github.com/JohnnyHL;
日志的輸出級(jí)別中,DEBUG為最低級(jí)別,這樣能打印出全部信息。如果提高日志輸出級(jí)別,比如選擇INFO。則DEBUG 這條記錄將不會(huì)被打印出來(lái),這個(gè)大家可自行測(cè)試即可。同時(shí),查看下前邊配置的日志存儲(chǔ)路徑:“/HL/IdeaProjects/SpringBoot-Item/springboot-slf4j/log”目錄,該目錄下記錄了項(xiàng)目啟動(dòng),以及后面生成的所有日志記錄。在日常開發(fā)過(guò)程中,項(xiàng)目部署后,可通過(guò)查看日志文件來(lái)定位問(wèn)題。
7、小結(jié)
本文首先簡(jiǎn)述slf4j,詳細(xì)地分析了logback.xml 文件中對(duì)日志相關(guān)信息的配置;然后對(duì)SpringBoot集成slf4j 輸出日志做了詳細(xì)的分析說(shuō)明;最后,根據(jù)日志配置,利用一個(gè)demo進(jìn)行測(cè)試分析。在實(shí)地項(xiàng)目中,日志都是排查問(wèn)題的過(guò)程中非常重要的資料。
本文測(cè)試源碼下載地址:springboot集成slf4j日志配置
到此這篇關(guān)于SpringBoot集成slf4j日志配置的方法的文章就介紹到這了,更多相關(guān)SpringBoot配置slf4j日志內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot對(duì)不同Bean注解的區(qū)別和使用場(chǎng)景說(shuō)明
這篇文章主要介紹了SpringBoot對(duì)不同Bean注解的區(qū)別和使用場(chǎng)景說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03Java實(shí)現(xiàn)判斷瀏覽器版本與類型簡(jiǎn)單代碼示例
這篇文章主要介紹了Java實(shí)現(xiàn)判斷瀏覽器版本與類型簡(jiǎn)單代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Mybatis集成Spring的實(shí)例代碼_動(dòng)力節(jié)點(diǎn)Java 學(xué)院整理
這篇文章主要介紹了Mybatis集成Spring的實(shí)例代碼,需要的朋友可以參考下2017-09-09完整的醫(yī)院就診掛號(hào)系統(tǒng)基于Spring MVC + Spring + MyBatis實(shí)現(xiàn)
這篇文章主要介紹了基于Spring MVC + Spring + MyBatis實(shí)現(xiàn)的醫(yī)院就診掛號(hào)系統(tǒng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-0830w+數(shù)據(jù)使用RedisTemplate?pipeline空指針NullPointerException異常分析
這篇文章主要為大家介紹了30w+數(shù)據(jù)使用RedisTemplate?pipeline空指針NullPointerException異常分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Java動(dòng)態(tài)調(diào)用類中方法代碼
這篇文章主要介紹了Java動(dòng)態(tài)調(diào)用類中方法代碼,需要的朋友可以參考下2014-02-02java對(duì)象數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java對(duì)象數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06cookie+mybatis+servlet實(shí)現(xiàn)免登錄時(shí)長(zhǎng)兩天半的整體流程
這篇文章主要介紹了cookie+mybatis+servlet實(shí)現(xiàn)免登錄時(shí)長(zhǎng)兩天半,主要用到的技術(shù)有session、cookie、轉(zhuǎn)發(fā)、重定向、filter、和servlet,最重要的還是具體的來(lái)運(yùn)用它們?cè)谇岸隧?yè)面真正的搭建出一個(gè)應(yīng)用,通過(guò)這個(gè)練習(xí),對(duì)我們所學(xué)的web知識(shí)做一個(gè)整合,需要的朋友可以參考下2022-10-10