Spring MVC + logback 零配置实现

1、构建MAVEN项目

pom.xml内容:


	4.0.0
	com.chenfeng.xiaolyuh
	spring-mvc-student
	0.0.1-SNAPSHOT
	war

	
		
		1.8
		UTF-8
		UTF-8
		
		2.2
		1.2
		3.1.0
		
		4.1.5.RELEASE
		
		1.0.13
		1.7.5
	

	
		
			javax
			javaee-web-api
			7.0
			provided
		

		
		
			org.springframework
			spring-webmvc
			${spring-framework.version}
		

		
		
			org.springframework
			spring-tx
			${spring-framework.version}
		
		
		
		
			javax.servlet
			jstl
			${jstl.version}
		
		
		
			javax.servlet
			javax.servlet-api
			${servlet.version}
			provided
		
		
		
			javax.servlet.jsp
			jsp-api
			${jsp.version}
			provided
		

		
		
			org.slf4j
			slf4j-api
			${slf4j.version}
		
		
			log4j
			log4j
			1.2.16
		
		
			org.slf4j
			jcl-over-slf4j
			${slf4j.version}
		
		
			ch.qos.logback
			logback-classic
			${logback.version}
		
		
			ch.qos.logback
			logback-core
			${logback.version}
		
		
			ch.qos.logback
			logback-access
			${logback.version}
		
		
		    org.logback-extensions
		    logback-ext-spring
		    0.1.4
		

		
		
			com.fasterxml.jackson.dataformat
			jackson-dataformat-xml
			2.5.3
		

		
		
			commons-fileupload
			commons-fileupload
			1.3.1
		
		
		
		
			commons-io
			commons-io
			2.3
		

		
		
			org.springframework
			spring-test
			${spring-framework.version}
			test
		
		
			junit
			junit
			4.11
			test
		

	

	
		
			
				org.apache.maven.plugins
				maven-compiler-plugin
				2.3.2
				
					${java.version}
					${java.version}
				
			
			
                org.apache.maven.plugins
                maven-war-plugin
                2.3
                
                    false
                
            
		
	

2、日志配置

在src/main/resources目录下,新建logback用类配置日志,内容如下:



	
		true
	

	
	
	  
          
            E:/workspace/spring-ecosystem-student/spring-mvc-student/logs/log.%d{yyyy-MM-dd}.log  
            30  
          
          
            %-4relative %d{HH:mm:ss.SSS} - [%thread] %-5level %class - %msg%n  
          
     

	
		
			logbak: %d{HH:mm:ss.SSS} %logger{36} - %msg%n
		
	

	
	
	
	
		
		
	


3、演示页面

在src/main/resources下简历views目录【Spring boot的放置页面的方式】,并在此项目下新建index.jsp,内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


	
		Welcome to Spring MVC world
	

4、Spring MVC配置

package com.chenfeng.xiaolyuh.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

/**
 * MVC 配置类。这里我们配置了一个jsp的ViewResolver,用来映射路径和实际页面的位置,
 * 其中@EnableWebMvc注解会开启一些默认的配置,如一些ViewResolver或者MessageConverter
 * @author yuhao.wang
 * @Date 2017年3月29日 下午3:41:20
 */
@Configuration
@EnableWebMvc
@ComponentScan("com.chenfeng.xiaolyuh")
public class MvcConfig {
	
	@Bean
	public InternalResourceViewResolver viewResolver() {
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		viewResolver.setPrefix("/WEB-INF/classes/views/");// 运行时代码会将页面自动编译到/WEB-INF/classes/views/下
		viewResolver.setSuffix(".jsp");
		viewResolver.setViewClass(JstlView.class);
		return viewResolver;
	}
}

ViewResolver,这是Spring MVC视图(jsp下就是html)渲染的核心机制;ViewResolver是Spring MVC中的一个借口,我们的ViewResolver都实现该接口,实现该接口要重写resolveViewName(),这个方法返回值是接口View,而View的职责就是使用model、request、response对象,并将渲染的视图返回给浏览器(这里的视图不一定是html,可能是json、XML、pdf等)。

5、web配置类

package com.chenfeng.xiaolyuh.config;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import ch.qos.logback.ext.spring.web.LogbackConfigListener;
/**
 * web配置类。程序的入口
 * WebApplicationInitializer类是Spring提供用来配置Servlet3.0+配置的接口,从而实现了代替web.xml的位置。
 * 实现此接口将会自动被SpringServletContainerInitializer获取到,SpringServletContainerInitializer用来启动Servlet3.0容器。
 * 容器启动时会自动扫描当前服务中ServletContainerInitializer的实现类,并调用其onStartup方法,
 * 其参数Set> c,可通过在实现类上声明注解javax.servlet.annotation.HandlesTypes(xxx.class)注解自动注入,
 * @HandlesTypes会自动扫描项目中所有的xxx.class的实现类,并将其全部注入Set。
 * @author yuhao.wang
 */
public class WebInitializer implements WebApplicationInitializer{

	@Override
	public void onStartup(ServletContext servletContext) throws ServletException {
		// 新建一个WebApplicationContext的注册配置类,并和当前的servletContext关联
		AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
		context.register(MvcConfig.class);
		context.setServletContext(servletContext);
		
		// 注册Spring mvc的DispatchServlet
		Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
		servlet.addMapping("/");
		servlet.setLoadOnStartup(1);
		
		// 日志配置(如果 classpath 里有  logback.xml文件, logback 会试图用它进行自我配置,所以下面两句代码可以不写)
		servletContext.setInitParameter("logbackConfigLocation", "classpath:logback.xml");
		servletContext.addListener(LogbackConfigListener.class);
	}
	
}

6、简单控制器

package com.chenfeng.xiaolyuh.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller// 声明是一个控制器
public class HelloController {
	// 通过@RequestMapping配置URL和方法之间的映射
	@RequestMapping("index")
	public String hello() {
		// 通过InternalResourceViewResolver的Bean配置,说明我们的放置路径是/WEB-INF/classes/views/index.jsp
		return "index";
	}
}



7、部署运行

Spring MVC + logback 零配置实现_第1张图片

你可能感兴趣的:(JavaEE开发的颠覆者,Spring,Boot实战)