什么是SpringMVC
它是基于MVC开发模式的框架,用来优化控制器,它是Spring家族的一员.它也具备IOC和AOP
什么是mvc?
它是一种开发模式,它是模型视图控制器的简称,所有的web应用都是基于MVC开发
M:模型层:包含实体类,业务逻辑层,数据访问层
V:视图层,html,JavaScript,vue 用来显示数据
C:控制器,它是用来接收科幻短的请求,并返回响应到客户端的组件
优点
1)轻量级,基于MVC的框架
2)易于上手,容易理解,功能强大
3)它具备IOC和AOP
4)完全基于注解开发
@RequestMapping
1)此注可加在方法是,是为方法注册一个可以访问的名称(路径)
2)此注解可以加在类上,相当于是包名,区分不同类中相同的action的名称
3)可以区分post和get请求
五种提交数据的优化方式
1)单个数据提交
2)对象封装提交数据
在提交请求中,保证请求参数的名称与实体类中成员变量的名称一致,则可以自动提交数据,自动类型转换,自动封装数据到对象中
3)动态占位符提交
仅限于超链接或地址栏提交数据,它是1杠1址1大括号。使用注解来进行
@PathVariable(“uname”)====>用来解析路径中的请求参数
4)映射名称不一致
提交请求参数与action方法的形参的名称不一致,使用注解来解析
@RequestParam =====>专门用来解决名称不一致
5)手工提取数据
处理器方法的返回值
1)String:客户端资源的地址,自动拼接前缀和后缀,还可以屏蔽自动拼接字符串,可以指定返回的路径
2)Object:返回json格式的对象,自动将对象或集合转为json,使用的是Jackson工具进行转换,必须要提那家jackson依赖,一般用户ajax请求
3)void:无返回值,一般用于ajax请求
4)基本数据类型,用于ajax请求
5)ModelAndView:返回数据和视图对象
完成ajax请求访问服务器,返回学生集合
1)添加jackson依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
2)在webapp目录下新建js目录,添加jQuery函数库
3)在index.jsp页面上导入函数库
4)在action上添加注解@ResponseBody,用来出来ajax请求
5)在springmvc.xml文件中添加注解驱动<mvc:annotationdriven/>,
它用来解析@ResponseBody注解
请求转发和重定向
请求转发基于服务器的跳转 forward:
重定向是基于客户端的跳转 Redirect:
springmvc默认参数概念
不需要去创建,直接拿来使用
HttpServletRequest:
HttpServletResponse
HttpSession
Model
Map
ModelMap
注意:Map,Model,ModelMap和request一样,都是用请求转发作用域进行数据传递,所以服务器端的跳转必须是请求转发
SpringMVC的拦截器
针对请求和响应进行额外的处理,在请求和响应的过程中添加预处理,后处理和最终处理
拦截器的执行时机
1)preHandle():在请求处理之前进行操作,预处理
2)postHandle():在青丘被处理之后,但结果还没有渲染前进行操作,可以改变响应结果,后处理
3)afterCompletion:在所有的请求响应结束后执行善后工作,清理对象,关闭资源,最终处理
拦截器实现的两种方式
1)继承HandlerInterceptorAdapter的父类
2)实现HandlerInterceptorAdapter接口,实现的接口(接口中的方法默认实现),推荐使用实现接口的方式
拦截器实现步骤
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
1)改造登录方法,在session中存储用户信息,用于权限验证 request.getSession().setAttribute(“users”,name);
2)开发拦截器的功能,实现HandlerInterceptorAdapter接口,重写preHandle()方法
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 是否登陆过的判断
if (request.getSession().getAttribute("users")==null){
// 此时没有登录,打回到登录页面 给出提示
request.setAttribute("msg","请返回重新登录");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}
return true; //执行请求
}
}
3)在springmvc.xml中注册拦截器
<!-- 注册拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 映射要拦截的请求-->
<mvc:mapping path="/**"/>
<!-- 设置放行的请求-->
<mvc:exclude-mapping path="/showLogin"/>
<mvc:exclude-mapping path="/login"/>
<!-- 配置具体的拦截器实现功能的类-->
<bean class="com.huaze.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
ps:404找不到资源 配置视图解析器
<!--添加视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/JSP"></property>
<property name="suffix" value=".jsp"></property>
</bean>