《Spring实战》摘录 - 12

in #ievolution6 years ago

19-03-27-c0.jpg

111

Q: #6.3.1-1 | 配TilesConfigurer来解析定义
A:

@Bean
public TilesConfigureer tilesConfigurer(){
    TilesConfigurer tiles =new TilesConfigurer();
    tiles.setDefinitions(new String[] {
        “/WEB-INF/layout/titles.xml”
    });


    titles.setCheckRefresh(true);
    return tiles;
}


112

Q: #6.3.1-2 | Apache Tile中的DTD是什么
A:
Apache Tiles提供了一个文档类型定义(document type definition,DTD)

113

Q: #7.1.1-1 | 如果计划使用Servlet 3.0对multipart配置的支持,那么需要使用什么来开启multipart请求
A: DispatcherServlet的registration,那么需要使用DispatcherServlet的registration来启用multipart请求

114

Q: #7.1.2-1 | 如何创建WebApplicationInitializer实现并注册一个Servlet
A:
通过实现WebApplicationInitializer来注册Servlet

package com.myapp.config;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
import org.springframework.web.WebApplicationInitializer;
import com.myapp.MyServlet;

public class MyServletInitializer implements WebApplicationInitializer{
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException{
        Dynamic myServlet = servletContext.addServlet(“myServlet”, MyServlet.class);
        myServlet.addMapping(“/custom/**”);
    }
}


115

Q: #7.1.3-1 | 在web.xml中搭建Spring MVC
A:

<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value> //设置根上下文配置文件位置
    </context-param>
    
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener //注册ContextLoader-Listener
        </listener-class>
    </listener>
    
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet //注册Dispatcher-Servlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>appServlet</servlet-mapping> //将DispatcherServlet映射到"/"
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>


116

Q: #7.1.3-1 | 要在Spring MVC中使用基于Java的配置,我们需要告诉DispatcherServlet和ContextLoaderListener使用AnnotationConfigWebApplicationContext,该类的作用?
A: 这是一个WebApplicationContext的实现类,它会加载Java配置类,而不是使用XML。要实现这种配置,我们可以设置contextClass上下文参数以及DispatcherServlet的初始化参数。

117

Q: #7.1.3-4 | 设置web.xml使用基于Java的配置
A:

<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        
    <context-param>
        <param-name>contextClass</param-name> //使用Java配置
        <param-value>
            org.springframework.web.context.support = AnnotationConfigApplicationContext
        </param-value>
    </context-param>    
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            com.habuma.spitter.config.RootConfig   //指定配置类
        </param-value>
    </context-param>
    
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener //注册ContextLoader-Listener
        </listener-class>
    </listener>
    
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet //注册Dispatcher-Servlet
        </servlet-class>
        <init-param>
            <param-name>contextClass</param-name>  //使用Java配置
            <param-value>
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext
            </param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>  //指定DispatcherServlet配置类
            <param-value>
                com.habuma.spitter.config.WebConfigConfig
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>appServlet</servlet-mapping> //将DispatcherServlet映射到"/"
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>


118

Q: #7.2.1-1 | 从Spring 3.1开始,Spring内置了两个MultipartResolver的实现供我们选择,分别是
A:
CommonsMultipartResolver:使用Jakarta Commons FileUpload解析multipart请求;
StandardServletMultipartResolver:依赖于Servlet 3.0对multipart请求的支持(始于Spring 3.1)。

119

Q: #7.2.1-2 | 我们还可以通过其他的构造器来限制上传文件的大小。除了临时路径的位置,其他的构造器所能接受的参数如下
A:
上传文件的最大容量(以字节为单位)。默认是没有限制的。
整个multipart请求的最大容量(以字节为单位),不会关心有多少个part以及每个part的大小。默认是没有限制的。
在上传的过程中,如果文件大小达到了一个指定最大容量(以字节为单位),将会写入到临时文件路径中。默认值为0,也就是所有上传的文件都会写入到磁盘上。

120

Q: #7.2.1-3 | 假设我们想限制文件的大小不超过2MB,整个请求不超过4MB,而且所有的文件都要写到磁盘中。下面的代码使用MultipartConfigElement设置了这些临界值
A:

@Override
protected void customizeRegistration(Dynamic registration) {
  registration.setMultipartConfig(
      new MultipartConfigElement("/tmp/spittr/uploads",
          2097152, 4194304, 0));
}


//如果我们使用更为传统的web.xml来配置MultipartConfigElement的话,那么可以使用<servlet>中的<multipart-config>元素,如下所示:


<servlet>
  <servlet-name>appServlet</servlet-name>
  <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
  <multipart-config>
    <location>/tmp/spittr/uploads</location>
    <max-file-size>2097152</max-file-size>
    <max-request-size>4194304</max-request-size>
  </multipart-config>
</servlet>


//<multipart-config>的默认值与MultipartConfigElement相同。与MultipartConfigElement一样,必须要配置的是<location>。