SpringMVC摒弃web.xml的配置

借助于servlet3.0和spring3.1的功能增强吗,搭建项目不再依靠配置web.xml,可以通过扩展AbstractAnnotationConfigDispatcherServletInitializer来进行应用的配置,如下:

package com.fireyao;

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

import javax.servlet.Filter;

/**
 * Created by lly on 2017/8/31
 */
public class SpittrWebAppInitialzer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * 加载spring相关配置
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    /**
     * 加载springmvc相关配置
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    /**
     * 将DispatcherServlet映射到 "/"
     *
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     * 这里注册的所有过滤器,都会映射到DispatcherServlet
     * 就是说这里的过滤器过滤规则是 /*
     * 所有的请求都会先到这里注册的过滤器中
     *
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        return new Filter[]{
                new CharacterEncodingFilter("UTF-8", true)
        };
    }


}

spring容器配置:

package com.fireyao;

import com.alibaba.druid.pool.DruidDataSource;
import com.fireyao.aop.EncoreableIntroducer;
import com.fireyao.aop.Minstrel;
import com.fireyao.bean.*;
import org.hibernate.spatial.dialect.postgis.PostgisDialect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import javax.annotation.processing.SupportedAnnotationTypes;
import java.util.HashMap;
import java.util.Map;

/**
 * 相当于applicationContext.xml
 * Created by lly on 2017/8/31
 */
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@EnableJpaRepositories(basePackages = {"com.fireyao.repository"},
        entityManagerFactoryRef = "entityManagerFactory",
        transactionManagerRef = "transactionManager")
@PropertySource(value = {"classpath:db.properties", "classpath:hibernate.properties", "classpath:app.properties"})
@ComponentScan(basePackages = "com.fireyao",
        excludeFilters = {
                @ComponentScan.Filter(
                        type = FilterType.ANNOTATION, value = EnableWebMvc.class
                )})
@EnableAspectJAutoProxy(proxyTargetClass = true)
/**
 *   proxyTargetClass = true ==> 使用cglib代理
 *   proxyTargetClass = false(默认) ==> 使用JDK代理
 */
public class RootConfig {


    @Autowired
    Environment environment;

    @Value("${disc.title}")
    private String TITLE;

    @Value("${disc.artist}")
    private String ARTIST;

    @Value(value = "${db.driver:org.postgresql.Driver}")
    private String DRIVERCLASSNAME;

    @Value("${db.username}")
    private String USERNAME;

    @Value("${db.password}")
    private String PASSWORD;

    @Value("${db.jdbcURL}")
    private String URL;

    @Value("${hibernate.hbm2dll.create_namespaces}")
    private String CREATE_NAMESPACES;

    @Value("${hibernate.hbm2ddl.auto}")
    private String HBM2DDL_AUTO;

    @Value("${hibernate.show_sql}")
    private String SHOW_SQL;

    @Value("${hibernate.format_sql}")
    private String FORMAT_SQL;

    @Value("${hibernate.generate_statistics}")
    private String GENERATE_STATISTICS;

    @Bean(name = "dataSource")
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(DRIVERCLASSNAME);
        dataSource.setUrl(URL);
        dataSource.setUsername(USERNAME);
        dataSource.setPassword(PASSWORD);

