使用Java配置的方式完成SpringMVC的搭建

SpringMVC请求过程


这里写图片描述

简单描述一下请求过程:
1.请求到达前端控制器DispatcherServlet,他的作用是将请求转发给相应的控制器(controller)
2.DispatcherServlet通过处理器映射得到具体是哪个控制器,然后将请求转发
3.控制器进行信息的处理,然后将模型打包(模型中是后台查出来需要展示给前台的信息),并且标示出用于渲染输出的视图名
4.DispatcherServlet在使用视图解析器(控制器不直接传给视图解析器名称,而是通过Servlet,这样是为了使控制器和视图解析器解耦)来匹配特定的视图进行渲染

搭建SpringMVC

一、配置DispatcherServlet

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * 
 * @author CELINE
 *
 */
//扩展自Abstrac~Initializer的任意类,都会自动地配置Dispatcher-Servlet和Spring应用上下文
//spring的应用上下文会位于程序的Servlet上下文之中
public class SpittrWebAppInitializer  extends
        AbstractAnnotationConfigDispatcherServletInitializer {
    
    

   @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { WebConfig.class };
    }

    //映射“/”,表示会使用默认的Servlet
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return null;
    }

}

这里写图片描述

我们创建的SpittrWebAppInitializer这个类是继承了
AbstractAnnotationConfigDispatcherServletInitializer,任意继承自这个类的类都会自动的配置Dispatcher-Servlet和Spring应用上下文*但是真正完成配置上下文的是WebApplicationInitializer的类

Spring Web中通常会有两种应用上下文,一种是Spring应用上下文,这种上下文通过DispatcherServlet加载,对应上边的getServletConfigClasses()方法,另一种上下文不是spring的就要通过ContextLoaderListerner创建,对应的是方法getRootConfigClasses()

AbstractAnnotationConfigDispatcherServletInitializer会同时创建DispatcherServlet和ContextLoaderListener

二、WebConfig

package spitter.config;

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

@Configuration
@EnableWebMvc
@ComponentScan("spitter.web")
public class WebConfig extends WebMvcConfigurerAdapter {
    
    

    /**
     * 配置JSP视图解析器,他会查找jsp文件,在查找的时候
     * 他会在视图名称上加一个特定的前缀和后缀
     * home的视图——解析成为/WEB-INF/views/home.jsp
     * @return
     */
    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver=
                new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    /**
     * 通过调用enable方法,我们要求DispatcherServelet将
     * 对静态资源的请求转发到Servlet容器中的默认的Servlet上,
     * 不是DispatcherServelet本身处理
     * @param configurer
     */
    public void configureDefaultServleHandling(
            DefaultServletHandlerConfigurer configurer){
        configurer.enable();
    }
}

三、编写controller

package spitter.web;

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


@Controller
public class HomeController {
    
    

    @RequestMapping(value="/",method=RequestMethod.GET)
    public String home(){
        //视图名为home
        //配置的InternalResourceViewResolver方式,
        //home会被解析成"/WEB-INF/views/home.jsp"
        return "home";
    }
}

四、定义简单的JSP页面

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Spitter</title>
</head>

<body>
    <h1>Welcome to Spittr!!!</h1>
</body>

</html>

运行一下,看一下效果:

这里写图片描述

成功!!~~That’s All

猜你喜欢

转载自blog.csdn.net/cd18333612683/article/details/79130683
今日推荐