1. 程式人生 > >SSH框架學習之Spring ---- 3、Spring封裝的監聽器和log4j的用法

SSH框架學習之Spring ---- 3、Spring封裝的監聽器和log4j的用法

第一部分:監聽器

問題所在:

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