一、1.环境搭建
1. 添加依賴
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
2. 在web.xml中配製 SpringMvc框架定義好的Servlet
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<!--
默認的Servlet
當請求發送給Servlet容器之後,如果沒有相匹配的Servlet來處理請求,
則由這個默認的Servlet來處理
-->
<url-pattern>/</url-pattern
2.1 DispatcherServlet的作用
負責啟動SpringIoC容器,Spring容器中定義了大量的javaBean對象,而且对象之间的
依赖关系由Spring容器来维护
当请求到来时,DispatcherServlet 根据当亲的请求路径,到Spring 容器中查找能够处理当前
请求的自己定义的Controller类的对象
3. 编写一个Controller类
@Controller //是为了让Spring容器扫描到,并加入到容器中进行实例化
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model) { //Model相当于 JavaWeb中的范围
model.addAttribute("msg", "hello spring mvc!!!!");
return "hello";
//视图的名称 ---> /WEB-INF/views/hello.jsp
//return后面的 值是 视图的逻辑名,完整的视图文件名 前缀+逻辑名+后缀
//前缀= /WEB-INF/views
//后缀= .jsp
}
}
4. 在 src/main/resources目录中编写 spring的配制文件: spring-mvc.xml
<!-- 打开annotation 配置和 自动扫描 -->
<context:annotation-config />
<context:component-scan base-package="cn.itlaobing.web.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
5. 修改web.xml 让DispatcherServlet在启动的时候,加载指定的配制文件
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过初始化参数配制 spring配置文件的位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<!--
默認的Servlet
當請求發送給Servlet容器之後,如果沒有相匹配的Servlet來處理請求,
則由這個默認的Servlet來處理
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、Spring 框架中的数据校验
1. 引入数据校验的依赖jar包:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
2. 在实体类上添加annotation约束
org.hibernate.validator.constraints 包中定义了这些annotaion
参考:http://blog.youkuaiyun.com/u011851478/article/details/51842157
如:
@NotBlank(message="姓名不能为空") //当姓名为空时,不能实时提交
3. 在Controller的处理器方法上添加annotation
3.1 @Validated Spring框架在调用处理器方法之前会对javaBean进行验证,不管验证通过还是没有通过,都会调用处 理器方法
3.2 为处理器方法添加参数 BindingResult bindingResult,这个参数中保存了验证的结果
4. 在处理器方法中判断验证没有通过的逻辑
if(bindingResult.hasErrors()) {
model.addAttribute("student", student);
return "student/create";
}
5. 在视图页面中显示错误消息
<s:errors path="name" />
----------------------------------------------------------------------------------------------------------------
@ModelAttribute 的应用
①修饰方法:当请求到来的时候,处理器方法还没开始执行的时候,首先执行@ModelAttribute修饰的方法,然后再执行处理器方法,
②修饰方法的属性 , 当框架调用处理器方法的时候,首先到Model中查找,如果没有找到,则创建一个实例,如果找到了,就使用它,然后再进行参数绑定,
在进行异步处理的时候只需要在 处理器方法上添加@ResponseBody
SpringMVC中提交的请求路径中可以携带参数,这种风格称为restful 的路径风格
定义的时候,在 @GetMapping或者 @RequestMapping 或者 @PostMapping中使用 {变量}
比如: /students/{id} 提交数据
在 处理器方法中,使用 @@PathVariable("路径变量名") 来获取变量值,如果”路径变量名"省略,
则使用 参数的名称
@GetMapping("/{id}/update")
public String update(@PathVariable Long id) {
return "";
-------------------------------------------------------------------------------------------------------------------------------------------------
因为在web.xml文件中配制的Servlet是默认的Servlet,
静态资源如: js,css,图片 这个文件的请求将会被 这个Servlet拦截
,系统中没有处理这些请求的 Controller就会导致这些资源不能被浏览器加载,出现404错误。
假设 静态资源存放的目录是 src/main/webapp/assets
此时需要在 Spring的配制文件中配制:
location表示静态资源的存放的目录 “/”表示应用程序的根目录
mapping表示静态资源的请求, /**表示子目录,会匹配 /assets/lib/xxxxx/xxxxxx.js
如果是 一个* ,则表示一个目录, ** 表示多级目录
<mvc:resources location="/assets/" mapping="/assets/**">
</mvc:resources>
-------------------------------------------------------------------------------------------------------------------------------------------------------
当请求到达处理器方法的时候,SpringMVC会检测处理器方法的参数,如果这个参数是一个自定义的实体类,
此时框架就会 实例化这个类,然后从请求参数中获取数据,将数据set到实体类中,此时需要注意的是:
请求参数的 名称必须与 实体类中的field 名称一致
SpringMVC中的重定向,只需要返回字符串 "redirect:xxxxx",xxxx是地址
-------------------------------------------------------------------------------------------------------------------------------------------------------
它能够修饰: 方法和方法的参数
1. 修饰方法
只要有请求到来的时候,处理器方法还没有开始执行的时候,首先执行@ModelAttribute修饰的方法,然后才执行处理器方法
2. 修饰方法的参数
当框架调用处理器方法的时候,首先到Model中查找,
如果没找到,则创建一个实例,如果找到了,就使用它,然后再进行参数绑定,如果有验证则进行验证