• SpringMVC+入门案例


    一、入门案例

    1.依赖导入

    1. javax.servlet
    2. javax.servlet-api
    3. 3.1.0
    4. provided
    5. org.springframework
    6. spring-webmvc
    7. 5.2.10.RELEASE

    这里javax.servlet-api这个依赖一定要确定范围为provided

    • scope是maven中jar包依赖作用范围的描述
    • 如果不设置默认是compile在在编译、运行、测试时均有效
    • 如果运行有效的话就会和tomcat中的servlet-api包发生冲突,导致启动报错
    • provided代表的是该包只在编译和测试的时候用,运行的时候无效直接使用tomcat中的,就避 免冲突

    2.创建控制器类

    1. //2.制作控制器类,等同于Servlet
    2. //2.1必须是一个spring管理的bean
    3. //2.2定义具体处理请求的方法
    4. //2.3设置当前方法的访问路径
    5. //2.4设置响应结果为json数据
    6. @Controller
    7. public class UserController {
    8. @RequestMapping("/save")
    9. @ResponseBody
    10. public String save(){
    11. System.out.println("user save ...");
    12. return "{'module':'springmvc'}";
    13. //设置映射路径为/delete,即外部访问路径
    14. @RequestMapping("/delete")
    15. @ResponseBody
    16. public String delete(){
    17. System.out.println("user save ...");
    18. return "{'info':'springmvc'}";
    19. }
    20. }
    21. }

    3.创建配置类

    注意springmvc只加载表示层,即@Controller注释修饰的即可,故,在@ComponentScan中指定到controller包中的Bean就行

    1. //3.定义配置类加载Controller对应的bean
    2. @Configuration
    3. @ComponentScan("com.itheima.controller")
    4. public class SpringMvcConfig {
    5. }

    4.创建Tomcat的Servlet容器配置

    1. //web容器配置类
    2. public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    3. //加载springmvc配置类,产生springmvc容器(本质还是spring容器)
    4. protected WebApplicationContext createServletApplicationContext() {
    5. //初始化WebApplicationContext对象
    6. AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    7. //加载指定配置类
    8. ctx.register(SpringMvcConfig.class);
    9. return ctx;
    10. }
    11. //设置由springmvc控制器处理的请求映射路径
    12. protected String[] getServletMappings() {
    13. return new String[]{"/"};
    14. }
    15. //加载spring配置类
    16. protected WebApplicationContext createRootApplicationContext() {
    17. return null;
    18. }
    19. }

     总结:

    • AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器 的抽象类
    • AbstractDispatcherServletInitializer提供三个接口方法供用户实现
    • createRootApplicationContext()方法,如果创建Servlet容器时需要加载非 SpringMVC对应的bean,使用当前方法进行,使用方式同 createServletApplicationContext()
    • createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对 应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围 ngetServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为/表示拦截所 有请求,任意请求都将转入到SpringMVC进行处理 createServletApplicationContext用来加载SpringMVC环境 createRootApplicationContext用来加载Spring环境

    5.配置Tomcat环境

    二、知识点

     

     

    三、流程分析 

    1.启动服务器初始化过程

    2. 单次请求过程

    四、Bean的加载控制

    目录结构:

     问题分析:

     原代码:

    思路分析:

    解决方法: 

     方法一常用

    方法二很鸡肋,有个小细节要十分注意,测试的时候,需要把SpringMvcConfig配置类上的@ComponentScan注解注释掉,否则不会 报错 ,也就是分开不成功。

    原因是

     补充创建Tomcat的Servlet容器配置文件的另类简洁写法

    1. public class ServletContainersInitConfig extends
    2. AbstractAnnotationConfigDispatcherServletInitializer {
    3. protected Class[] getRootConfigClasses() {
    4. return new Class[]{SpringConfig.class};
    5. }
    6. protected Class[] getServletConfigClasses() {
    7. return new Class[]{SpringMvcConfig.class};
    8. }
    9. protected String[] getServletMappings() {
    10. return new String[]{"/"};
    11. }
    12. }

  • 相关阅读:
    linux 性能分析 --chatGPT
    【JAVA】【刷题子】263.丑数
    Spring默认缓存的使用-Simple
    hadoop Configuration 源码解读
    打不开clickonce问题解决过程
    【面经】SQL优化方法论
    【AHK】解决WPS2019窗口大小bug\WPS窗口变小立即调整
    L9ARM体系结构与接口技术--ARM异常处理(day4)
    Android Studio 中将自己写的工程作为第三方类库的步骤
    指针进阶(2)
  • 原文地址:https://blog.csdn.net/m0_61395860/article/details/133255778