springMVC是一种基于Java实现的、WEB的MVC设计模式的、请求驱动类型的、轻量级的WEB框架。
1、springMVC使用了MVC的设计模式思想。
2、基于驱动请求,就是指使用了请求-响应的模式。
3、将WEB层进行了解耦。
springMVC的工作流程
浏览器发送一个请求给WEB服务器,由服务器来控制发送给哪一个servlet来进行处理。
在流程中的作用
springMVC中的前端控制器DispatcherServlet:又被成为中央处理器。负责接收请求进行响应。通过调用其他的组件控制整个流程的跳转。
处理器映射器:根据前端控制器转给的URL请求地址去查询handler处理器。
处理器适配器:前端控制器将根据URL查询到的结果发送给适配器去适配执行处理器。
处理器:(需要自己进行开发)controller。
视图解析器:对view信息进行解析。
过程(个人理解)
- 浏览器发出一个请求到前端控制器
- 前端控制器把请求信息的URL转给处理器映射器
- 处理器映射器根据接收的URL进行处理,将处理结果返回给前端控制器
- 前端控制器将查询到的结果转给处理器适配器。
- 适配器根据结果适配合适的时处理器
- 处理器将结果进行处理后返回ModelAndView数据给处理器适配器
- 处理器适配器再将处理器返回的数据返会给前端控制器
- 前端控制器再将ModelAndView数据转给视图解析器
- 视图解析器对View信息进行解析后将解析结果返回给前端控制器
- 前端控制器将得到的视图 信息进行数据渲染
- 最后前端控制器将渲染好的视图信息响应给浏览器
程序的基础配置文件
配置web.xml文件
前端控制器
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始化信息 -->
<init-param>
<!-- springMVC的配置文件位置 -->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!-- 项目启动就会加载,填写加载顺序 -->
<load-on-startup>1</load-on-startup>
</servlet>
处理的请求
*.do
:处理以.do结尾的请求。不会拦截静态资源
/
:拦截所有请求。符合RESTFUL风格。会导致静态资源也会被拦截,而无法加载。
/*
:错误写法。
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
编码过滤器的配置
<!-- 编码过滤器 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:前端控制器中的name要与处理请求中的name一致
springMVC配置文件
处理器映射器 HandlerMapping
功能:根据url查询处理器或者拦截器
BeanNameUrlHandlerMapping:把bean名字作为请求的url
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
</bean>
处理器适配器 HandlerAdapter
功能:配置处理器,执行处理器
SimpleControllerHandlerAdapter:对所有实现了controller接口的处理器进行适配
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter">
</bean>
视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
在编写springMVC配置处理器映射器和处理器适配器时需要写两个<bean></bean>
来配置,这里也可以使用注解驱动,它提供了支持注解开发的处理器映射器和处理器适配器,还提供了json之和和数据绑定支持。
注解开发的详情
@RequestMapping 里需要配置映射的路径,‘first’前面的‘/’可加可不加,后边的‘.do’可加可不加
@ RequestMapping 可以注解到方法上也可以注解到类上。当注解到类上时,表示该类的所有方法都将映射到配置属性的路径下
例:
注解的属性:
value:指的是请求的地址。是缺省的默认值。string[]支持多路径、传值
method:指请求的method类型。get、post。不配置method,代表支持所有请求类型。 method=RequestMethod.GET只支持get请求
@RequestMapping(value="first",method=RequestMethod.GET)
public ModelAndView first() {
ModelAndView mv = new ModelAndView();
mv.addObject("msg","注解开发的项目");
mv.setViewName("user");
return mv;
}
springMVC支持返回的类型
1、ModelAndView
2、返回类型为void:可以重定向或者转发。或者是设置响应类型。类似于原生的Servlet开发
3、返回字符串类型:返回字符串可作为逻辑视图的名,可实现重定向 redirect:
;可进行转发forward:
例:
// 重定向
@RequestMapping("third")
public String third() {
return "redirect:/one/first.do";
}
-------------------------------
// 转发
@RequestMapping("fourth")
public String fourth(HttpServletRequest request,HttpServletResponse response){
request.setAttribute("msg", "转发数据");
return "forward:/two/second.do";
}
4、返回map:异步开发的时候,会被转成json格式的
数据绑定
处理器适配器会在执行handle之前,把http请求的信息的数据绑定到handle方法的形参上。
默认支持的参数类型
HttpServletRequest:
HttpServletResponse:
HttpSession
Model:作用:将数据填充到request域中
简单数据类型的绑定
当请求中的参数名和处理器方法的参数名字一致时,会将请求中的参数数据与形参进行绑定
支持java基本数据类型:int、String、double、boolean等。
同时支持多参数。
@RequestParam :
value:绑定的传参的参数名
required:是否是必须传递的,默认值是true
defaultValue:设置默认值
@RequestMapping("third")
public String third(@RequestParam(value="ids",required=false,defaultValue="1")int id,String name){
System.out.println("id:"+id);
System.out.println("name:"+name);
return "user";
}
简单的实体类对象类型的数据绑定(属性都是基本数据类型)
包装实体类对象类型
在jsp中的属性是一个对象时:在实体类中对象属性名.对象中的属性
<input type="text" name="car.carName">```