        /*  配置初始化大小、最小、最大*/
        dataSource.setInitialSize(5);
        dataSource.setMinIdle(5);
        dataSource.setMaxActive(20);
        /* 配置获取连接等待超时的时间*/
        dataSource.setMaxWait(30000);
        /*配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒*/
        dataSource.setTimeBetweenEvictionRunsMillis(60000);
        /*配置一个连接在池中最小生存的时间,单位是毫秒*/
        dataSource.setMinEvictableIdleTimeMillis(300000);
        /*申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效*/
        dataSource.setTestWhileIdle(true);
        dataSource.setValidationQuery("select 1");
        return dataSource;
    }


    @Bean
    public HibernateJpaVendorAdapter hibernateJpaVendorAdapter() {
        return new HibernateJpaVendorAdapter();
    }

    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DruidDataSource dataSource,
                                                                       HibernateJpaVendorAdapter hibernateJpaVendorAdapter) {

        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactory.setDataSource(dataSource);
        entityManagerFactory.setJpaVendorAdapter(hibernateJpaVendorAdapter);
        entityManagerFactory.setPackagesToScan("com.fireyao.domain");

        /*指定JPA属性;如Hibernate中指定是否显示SQL的是否显示、方言等*/
        Map<String, Object> jpaProp = new HashMap();
        jpaProp.put("hibernate.dialect", new PostgisDialect());
        jpaProp.put("hibernate.hbm2ddl.auto", HBM2DDL_AUTO);
        jpaProp.put("hibernate.show_sql", SHOW_SQL);
        jpaProp.put("hibernate.generate_statistics", GENERATE_STATISTICS);
        jpaProp.put("hibernate.format_sql", FORMAT_SQL);
        jpaProp.put("hibernate.hbm2dll.create_namespaces", CREATE_NAMESPACES);
        entityManagerFactory.setJpaPropertyMap(jpaProp);
        return entityManagerFactory;
    }

    /**
     * 事务管理器
     *
     * @param entityManagerFactory
     * @return
     */
    @Bean(name = "transactionManager")
    public JpaTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory.getObject());
    }


    @Bean
    public EncoreableIntroducer encoreableIntroducer() {
        return new EncoreableIntroducer();
    }

    @Bean
    public Minstrel minstrel() {
        return new Minstrel();
    }

    @Bean
    public Quest quest() {
        return new SlayDragonQuest();
    }

    @Bean(name = "knight")
    public Knights knights() {
        return new BraveKnight(quest());
    }

    @Bean(name = "express")
    public ExpressiveBean expressiveBean() {
//        return new ExpressiveBean(environment.getProperty("disc.title"),
//                environment.getProperty("disc.artist"));
        return new ExpressiveBean(TITLE, ARTIST);
    }


}

springmvc相关配置:

package com.fireyao;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
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;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import java.util.ArrayList;
import java.util.List;

/**
 * 相当于springmvc-servlet.xml
 * Created by lly on 2017/8/31
 */
@Configuration
@EnableWebMvc//启用spring mvc
@ComponentScan(basePackages = "com.fireyao.controller") //启用组件扫描
public class WebConfig extends WebMvcConfigurerAdapter {


    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        //处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
        fastConverter.setFastJsonConfig(fastJsonConfig);
        converters.add(fastConverter);
    }


    /**
     * Thymeleaf视图解析器
     *
     * @param springTemplateEngine
     * @return
     */
    @Bean
    public ThymeleafViewResolver viewResolver(SpringTemplateEngine springTemplateEngine) {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(springTemplateEngine);
        viewResolver.setCharacterEncoding("utf-8");
        return viewResolver;
    }

    /**
     * 模版引擎
     *
     * @param iTemplateResolver
     * @return
     */
    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(iTemplateResolver);
        return templateEngine;
    }

    /**
     * Thymeleaf3.0之后
     * Thymeleaf模版解析器
     *
     * @return
     */
    @Bean
    public ITemplateResolver iTemplateResolver() {
        SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML");
        templateResolver.setCharacterEncoding("utf-8");

        templateResolver.setCacheable(false);
        return templateResolver;
    }

    /**
     * Thymeleaf3.0之前
     * Thymeleaf模版解析器
     * @return
     */
  /*  @Bean
    public TemplateResolver templateResolver() {
        TemplateResolver resolver = new ServletContextTemplateResolver();
        resolver.setPrefix("/WEB-INF/VIEWS/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setCacheable(false);
        return resolver;
    }*/


    /**
     * 配置静态资源的处理
     * 要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上
     * 而不是使用DispatcherServlet本身来处理此类请求。
     *
     * @param configurer
     */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    /**
     * 配置视图解析器
     * ==> JSP视图
     *
     * @return
     */
    /*@Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }*/
}

