第一章、 响应数据和结果视图
1.1 三层架构和MVC模型
第二章、 SpringMVC实现文件上传
2.1 传统方式实现文件上传
2.2 SpringMVC传统方式实现文件上传
- 其中的配置文件解析器SpringMVC已经完成了。只需要手动配置即可。
- 注:配置bean中的id不能变,只能是MultipartResolver
- 具体实现步骤
-
导包文件上传的jar包
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
-
手动配置
-
UserController层,方法的编写
-
2.3 SpringMVC跨服务器方式实现文件上传
- 具体实现步骤
- 导包开发需要的jar包
<dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.18.1</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.18.1</version> </dependency>
- userController层,方法的编写
- 导包开发需要的jar包
第三章、 SpringMVC的异常处理
3.1 异常处理思路
3.2 异常处理代码编写流程
- 首先是项目的基本搭建
- 选择webapp作为项目
- 将pom.xml配置
- 将web.jsp配置
- 将resources/springmvc.xml配置
- 替换原来的index.jsp页面
- 编写java/cn.blood.controller/UserController类
- 最后加上WEB-INF/gages/success.jsp页面
- 步骤一:编写自定义异常类(做提示信息的)
- 也可加构造方法
- 步骤二:编写异常处理器
3. 步骤三:配置异常处理器(跳转到提示页面)
4. 步骤四:创建提示页面
第四章、 SpringMVC中的拦截器
4.1 拦截器介绍思路
- 总结:过滤器什么都拦,拦截器只能拦截Controller方法,并且只能在SpringMVC的框架中去使用。
- 拦截器能做的事,过滤器都能做。但是过滤器能做的事拦截器不一定能做。
4.2 入门拦截器代码编写流程
- 首先是项目的基本搭建
- 选择webapp作为项目
- 将pom.xml配置
- 将web.jsp配置
- 将resources/springmvc.xml配置
- 替换原来的index.jsp页面
- 编写java/cn.blood.controller/UserController类
- 最后加上WEB-INF/gages/success.jsp页面
- 步骤一:编写拦截器类,实现HandlerInterceptor接口
- 实现该接口不用写方法。
- 因为别人定义了方法,并且帮你实现了。
- 如果想要自己写,呢就重写方法(ctrl + o)
- 其中的方法(有三个,下面说):
- preHandle:预处理,controller方法执行前
- 实现该接口不用写方法。
- ==步骤二:配置拦截器
4.3 拦截器方法接口演示
- 重写方法(用ctrl + o来找)
- 共有三个
- preHandle:主要做逻辑的判断(如:登录了放行,没登录跳转到登录页面)
- 预处理,controller方法执行前
/** * 自定义拦截器 */ public class MyInterceptor1 implements HandlerInterceptor { /** * * 预处理,controller方法执行前 * * return true:放行,执行下一个拦截器,如果没有就执行controller中的方法 * * return false:不放行(可以使用request,response去跳转到某个页面来做提示信息) * @param request * @param response * @param handler * @return * @throws Exception */ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("MyInterceptor1执行了。。。前"); //写了下面跳转页面的方法后这句话然后不放行,,就会直接跳过controller //request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request, response); return false; } }
- postHandle
- 后处理方法,controller方法执行后,success.jsp执行之前
- 没有返回值
/** * 自定义拦截器 */ public class MyInterceptor1 implements HandlerInterceptor { /** * * 后处理方法,controller方法执行后,success.jsp执行之前 * * 没有返回值 * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("MyInterceptor1执行了。。。后"); //写了下面跳转页面的方法后控制台会显示success执行了,但是会跳转到错误页面中 //request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request, response); } }
- afterCompletion:主要做释放资源(关闭流)
- success.jsp页面执行后,该方法会执行
- 不能在跳转到别的页面了
/** * 自定义拦截器 */ public class MyInterceptor1 implements HandlerInterceptor { /** * * success.jsp页面执行后,该方法会执行 * * 不能在跳转到别的页面了 * @param request * @param response * @param handler * @param ex * @throws Exception */ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("MyInterceptor1执行了。。。最后"); } }
- preHandle:主要做逻辑的判断(如:登录了放行,没登录跳转到登录页面)
4.4 多个拦截器演示
- 再次创建一个自定义拦截器类
- 配置拦截器时候,新建一个mvc:interceptor
<!-- 配置拦截器 --> <mvc:interceptors> <!-- 配置特定的拦截器 --> <mvc:interceptor> <!-- 要拦截的具体方法(与exclude-mapping只配置一个) --> <mvc:mapping path="/user/*"/> <!-- 不要拦截的方法(与mapping只配置一个) <mvc:exclude-mapping path=""/> --> <!-- 配置拦截器对象--> <bean class="cn.blood.interceptor.MyInterceptor1" /> </mvc:interceptor> <!-- 配置第二个拦截器 --> <mvc:interceptor> <!-- 要拦截的具体方法(与exclude-mapping只配置一个) --> <!-- 表示拦截controller所有方法--> <mvc:mapping path="/**"/> <!-- 不要拦截的方法(与mapping只配置一个) <mvc:exclude-mapping path=""/> --> <!-- 配置拦截器对象--> <bean class="cn.blood.interceptor.MyInterceptor2" /> </mvc:interceptor> </mvc:interceptors>
- 执行结果: