参考文章
此部分不建议进行XML配置的SpringMVC练习,可直接上手Spring Boot,Spring Boot集成了SpringMVC,且Spring Boot内嵌服务器,不需要自己再下了tomcat。(比较懒的弄tomcat的配置)
文章目录
@Controller和@RequestMapping注解
@Controller 注解用于声明某类的实例是一个控制器。
@RequestMapping 负责将请求映射到对应的控制器方法上。参考文章
- value
- name
- method
- params
SpringMVC 传递参数
- 通过
@RequestParam
接收参数 参考文章
SpringMVC 重定向和转发
Spring MVC 请求方式分为转发、重定向 2 种,分别使用 forward
和 redirect
关键字在 controller
层进行处理。
重定向是将用户从当前处理请求定向到另一个视图(例如 JSP)或处理请求,以前的请求(request)中存放的信息全部失效,并进入一个新的 request 作用域;
转发是将用户对当前处理的请求转发给另一个视图或处理请求,以前的 request 中存放的信息不会失效。
转发是服务器行为,重定向是客户端行为。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/index")
public class IndexController {
@RequestMapping("/login")
public String login() {
//转发到一个请求方法(同一个控制器类可以省略/index/)
return "forward:/index/isLogin";
}
@RequestMapping("/isLogin")
public String isLogin() {
//重定向到一个请求方法
return "redirect:/index/isRegister";
}
@RequestMapping("/isRegister")
public String isRegister() {
//转发到一个视图
return "register";
}
}
SpringMVC ModelAndView
SpringMVC 拦截器
- 通过实现
HandlerInterceptor
接口或继承HandlerInterceptor
接口的实现类(例如HandlerInterceptorAdapter
)来定义; - 通过实现
WebRequestInterceptor
接口或继承WebRequestInterceptor
接口的实现类来定义。
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class TestInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion方法在控制器的处理请求方法执行完成后执行,即视图渲染结束之后执行");
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle方法在控制器的处理请求方法调用之后,解析视图之前执行");
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle方法在控制器的处理请求方法调用之前执行");
return false;
}
}
SpringMVC JSON数据交互
@RequestBody
:用于将请求体中的数据绑定到方法的形参中,该注解应用在方法的形参上。@ResponseBody
:用于直接返回 return 对象,该注解应用在方法上。一般情况下,@ResponseBody 都会在异步获取数据时使用,被其标注的处理方法返回的数据都将输出到响应流中,客户端获取并显示数据。
SpringMVC文件上传
参考文章
MultpartiResolver
接口有以下两个实现类:
StandardServletMultipartResolver
:使用了 Servlet 3.0 标准的上传方式;CommonsMultipartResolver
:使用了 Apache 的 commons-fileupload 来完成具体的上传操作。
SpringMVC文件下载
参考文章
文件下载有以下两种实现方法:
- 通过超链接实现下载:实现简单,但暴露了下载文件的真实位置,并且只能下载 Web 应用程序所在目录下的文件,WEB-INF 目录除外;
- 利用程序编码实现下载:增强安全访问控制,可以下载除 Web 应用程序所在目录以外的文件,也可以将文件保存到数据库中。