使用springMvc模拟springboot

    技术2022-07-12  71

    SpringMVC 1, 添加jar依赖 2,非web环境,程序的入口在main方法入口,而main函数的入口在listener中。初始化顺序是listener先于filter先于servlet。因此要添加一个listner。这里就有疑问了,难道时至今日,我们还要去在web.xml中去添加Listener?? 所以解决办法来了。

    3,手写一个类,实现WebApplicationInitializer接口,重写它的onStartup()方法,tomcat底层会自动去调用ServletContainerInitializer的方法,然后通过注解@HandlesTypes(接口类.class)就处理了WebApplicationInitializer的onstartup方法,我们可以在这个方法里去做一些事,比如初始化spring的环境。 在META-INF路径下的services目录下javax.servlet.ServletContainerInitializer文件(文件名不可变)中,添加类名,那么实现了该类名的子类只要被@HandlesTypes(接口类.class)修饰,那么注解中的接口类的实现子类都会被处理。使用此方法可以动态插拔软件。

    1,我们需要初始化spring环境,既然是web应用,和spring的初始化还是有细微差别的,不过大同小异

    //和spring的初始化不同点,它没有带参数的构造方法

    AnnotationConfigWebApplicationContext configWebApplicationContext = new AnnotationConfigWebApplicationContext(); configWebApplicationContext.register(AppConfig.class); configWebApplicationContext.refresh();

    2,添加一个spring servlet a,传统方式在web.xml中添加一各servlet标签,可以配置多个 b,在servlet类上添加@WebServlet注解 c, 创建一个DispatchServlet对象,然后给servletContext对象添加eg: servletContext.addServlet(dispatchServlet);

    视图解析器。通过xml文件中配置

    <!-- configure the InternalResourceViewResolver --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean>

    而在springboot中是这样添加的

    @Bean public InternalResourceViewResolver InternalResourceViewResolver() { InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver(); internalResourceViewResolver.setPrefix("/"); internalResourceViewResolver.setSuffix(".jsp"); return internalResourceViewResolver; }

    方法二,这样也可以将视图解析器加入给spring管理

    public class AppConfig implements WebMvcConfigurer { @Override public void configureViewResolvers(ViewResolverRegistry registry){ registry.jsp("/",".jsp"); } }

    注解@HandlesTypes的作用是,若被修饰的注解的类实现了ServletContainerInitializer,那么注解里的类WebApplicationInitializer的实现类就能被处理

    @HandlesTypes({WebApplicationInitializer.class}) public class SpringServletContainerInitializer implements ServletContainerInitializer { }

    springboot的静态资源存放在哪里呢??? classpath下的resources,resources下的static目录下,classpath下的public这是有顺序的。

    Processed: 0.013, SQL: 9