SSH框架學習之Spring ---- 3、Spring封裝的監聽器和log4j的用法
阿新 • • 發佈:2018-12-22
第一部分:監聽器
問題所在:
action呼叫service、service呼叫dao。每次訪問action的時候,都要建立一次物件,且載入一次配置檔案,這顯得很耗費資源。
底層解決方案
僅在伺服器啟動的時候,建立物件載入檔案,通過在底層使用監聽器、servletContext物件,在ServletContext的init()時載入配置檔案。
Spring封裝的解決方案
Spring封裝了一個監聽器(實現了servletContextListener介面)
第一步:匯入jar包 spring-web-4.2.4RELEASE.jar
第二步: 在web.xml引入配置監聽器
第三步:指定載入的spring配置檔案的位置
在web.xml中新增
<!-- 指定spring配置檔案位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:bean1.xml</param-value>
</context-param>
最終的web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>spring_day02_webdemo</display-name> <!-- 指定spring配置檔案位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:bean1.xml</param-value> </context-param> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
效果:訪問action時,不會每次都載入檔案!
第二部分:log4j
通過log4j,可以看到程式執行過程中更詳細的資訊
(1)需要匯入log4j.jar 包
(2)複製這個檔案到src下
code:log4j.properties
### \u8F93\u51FA\u4FE1\u606F\u5230\u63A7\u5236\u62AC ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n ### \u8F93\u51FADEBUG \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/log.log ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = ./logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = INFO log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] [ method:%l ] %m%n ### \u8F93\u51FAERROR \u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7\u5230=E://logs/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File = ./logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %p ] [ method:%l ] %m%n ### log4j.rootLogger=debug, stdout