javascript
【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/qq_26525215
本文源自【大學(xué)之旅_諳憶的博客】
分析
Spring MVC提供了一個(gè)DispatcherServlet來開發(fā)Web應(yīng)用。
在Servlet 2.5 及以下的時(shí)候只要在web.xml下配置<servlet>元素即可。
在下面的示例中,使用的是Servlet3.0+無web.xml的配置方式,在Spring MVC里實(shí)現(xiàn)WebApplicationInitialzer接口實(shí)現(xiàn)等同于web.xml的配置。
下面實(shí)例在IDEA中基于Maven搭建零配置的Spring MVC原型項(xiàng)目。
示例
構(gòu)建Maven項(xiàng)目
pom.xml內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.chenhaoxiang</groupId><artifactId>highlight_springmvc4</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><!--Generic properties --><java.version>1.7</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- Web --><jsp.version>2.2</jsp.version><jstl.version>1.2</jstl.version><servlet.version>3.1.0</servlet.version><!-- Spring --><spring-framework.version>4.2.3.RELEASE</spring-framework.version><!--Logging --><logback.version>1.0.13</logback.version><slf4j.version>1.7.7</slf4j.version><log4j.version>1.2.17</log4j.version></properties><dependencies><dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0</version><scope>provided</scope></dependency><!-- Spring MVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring-framework.version}</version></dependency><!-- 其他Web依賴 --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet.version}</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>${jsp.version}</version><scope>provided</scope></dependency><!-- Spring and Transaction --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring-framework.version}</version></dependency><!-- 使用SLF4J和LogBack作為日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback.version}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>${logback.version}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-access</artifactId><version>${logback.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.3</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins></build></project>日志配置
在src/main/resources目錄下,新建logback.xml用來配置日志,內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?> <!-- 可以這樣描述配置文件的基本結(jié)構(gòu):以<configuration>開頭, 后面有零個(gè)或多個(gè)<appender>元素,有零個(gè)或多個(gè)<logger>元素,有最多一個(gè)<root>元素 --> <configuration debug="false" scan="true" scanPeriod="1 seconds"><!-- debug : 默認(rèn)為false ,設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。scan : 配置文件如果發(fā)生改變,將會(huì)重新加載,默認(rèn)值為true;scanPeriod : 檢測(cè)配置文件是否有修改的時(shí)間間隔,如果沒有給出時(shí)間單位,默認(rèn)單位時(shí)毫秒,當(dāng)scan為true時(shí),這個(gè)屬性生效,默認(rèn)時(shí)間間隔為1min。 --><contexListener class="ch.qos.logback.classic.jul.LevelChangePropagator"><resetJUL>true</resetJUL></contexListener><jmxConfigurator/><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><!-- <appender> 是 <configuration> 的子節(jié)點(diǎn),是負(fù)責(zé)寫日志的組件。appender 有兩個(gè)必要屬性 name ,class 。name指定appender 的名稱, class 指定appender的全限定名class 包括 :ch.qos.logback.core.ConsoleAppender / ch.qos.logback.core.FileAppender/ ch.qos.logback.core.RollingFileAppender --><encoder><!--ch.qos.logback.core.ConsoleAppender 把日志添加到控制臺(tái),有如下節(jié)點(diǎn): <encoder> : 對(duì)日志進(jìn)行格式化。<target> : 字符串System.out 或者 System.err, 默認(rèn) System.out;ch.qos.logback.core.FileAppender 把日志添加到文件ch.qos.logback.core.RollingFileAppender[常用] 滾動(dòng)紀(jì)錄文件,先將日志記錄到指定文件,當(dāng)符合某種條件時(shí),將日志記錄到其他文件--><pattern>logbak: %d{HH:mm:ss.SSS} %logger{36} - %msg%n</pattern></encoder></appender><logger name="org.springframework.web" level="DEBUG"></logger><!--logger 是 <configuration> 的子節(jié)點(diǎn) 來設(shè)置某一個(gè)包或者具體的某一個(gè)類的日志打印級(jí)別,以及指定<appender>loger 僅有一個(gè)name屬性,兩個(gè)可選屬性 level/addtivityname : 用來指定受此loger約束的某一個(gè)包或者具體的某一個(gè)類level:用來設(shè)置打印級(jí)別,大小寫無關(guān)--><!-- 元素配置根 logger。該元素有一個(gè) level 屬性。沒有 name 屬性,因?yàn)橐呀?jīng)被命名 為“root”--><!-- 默認(rèn)根節(jié)點(diǎn)是INFO級(jí)別的日志 --><!-- root:logger的根節(jié)點(diǎn),就這一個(gè),默認(rèn)名稱就是rootlevel:日志級(jí)別appender-ref:確定使用哪個(gè)appender--><root level="info"><appender-ref ref="console"></appender-ref></root></configuration>將org.springframwork.web包下的類的日志級(jí)別設(shè)置為DEBUG,我們開發(fā)Spring MVC經(jīng)常出現(xiàn)和參數(shù)類型相關(guān)的4XX錯(cuò)誤,設(shè)置此項(xiàng)我們會(huì)看到更詳細(xì)的錯(cuò)誤信息。
演示頁面
在這里有一個(gè)注意的地方,頁面的創(chuàng)建位置。
在src/main/resources下建立views目錄,并在此目錄下新建index.jsp。
內(nèi)容如下:
這里的頁面不放在Maven標(biāo)準(zhǔn)的src/main/webapp/WEB-INF下,在這里這么放的原因是,Spring Boot的頁面是放置在src/main/resources下。
Spring MVC配置類
這個(gè)就是一個(gè)簡(jiǎn)單的Spring配置類。
在這里配置了一個(gè)JSP的ViewResolver,用來映射路徑和實(shí)際頁面的位置,其中,@EnableWebMvc注解會(huì)開啟一些默認(rèn)配置,如一些ViewResolver或者M(jìn)essageConverter等
Spring MVC的ViewResolver,這個(gè)是Spring MVC視圖(JSP下就是html)渲染的核心機(jī)制;Spring MVC里有一個(gè)接口叫做ViewResolver(我們的ViewResolver都實(shí)現(xiàn)該接口),實(shí)現(xiàn)這個(gè)接口要重寫resolverViewName(),這個(gè)方法的返回值是接口View,而View的職責(zé)就是使用model、request、response對(duì)象,并將渲染的視圖(不一定是html,可能是json、xml、pdf)返回給瀏覽器。
可能會(huì)對(duì)映射路徑前綴配置為/WEB-INF/classes/views/有點(diǎn)奇怪,這不是我們放頁面的路徑啊。
這是因?yàn)榭吹降捻撁嫘Ч沁\(yùn)行時(shí)而不是開發(fā)時(shí)的代碼,運(yùn)行時(shí)代碼會(huì)將我們的頁面自動(dòng)編譯到/WEB-INF/classes/views/下、
如圖:
這個(gè)是編譯后的路徑!
Web配置類
這個(gè)類就是為了代替web.xml的位置的。
package cn.hncu.springmvc;import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration;/*** Created with IntelliJ IDEA.* User: 陳浩翔.* Date: 2016/12/19.* Time: 下午 3:44.* Explain:Web配置*/ public class WebInitializer implements WebApplicationInitializer {//WebApplicationInitializer是spring提供用來配置Servlet3.0+配置的接口,從而實(shí)現(xiàn)了替代web.xml的位置。//實(shí)現(xiàn)此接口將會(huì)自動(dòng)被SpringServletContainerInitializer(用來啟動(dòng)Servlet3.0容器)獲取到@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();context.register(MyMvcConfig.class);context.setServletContext(servletContext);//新建WebApplicationContext,注冊(cè)配置類,并將其和當(dāng)前servletContext關(guān)聯(lián)ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher",new DispatcherServlet(context));//注冊(cè)Spring MVC的DispatcherServletservlet.addMapping("/");servlet.setLoadOnStartup(1);} }簡(jiǎn)單的控制器
package cn.hncu.springmvc;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;/*** Created with IntelliJ IDEA.* User: 陳浩翔.* Date: 2016/12/19.* Time: 下午 3:55.* Explain:簡(jiǎn)單控制器*/ @Controller //利用@Controller注解聲明是一個(gè)控制器 public class HelloController {@RequestMapping("/index")//利用@RequestMapping配置URL和方法之間的映射public String hello(){return "index";//通過上面ViewResolver的Bean配置,返回值為index,說明我們的頁面放置的路徑是:/WEB-INF/classes/views/index.jsp} }在這里,我們通過@RequestMapping配置URL和方法之間的映射,來訪問實(shí)際的頁面!
運(yùn)行結(jié)果
最后,將程序部署到Tomcat中,啟動(dòng)Tomcat,訪問:
http://localhost:8080/springMVC/index
本篇博客涉及到的源碼鏈接:
【->點(diǎn)擊訪問源碼-?CHX】本文章由[諳憶]編寫, 所有權(quán)利保留。
歡迎轉(zhuǎn)載,分享是進(jìn)步的源泉。
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/qq_26525215
本文源自【大學(xué)之旅_諳憶的博客】
總結(jié)
以上是生活随笔為你收集整理的【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server表结构和数据导入到M
- 下一篇: 2017年第1贴:EXT.JS使用MVC