首先log4j和視圖解析viewResolvers在spring管理的項目中經常使用到,並且每次沒有配置好log4j,IDE集成工具的控制檯都很差看到輸出日誌。另外視圖解析viewResolvers的運用能夠幫咱們過濾web項目訪問的路徑的前綴和後綴。因此,我想把這兩個頻繁的配置整理一下。html
(1)先小結log4j的配置。這裏是spring3.1.2環境項目下的配置,咱們先在項目中導入log4j.jar包,在項目的web.xml配置中java
我加入上下文的配置文件的映入:代碼以下:web
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:applicationContext.xml </param-value> </context-param>
接着咱們在applicationContext.xml的上下文配置文件中 spring
加入log4j的屬性文件:代碼以下數據庫
<context:property-placeholder ignore-resource-not-found="true" location="classpath*:application.properties,log4j.properties" />
這裏你只要加入log4j.properties屬性文件就能夠了,application.properties是個人數據庫配置文件,你不加apache
。其中log4j.properties屬性文件:json
log4j.rootLogger=INFO, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%m%n
1: 其中,屬性INFO是日誌的輸出的級別,通常發佈的時候用INFO,開發用 DEBUG瀏覽器
等級可分爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,若是配置OFF則不打出任何信息,若是配置爲INFO這樣只顯示INFO, WARN, ERROR的log信息,而DEBUG信息不會被顯示tomcat
2: log4j.appender.A1=org.apache.log4j.ConsoleAppender服務器
此句爲定義名爲A1的輸出端是哪一種類型,能夠是
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
3:
log4j.appender.A1.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n
若是使用pattern佈局就要指定的打印信息的具體格式ConversionPattern,打印參數以下:
%m 輸出代碼中指定的消息
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啓動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,一般就是所在類的全名
%t 輸出產生該日誌事件的線程名
%n 輸出一個回車換行符,Windows平臺爲「rn」,Unix平臺爲「n」
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyyy MMM dd HH:mm:ss,SSS},輸出相似:2002年10月18日 22:10:28,921
%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。
4:
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
此句爲定義名爲A1的輸出端的layout是哪一種類型,能夠是
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
這樣你的log4j的生產環境就配置好了,以後運行你的項目中,tomcat和控制檯能夠看到日誌的輸入了。
(2)接着繼續分析spring的視圖的解析viewResolvers
1:首先咱們仍是在項目的web.xml配置文件中加入代碼:
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:/mvc/applicationContext-mvc.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
servlet初始化好Spring MVC的上下文applicationContext-mvc.xml配置文件
applicationContext-mvc.xml文件中,咱們加入代碼:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <!-- 設置爲true以忽略對Accept Header的支持(瀏覽器不一樣有可能不一樣)--> <property name="ignoreAcceptHeader" value="true"/> <!-- 在沒有擴展名時即: "/user/1" 時的默認展示形式 --> <property name="defaultContentType" value="text/html"/> <!-- 擴展名至mimeType的映射,即 /user.json => application/json --> <property name="mediaTypes"> <map> <entry key="json" value="application/json"/> <!-- <entry key="xml" value="application/xml" /> --> <entry key="htm" value="text/html"/> <entry key="do" value="text/html"/> <entry key="qd" value="text/html"/> </map> </property> <property name="viewResolvers"> <list> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/pages/"/> <property name="suffix" value=".jsp"></property> </bean> </list> </property> <property name="defaultViews"> <list> <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> <!--<bean class="com.daguu.base.view.MappingFastJsonView"/>--> </list> </property> </bean>
解釋一下配置文件:
在Spring MVC中,由於ViewResolver是使用bean來配置的,因此擴展起來很是的容易,能夠根據本身的須要定製ViewResolver,其中屬性prefix是視圖的前綴,suffix是視圖的後綴,這裏以個人路徑來解釋:
看個人這個項目路徑,這裏我邏輯路徑是/pages/index.jsp通過濾和配置中
<entry key="htm" value="text/html"/>
類型轉換後,最後咱們的邏輯路徑是index.htm
ViewResolver接口是在DispatcherServlet中進行調用的,當DispatcherServlet調用完Controller後,會獲得一個ModelAndView對象,而後DispatcherServlet會調用render方法進行視圖渲染。
這句話很重要,咱們以前在web.xml中已經初始化了servlet了,接着我寫出個人Controller控制類,經過它去轉到jsp頁面:
Controller類:
@Controller
@RequestMapping("/")
public class AuthController extends BaseControllerSupport{
@Resource
private BlogsService blogsService;
@RequestMapping("/index")
public String index(Model model, Page<Blog> page) {
blogsService.getBlogsList(page);
model.addAttribute("page", page);
return "index";
}
這裏你只要關注
RequestMapping("/index")和return 「index」便可,
在webapps的根目錄下:
在index.jsp中寫上基本路徑和重定向的路徑:
<%@ page language="java" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" +
request.getServerPort() + path + "/";
response.sendRedirect(basePath+"index.htm");
%>
這樣咱們訪問/pages/index.jsp的流程就是這樣的,啓動tomcat以後,先在web.xml中初始化
servlet和配置文件→appicationContext-mvc.xml過濾以後→Contrller類中return到webapps根目
錄下的index.jsp中→重定向sendRedirect到index.htm(若是你是本地服務器的話,地址會是
http://localhost:8080/index.htm)
這就是我理解的spring MVC的視圖解析ViewResolver
以上是我對log4j和ViewResolver兩種常見配置本身的理解。
後續有不少開發填坑的文章發佈,若是對你有幫助,請支持和加關注一下