StringMVC学习

1.什么是stringmvc

 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架.

1.创建 SpringMVC流程

                        ① 导入SpringMVC相关坐标

                        ② 配置SpringMVC核心控制器DispathcerServlet

                        ③ 创建Controller类和视图页面

                        ④ 使用注解配置Controller类中业务方法的映射地址

                        ⑤ 配置SpringMVC核心文件 spring-mvc.xml

                        ⑥ 客户端发起请求测试 
 

创建StringMvc有两种方式:

1.xml文件配置创建

2. 配置类创建

jdbc配置

mybatis配置

stringmvc配置

其中componentscan的作用:

每个Bean都有名称。默认为方法名小写,可以用vale 赋值为其命名. V
Bean组件扫描
声明bean的注解要想生效还需要被组件
扫描
@ ComponentScan注解虽然没有显式配置,但
实际上已经包含在了启动类声明注解@springBootApplication
中,默认扫描的范围是启动类所在包及其子包.

 

2、SpringMVC组件解析


1.SpringMVC的执行流程


① 用户发送请求至前端控制器DispatcherServlet。

② DispatcherServlet收到请求调用HandlerMapping处理器映射器。

③ 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果 有则生成)一并返回给DispatcherServlet。

④ DispatcherServlet调用HandlerAdapter处理器适配器。

⑤ HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

⑥ Controller执行完成返回ModelAndView。

⑦ HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

⑧ DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

⑨ ViewReslover解析后返回具体View。

⑩ DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户。
 

 2.SpringMVC组件解析


        1. 前端控制器:DispatcherServlet

        用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由 它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。

        2. 处理器映射器:HandlerMapping HandlerMapping

        负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的 映射方式,例如:配置文件方式,实现接口方式,注解方式等。

        3. 处理器适配器:HandlerAdapter

        通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理 器进行执行。

        4. 处理器:Handler

        它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由 Handler 对具体的用户请求进行处理。

        5. 视图解析器:View Resolver

        View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即 具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

        6. 视图:View

        SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最 常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程 序员根据业务需求开发具体的页面

  3.SpringMVC注解解析


        @RequestMapping

        作用:用于建立请求 URL 和处理请求方法之间的对应关系

        位置:

类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
        属性:

value:用于指定请求的URL。它和path属性的作用是一样的
method:用于指定请求的方式
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
        例如

        ①params = {"accountName"},表示请求参数必须有accountName

        ②params = {"moeny!100"},表示请求参数中money不能是100

   4.SpringMVC的XML配置解析


        ①视图解析器
        REDIRECT_URL_PREFIX  = "redirect:"         --重定向前缀        

         FORWARD_URL_PREFIX = "forward:"         --转发前缀(默认值)

        prefix = " ";         --视图名称前缀

        suffix = " ";         --视图名称后缀

3.前后端数据交互

三种方式

1.HttpservletRequest请求:HttpservletRequest作为action接受用户请求,通过getParameter方法获取参数

2.简单数据类型:方法形参名得和请求参数名一直,不一致用@requestParam指定,指定的和请求名一致

3.实体类对象

参数上 // 在请求中,需要提供路径中的id参数 // 在方法中,可以直接使用id参数 // ... return这个错误 "example"; 是java.lang} ```.ClassCastException 3. 绑定Cookie值: ```java @RequestMapping("/example") public String example(@CookieValue("token") String token),表示试图将一个对象强制转换为不兼容的类型。具体错误信息是" { // 使用@CookieValue注解指java.lang.ClassCastException: class java.io.Object定Cookie名,将Cookie值绑定到方法参数上 // 在StreamClass$Caches$1 cannot be cast to class java.util.Map (java.io.ObjectStreamClass$Caches$1 and java.util.请求中,需要提供名为token的Cookie // 在方法中,可以直接使用token参数 // ... returnMap are in module java.base of loader 'bootstrap')"。根据错误信息, "example"; } ``` 4. 绑定表单对象: ```java @RequestMapping("/example") public String example(@ModelAttribute可以看出是在进行类型转换时出现了问题,试图将一个java.io.ObjectStreamClass$Caches$1对象("user") User user) { // 使用@ModelAttribute注解指定对象名,将表单数据绑定到方法参数上的对象中 // 在请求中,需要提供与转换为java.util.Map类型,但这两个类型是不兼容的。 这个错误通常发生在以下情况下: 1.User对象属性对应的表单字段 // 在方法中,可以直接使用user对象 // ... return "example"; } ``` 在代码中进行了错误的类型转换。 2. 类型转换的目标类型与实际对象的类型不匹配。 要解决这个错误, 可以检查以下几个方面: 1. 确保进行类型转换的对象和目标类型是兼容的。 2. 检查代码中的类型转换操作,确保没有错误。 3. 检查代码中是否存在其他地方对同一个对象进行了不兼容的类型转换。 如果以上方法都没有解决问题,可以尝试重新编译和运行代码,或者检查相关的依赖项是否正确配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值