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>
  • 相关阅读:
    yii 引入文件
    CodeForces 621C Wet Shark and Flowers
    面试题题解
    POJ 2251 Dungeon Master
    HDU 5935 Car(模拟)
    HDU 5938 Four Operations(暴力枚举)
    CodeForces 722C Destroying Array(并查集)
    HDU 5547 Sudoku(dfs)
    HDU 5583 Kingdom of Black and White(模拟)
    HDU 5512 Pagodas(等差数列)
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/7044012.html
Copyright © 2011-2022 走看看