java程序员菜鸟入门之二十springMVC

本文详细介绍了SpringMVC的工作原理,包括请求处理流程、参数绑定、结果集返回等核心功能,并探讨了SpringMVC与MyBatis的整合以及与Struts2的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

1、SpringMVC的最重要的两个功能就是接收参数,返回结果集

2、SpringMVC的原理图


SpringMVC的架构运行流程

     1)、用户发送请求至前端控制器DispatcherServlet
     2)、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
   3)、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给   DispatcherServlet。
    4)、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
    5)、执行处理器(Controller,也叫后端控制器)。
    6)、Controller执行完成返回ModelAndView
    7)、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
    8)、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
    9)、ViewReslover解析后返回具体View
   10)、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
   11)、DispatcherServlet响应用户

二、参数绑定

1、默认的参数获取方式:

                   HttpServletRequest处理请求信息:request.getParament(“”);

                   HttpServletResponse处理响应信息

                   HttpSession处理存放于session域中的对象

2、绑定简单类型的参数:当请求的参数名称和处理器形参名称一致时会将请求参数与形参进行绑定。

                  在方法的参数里绑定前端发送过来的参数  (与前端请求参数名称一致时,直接命名即可,与前端请求参数名称不一致时,需要添加@RequestParam注解)、此方法只能绑定 基本数据类型与字符串String类型的参数,并且基本数据类型推荐使用包装类,因为基本数据类型不可以为null,使用了包装类之后,参数就可为null     

3、绑定pojo类型的参数

                  如果提交的参数很多,或者提交的表单中的内容很多的时候,可以使用简单类型接受数据,也可以使用pojo接收数据。
                  要求:pojo对象中的属性名和表单中input的name属性一致。(表单提交、参数较多,属性名与name属性名一致)

4、绑定包装pojo类  

5、高级参数的绑定

             数组类型的参数绑定:Controller方法中可以用String[]接收,或者pojo的String[]属性接收      

             List集合类型的参数绑定      

三、结果集的返回

1、返回对象:@ResponseBody注解的使用(@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端:将返回的对象转化为JSON格式的数据写入到HTML的body标签区域内)

                     方法中的返回值为要返回的对象类,return关键词携带着要返回的前端页面的数据

2、返回void: 

                   使用request转发页面,如下:
                          request.getRequestDispatcher("页面路径").forward(request, response);
                          request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);

                  可以通过response页面重定向:
                          response.sendRedirect("url")
                          response.sendRedirect("/springmvc-web2/itemEdit.action");  

                  可以通过response指定响应结果,例如响应json数据如下:
                         response.getWriter().print("{\"abc\":123}");

3、返回字符串:(关键在视图解析器)

                 逻辑视图名:controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。

                Redirect重定向:Contrller方法返回字符串可以重定向到一个url地址

                forward转发:Controller方法执行后继续执行另一个Controller方法

四、注解的使用

1、@RequestMapping注解:添加在类上或者方法上的URL映射路径、可以限定请求方法

2、@Controller注解:配置在Controller类的类名前面,让spring去自动识别这是Controller类

3、@ResponseBody注解:用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

4、@RequestParam注解:@RequestParam获取请求参数的(包括post表单提交),放置于要调用的方法参数上,用于前端传过来的参数名与后台参数接受名不一样的时候

5、@Service注解:注解在Service接口的实现类,让spring去自动识别这个类为Service类

6、@PathVariable注解:注解在要调用方法的参数上,作用是此参数的值为路径URL中携带的参数

7、@Autowired注解:Controller对象自动创建包含属性的对象,不用对象自己去spring容器中获取

8、@RequestBody:用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上

五、SpringMVC的图片上传处理

1、fileupload包的使用

2、CommonsMultipartResolver类的使用:为SpringMVC特有的方法

3、在springmvc.xml中配置文件上传解析器

<!-- 文件上传,id必须设置为multipartResolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传大小 -->
<property name="maxUploadSize" value="5000000" />
</bean>

六、SpringMVC与mybatis的整合

1、整合思路:

                    Dao层:
                            1、SqlMapConfig.xml,空文件即可,但是需要文件头。
                            2、applicationContext-dao.xml
                                       a)数据库连接池
                                       b)SqlSessionFactory对象,需要spring和mybatis整合包下的。
                                       c)配置mapper文件扫描器。

                   Service层:
                           1、applicationContext-service.xml包扫描器,扫描@service注解的类。
                           2、applicationContext-trans.xml配置事务。

                 Controller层:
                          1、Springmvc.xml
                                    a)包扫描器,扫描@Controller注解的类。
                                    b)配置注解驱动
                                    c)配置视图解析器

                Web.xml文件:
                        1、配置spring配置前端控制器(配置监听器监听spring容器的床架与加载)

七、SpringMVC与struts2的区别

1、springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器。
2、springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
3、Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面。Jsp视图解析器默认使用jstl

八、post、get请求乱码问题

1、post提交中文乱码问题:在web.xml中配置

<!-- 解决post乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 设置编码参是UTF8 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2、解决get提交中文乱码问题:

String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")(tomcat默认的编码方式为ISO8859-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值