springmvc无xml配置

两种方式

一、

创建一个类实现 这个类: WebApplicationInitializer

官方文档:https://docs.spring.io/spring/docs/5.0.8.RELEASE/spring-framework-reference/web.html#spring-web

官方示例代码:

public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletCxt) {

        // Load Spring web application configuration
        AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
        ac.register(AppConfig.class);
        ac.refresh();

        // Create and register the DispatcherServlet
        DispatcherServlet servlet = new DispatcherServlet(ac);
        ServletRegistration.Dynamic registration = servletCxt.addServlet("app", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/app/*");
    }
}

自己实现的代码:

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletRegistration.Dynamic;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;

//相当于web.xml
public class WebInitializer implements WebApplicationInitializer {

    public void onStartup(ServletContext servletContext) throws ServletException {

        /**
         *   Load Spring web application configuration
         */
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(Config.class);//注册mvc的配置类
        ctx.setServletContext(servletContext);


        /**
         *  注册DispatcherServlet(调度工作,控制流程)
         */
        Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));//配置DispatcherServlet
        servlet.addMapping("/");//url-pattern路径
        servlet.setLoadOnStartup(1);//启动顺序


        /**
         *  注册filter 这里是字符编码utf-8
         */
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);//强制
        javax.servlet.FilterRegistration.Dynamic filter = servletContext.addFilter("encoding", characterEncodingFilter);
        filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class),true,"*");
    }

}

Config.class

import com.sunsharing.tools.testInterceptors;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
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.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

@Configuration//相当于配置文件
@ComponentScan("包名")//配置包扫描(Controller,Repository,service等)
@EnableWebMvc//启用mvc支持 annotation-driven
@MapperScan(value="mapper包名",sqlSessionFactoryRef = "sqlSessionFactory")//mapper扫描器
@EnableTransactionManagement//开启事务
public class Config extends WebMvcConfigurerAdapter {

    /**
     * jsp视图解析器的bean
     */
    @Bean
    public UrlBasedViewResolver setupViewResolver() {
        UrlBasedViewResolver resolver = new UrlBasedViewResolver();
        resolver.setPrefix("/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        return resolver;
    }

    /**
     * 配置数据源
     */
    @Bean(name = "dataSource")
    public DriverManagerDataSource getDataSource() {
        try {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            //useAffectedRows 可以返回删除更新受影响行数 使用:在mapper里面返回值设置为int而不是void
            dataSource.setUrl("jdbc:mysql://localhost:3306/movies?useAffectedRows=true");
            dataSource.setUsername("root");
            dataSource.setPassword("");
            return dataSource;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 创建事务管理 用来指定数据源
     */
    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(getDataSource());
    }

    /**
     * 配置SqlSessionFactory,给MapperScan调用
     */
    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(getDataSource());
        return sessionFactory.getObject();
    }


    /**
     * mvc返回资源编码设置为utf-8
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        //在StringHttpMessageConverter构造方法设置utf-8编码
        StringHttpMessageConverter shmc = new StringHttpMessageConverter(Charset.forName("utf-8"));
        converters.add(shmc);
        converters.add(new MappingJackson2HttpMessageConverter());
    }

    /**
     * mvc资源路径配置
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //后面根据路径自己配置
         registry.addResourceHandler("/**").addResourceLocations("/");
    }


    /**
     * mvc拦截器配置
     */
    //@Override
    //public void addInterceptors(InterceptorRegistry registry) {
//
    //    registry.addInterceptor(new testInterceptors()).addPathPatterns("/home");
   // }



}

二、

继承 AbstractAnnotationConfigDispatcherServletInitializer

官方示例代码:

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/app1/*" };
    }
}

自己实现:

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] { new HiddenHttpMethodFilter(), new CharacterEncodingFilter("UTF-8") };
    }

    /**
     * 跳转404视图需要设置ThrowExceptionIfNoHandlerFound为true(抛出异常)
     */
    @Override
    protected DispatcherServlet createDispatcherServlet(WebApplicationContext servletAppContext) {
        DispatcherServlet dispatcherServlet = (DispatcherServlet) super.createDispatcherServlet(servletAppContext);
        dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
        return dispatcherServlet;
    }

}

Config.class在第一个方法里了。

404全局的控制器:

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.NoHandlerFoundException;

/**
 * 全局 配置错误页面跳转
 */
@ControllerAdvice
public class NoHandlerFoundControllerAdvice {

    @ExceptionHandler(NoHandlerFoundException.class)
    public String processMethodNotSupportedException(Exception exception) {
        return "error";
    }

    @ExceptionHandler(Exception.class)
    public String AllSupportedException(Exception exception) {
        return "error";
    }
}

