zoukankan      html  css  js  c++  java
  • spring in action学习笔记十五:配置DispatcherServlet和ContextLoaderListener的几种方式。

       在spring in action中论述了:DispatcherServlet和ContextLoaderListener的关系,简言之就是DispatcherServlet是用于加载web层的组件的上下文。ContextLoadListener是加载

    其他组件的上下文。

    第一种方式:纯注解的方式:

    在spring4.0版本以上,倾向用注解的方式配置DispatcherServlet和ContextLoaderListener.配置方式如下:

    思路:一个类只要继承AbstractAnnotationConfigDispatcherServletInitializer就会自动配置DispatcherServlet和ContextLoaderListener.

    代码如下:

    WebConfig的代码如下:

     1 package spittr.config;
     2 
     3 import org.springframework.context.annotation.Bean;
     4 import org.springframework.context.annotation.ComponentScan;
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.core.io.FileSystemResource;
     7 import org.springframework.web.SpringServletContainerInitializer;
     8 import org.springframework.web.WebApplicationInitializer;
     9 import org.springframework.web.bind.annotation.ControllerAdvice;
    10 import org.springframework.web.bind.annotation.RequestPart;
    11 import org.springframework.web.multipart.MultipartFile;
    12 import org.springframework.web.multipart.MultipartResolver;
    13 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
    14 import org.springframework.web.multipart.support.StandardServletMultipartResolver;
    15 import org.springframework.web.servlet.View;
    16 import org.springframework.web.servlet.ViewResolver;
    17 import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
    18 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    19 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    20 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
    21 import org.springframework.web.servlet.view.BeanNameViewResolver;
    22 import org.springframework.web.servlet.view.InternalResourceViewResolver;
    23 import org.springframework.web.servlet.view.JstlView;
    24 import spittr.web.HomeController;
    25 
    26 import javax.servlet.ServletContainerInitializer;
    27 import javax.servlet.http.Part;
    28 import java.io.IOException;
    29 
    30 /**
    31  * Created by ${秦林森} on 2017/6/12.
    32  */
    33 @Configuration
    34 @EnableWebMvc//这个注解不能少。
    35 @ComponentScan(basePackages = {"spittr.web"})
    36 public class WebConfig extends WebMvcConfigurerAdapter{
    37     @Bean
    38     public ViewResolver viewResolver(){
    39         InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    40         //设置前缀
    41         viewResolver.setPrefix("/WEB-INF/views/");
    42         //设置后缀
    43         viewResolver.setSuffix(".jsp");
    44         viewResolver.setViewClass(JstlView.class);
    45         viewResolver.setExposeContextBeansAsAttributes(true);
    46         return  viewResolver;
    47     }
    48     @Override
    49     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    50         configurer.enable();//configure static content handling.
    51     }
    52     @Bean
    53     public MultipartResolver multipartResolver() throws IOException{
    54         return  new StandardServletMultipartResolver();
    55     }
    56     @Bean
    57     public MultipartResolver commonsMultipartResolver() throws IOException{
    58         CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver();
    59         //setting location where file upload to.
    60         multipartResolver.setUploadTempDir(new FileSystemResource("com/qls/sen"));
    61         multipartResolver.setMaxUploadSize(10*1024*1024);
    62         return multipartResolver;
    63     }
    64 }

    RootConfig的代码如下:

     1 package spittr.config;
     2 
     3 import org.springframework.context.annotation.ComponentScan;
     4 import org.springframework.context.annotation.Configuration;
     5 import org.springframework.context.annotation.FilterType;
     6 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
     7 
     8 /**
     9  * Created by ${秦林森} on 2017/6/12.
    10  */
    11 @Configuration
    12 /**
    13  * excludeFilters是指明不被@ComponentScan扫描的类型
    14  */
    15 @ComponentScan(basePackages = {"spittr"},excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = EnableWebMvc.class)})
    16 
    17 public class RootConfig {
    18 
    19 }
     1 package spittr.config;
     2 
     3 import com.myapp.config.MyFilter;
     4 import org.springframework.web.filter.CharacterEncodingFilter;
     5 import org.springframework.web.multipart.commons.CommonsMultipartResolver;
     6 import org.springframework.web.servlet.DispatcherServlet;
     7 import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
     8 
     9 import javax.servlet.*;
    10 
    11 /**
    12  * Created by ${秦林森} on 2017/6/12.
    13  */
    14 public class SpittrWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    15 //这个方法是配置ContextLoadListener.
    16     @Override
    17     protected Class<?>[] getRootConfigClasses() {
    18         return new Class<?>[]{RootConfig.class};
    19     }
    20 //这个方法是配置DispatcherServlet
    21     @Override
    22     protected Class<?>[] getServletConfigClasses() {
    23         //specifiy configuration class
    24         return new Class<?>[]{WebConfig.class};
    25     }
    26 
    27     @Override
    28     protected String[] getServletMappings() {
    29         return new String[]{"*.do"};//Map DispatcherServlet to
    30     }
    31     //文件上传。
    32     @Override
    33     protected void customizeRegistration(ServletRegistration.Dynamic registration) {
    34         registration.setMultipartConfig(new MultipartConfigElement("/tmp/spittr/upload"));
    35         registration.setLoadOnStartup(1);
    36         registration.setInitParameter("contextConfigLocation","/WEB-INF/spring/root-context.xml");
    37     }
    38 
    39     /**
    40      * 在DispatcherServlet中设置过滤器。
    41      * @return
    42      */
    43     @Override
    44     protected Filter[] getServletFilters() {
    45         return new Filter[] {(Filter) new MyFilter(),
    46         new CharacterEncodingFilter("utf-8")};
    47     }
    48 
    49 
    50     @Override
    51     public void onStartup(ServletContext servletContext) throws ServletException {
    52         servletContext.addServlet("m","");
    53     }
    54 
    55 }

    第二种方式:纯配置文件的方式:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     5          version="3.1">
     6     <!--  ContextLoaderListener所加载的bean。相当于第一种方式里面的RootConfig类中包扫描的bean。-->
     7     <context-param>
     8         <param-name>contextConfigLocation</param-name>
     9         <param-value>spring-julysecond.xml</param-value>
    10     </context-param>
    11     <listener>
    12         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    13     </listener>
    14     <servlet>
    15         <servlet-name>appServlet</servlet-name>
    16         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    17         <init-param>
    18             <!--  DispatcherServlet中加载的配置文件。-->
    19             <param-name>contextConfigLocation</param-name>
    20             <param-value>com/config/spring-julythird.xml</param-value>
    21         </init-param>
    22         <load-on-startup>1</load-on-startup>
    23     </servlet>
    24     <servlet-mapping>
    25         <servlet-name>appServlet</servlet-name>
    26         <url-pattern>*.do</url-pattern>
    27     </servlet-mapping>
    28 </web-app>

    第三种方式:注解和xml配置的混合方式。

    在混合方式中必须要让DispatcherServlet和ContextLoadListener知道你在xml中用了注解。用AnnotationConfigWebApplicationContext告诉他俩即可。

    代码如下:注意这里的代码是:

    web-app用的是:

    web-app_2_5.xsd而不是3.1版本的。否则会在
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>报错。
    
    
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3          xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     4          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">
     5 
     6   <!--  告诉ContextLoadListener知道你用注解的方式加载bean。-->
     7    <context-param>
     8        <param-name>contextClass</param-name>
     9        <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    10    </context-param>
    11     <!--  ContextLoaderListener加载RootConfig的bean-->
    12     <context-param>
    13         <param-name>contextConfigLocation</param-name>
    14         <param-value>spittr.config.RootConfig</param-value>
    15     </context-param>
    16     <listener>
    17         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    18     </listener>
    19     <servlet>
    20         <servlet-name>appServlet</servlet-name>
    21         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    22        <init-param>
    23            <param-name>contextClass</param-name>
    24            <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    25        </init-param>
    26 
    27         <init-param>
    28             <param-name>contextConfigLocation</param-name>
    29             <param-value>spittr.config.WebConfig</param-value>
    30         </init-param>
    31         <load-on-startup>1</load-on-startup>
    32     </servlet>
    33     <servlet-mapping>
    34         <servlet-name>appServlet</servlet-name>
    35         <url-pattern>*.do</url-pattern>
    36     </servlet-mapping>
    37 </web-app>
  • 相关阅读:
    MCV 和 MTV框架基本信息
    Django的一些操作与视图函数
    Django模板渲染
    python--jQuery
    MEF初体验之五:Lazy Exports
    MEF初体验之四:Imports声明
    MEF初体验之三:Exports声明
    MEF初体验之二:定义组合部件和契约
    MEF初体验之一:在应用程序宿主MEF
    WPF学习(12)动画
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/7044012.html
Copyright © 2011-2022 走看看