即可实现与传统web搭建一样的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<h3>回答1:</h3><br/>SpringMVCweb.xml配置主要包括以下内容: 1. 配置DispatcherServlet 在web.xml配置DispatcherServlet,指定它的servlet-name和servlet-class,以及它所处理的请求的url-pattern。 2. 配置ContextLoaderListener 在web.xml配置ContextLoaderListener,指定它的listener-class,以及它所加载Spring配置文件的位置。 3. 配置字符编码过滤器 在web.xml配置字符编码过滤器,指定它的filter-name、filter-class和encoding。 4. 配置静态资源访问 在web.xml配置静态资源访问,指定它的servlet-name、url-pattern和文件路径。 5. 配置异常处理器 在web.xml配置异常处理器,指定它的error-page和exception-type,以及处理异常的servlet或jsp页面。 6. 配置文件上传 在web.xml配置文件上传,指定它的servlet-name、url-pattern和文件上传的最大大小。 以上是SpringMVCweb.xml配置的主要内容。 <h3>回答2:</h3><br/>Spring MVC是一个基于Java的web框架,它提供了一种轻量级的WEB开发方式。在使用Spring MVC时,我们需要对其进行web.xml配置,以实现相应的功能。 在web.xml中,我们需要将Spring MVC的DispatcherServlet配置为Servlet组件,并添加相应的Servlet映射规则。同时,我们还需要配置Spring MVC的上下文环境,并在其中配置Spring MVC的bean以及其他的第三方组件和服务。 下面我们来详细说明Spring MVC的web.xml配置。 1. 配置DispatcherServlet DispatcherServlet是Spring MVC的核心控制器,用于接收和分发客户端请求。为了配置DispatcherServlet,我们需要在web.xml文件中添加以下条目: ``` <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 其中,Servlet名称(servlet-name)用于标识DispatcherServlet组件,而Servlet类(servlet-class)则指定了DispatcherServlet的Java类。 2. 配置上下文环境 我们需要在web.xml配置Spring MVC的上下文环境。因为Spring框架使用了IoC(Inverse of Control,控制反转)和依赖注入的机制,在这里我们需要指定Spring MVC用来扫描和装载的应用程序上下文。为了配置上下文环境,我们需要添加以下条目: ``` <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> ``` 在这里,我们指定了一个Spring配置文件的位置,使得DispatcherServlet能够找到它。同时,我们还需要添加一个监听器,使得Spring MVC能够在应用程序启动时初始化上下文环境。 3. 配置字符编码过滤器 在Spring MVC中,我们常常需要处理中文字符,因此在web.xml中需要设置字符编码,以保证数据能够正确传输。为了配置字符编码过滤器,我们需要添加以下条目: ``` <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 在这里,我们使用CharacterEncodingFilter作为过滤器,将编码设置为UTF-8,并强制进行编码转换。 4. 配置视图解析器 Spring MVC的视图解析器用于将处理器(例如控制器)返回的逻辑视图名称转换为Servlet的URL路径。对于视图解析器的设置,我们需要添加以下条目: ``` <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 这里我们定义了一个名为viewResolver的bean,它作为视图解析器用来解析视图的逻辑名称。prefix属性指定了视图文件所在的文件夹,而suffix属性指定了视图文件的扩展名。 5. 配置文件上传 在web应用中,文件上传是一个常见的需求。Spring MVC提供了丰富的API来实现文件上传。为了配置文件上传,我们需要添加以下条目: ``` <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10240000"/> </bean> ``` 在这里,我们使用了CommonsMultipartResolver来实现文件上传,并设置了最大文件上传的大小为10MB。 以上是Spring MVC的常见web.xml配置。当然,根据应用程序的需求,还可以添加其他的组件,例如拦截器、数据源等。总之,web.xml配置能够为应用程序提供丰富的功能支持,让开发者能够更加高效、便捷地进行开发。 <h3>回答3:</h3><br/>Spring MVC是一种流行的Java Web框架,它使用基于注解的控制器和依赖注入的方式实现Web应用程序的开发。Spring MVC的Web.xml配置文件是其中一个非常重要的配置文件。 在Spring MVC框架中,Web.xml文件具有指定DispatcherServlet和其他Servlet之间的关系的能力。我们可以通过Web.xml文件来指定Spring MVC中的各种组件的配置和部署环境。 通常,Web.xml文件中包含两个Servlet: - DispatcherServlet,用于将请求路由到正确的处理程序并返回响应。DispatcherServlet是整个Spring MVC应用程序的核心部分。 - ContextLoaderListener,用于加载整个应用程序的根Web应用程序上下文。 在Web.xml文件中,我们需要配置这些元素: - Context Param:在应用程序的所有Servlet中,定义有关应用程序环境的参数的全局配置。例如,我们可以使用上下文参数指定应用程序中使用的数据库连接的URL和密码等。 - Servlet:程序中的每个Servlet必须在Web.xml文件中定义。Servlet在Web应用程序中扮演处理HTTP请求的角色。DispatcherServlet是一个Servlet,它接受请求并处理Web应用程序中的所有Servlet。 - Servlet Mapping:Servlet和URL之间的关系必须在Web.xml文件中定义。Servlet映射决定哪个Servlet处理来自特定URL的请求。 - Filter:过滤器是Web应用程序中的组件,它可以用于修改从客户端到服务器的请求或从服务器到客户端的响应。Filter也在Web.xml文件中定义,以便和其他组件建立正确的关系。 总而言之,Web.xml文件是配置Spring MVC的一个必要的指南。在配置Web.xml文件时,需要详细了解各个元素的作用和相互之间的关系。对于开发人员而言,熟悉Web.xml配置是非常重要的一步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值