会返回到error.jsp

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring MVC 的 XML 配置文件(通常命名为 springmvc.xml)用于配置 Spring MVC 应用程序的各种组件,如控制器、视图解析器、处理器映射器等。 这个配置文件通常包含以下内容: 1. <context:component-scan>标签:用于启用组件扫描,扫描应用程序中的控制器、服务层组件等。 2. <mvc:annotation-driven>标签:启用注解驱动的 Spring MVC,可以使用注解来配置控制器等组件。 3. <bean>标签:用于配置视图解析器、处理器映射器等组件。 4. <mvc:resources>标签:配置静态资源的处理。 5. <mvc:view-controller>标签:配置不需要控制器就能处理的请求。 这只是 Spring MVC XML 配置文件的一个简单概述,具体配置方式可以参考 Spring 官方文档。 ### 回答2: SpringMVC基于Spring框架,是一种基于MVC(Model-View-Controller)设计模式的Web框架。在SpringMVC应用中,springmvc.xml是重要的配置文件之一。 这个文件是用于指定Spring MVC应用程序的配置详细信息的。 1. DispatcherServlet配置 DispatcherServlet是SpringMVC框架的核心,所有的请求都会由它来处理,springmvc.xml中可以配置DispatcherServlet,指定请求映射和对应的控制器,异常处理等。 2. 视图解析器配置 决定了一个请求如何响应一个具体的视图。 在Spring MVC中,视图解析器负责将由Controller返回的逻辑视图名匹配到具体的视图页面上。 3. Handler映射器配置 Handler映射器用于映射请求URL到Handler类。 4. 拦截器配置 SpringMVC允许我们通过配置拦截器来实现某些功能的统一处理。比如身份验证、授权检查等。 5. 异常解析器配置 SpringMVC提供了一套完善的异常处理机制,我们可以通过定义一个ExceptionResolver来处理异常。 6. 标签库配置 标签库定义了一系列标签,这些标签让JSP页面更加易于编写和维护。 7. 文件上传配置 Spring MVC框架提供了一套完整的文件上传解决方案,可以通过配置multipartResolver,处理客户端发送的multipart/form-date请求。 8. 消息转换器配置 Spring MVC框架提供了一套消息转换器的机制,可以将客户端传递的数据转化为任意格式的数据,满足不同的需求。 总的来说,springmvc.xmlSpringMVC应用程序中一个很重要且必须的配置文件,并且提供了许多实用的配置信息,对于理解SpringMVC框架,搭建SpringMVC应用程序,优化应用程序都非常重要。 ### 回答3: Spring MVC 是一个基于 Spring 框架的 Web 框架,其最大特点是模块化和松散耦合。在使用 Spring MVC 进行 Web 应用程序开发时,需要按照一定规范对其进行配置。其中 springmvc.xml 是 Spring MVC 的配置文件,它负责处理 Spring MVC 相关的配置信息。 首先,springmvc.xml 配置文件要包含命名空间的申明。这个命名空间通常是 xmlns:context 和 xmlns:mvc。其中,xmlns:context 命名空间提供了一个环境,Spring 能够自动扫描组件,使其能够被自动通过依赖注入来形成一个完整的 Web 应用程序。而 xmlns:mvc 命名空间提供了 Spring MVC 应用程序必需的诸如 HandlerMapping 之类的类的支持。 接下来,在 springmvc.xml 配置文件中需要配置 Spring MVC 的核心组件 HandlerMapping,这个组件负责映射请求和Controller的方法。 HandlerMapping 中最常用的是 BeanNameUrlHandlerMapping 和 SimpleUrlHandlerMapping。其中 BeanNameUrlHandlerMapping 将会根据 bean 的名称来匹配请求访问路径,而 SimpleUrlHandlerMapping 则通过定义请求请求映射器的键值对来进行匹配。 在 HandlerMapping 的基础上,还需要配置 HandlerAdapter,该组件负责执行 Controller 方法的逻辑。Spring MVC 默认提供的 HandlerAdapter 是 SimpleControllerHandlerAdapter,当然也可以扩展此类以适应自己的需要。 在 Spring MVC 中,视图解析器负责根据请求的结果选择展示的视图。通常情况下,视图解析器会将请求转发到 jsp 文件上,然后在 jsp 文件中进行展示。而 Spring MVC 中最常用的视图解析器是 InternalResourceViewResolver。可以在配置文件中配置该视图解析器,并为其指定 jsp 文件的位置,以及是否需要向前缀和后缀中添加特定的字符串。 最后,在 Spring MVC 中,还需要配置一些参数,如路径处理设置等等。其中,最为常见的是设置 controller 扫描的包路径,通过设置 mvc:annotation-driven 或 component-scan 来实现。 总之,springmvc.xml 配置文件中包含了 Spring MVC 应用程序的核心设置,这个文件需要仔细配置,才能让 Spring MVC 应用程序正常运行。需要根据具体的需求进行配置,从而实现一个完整的 Spring MVC 应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gentle+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值