黑马就业班——SpringMVC框架:part2

1、响应数据和结果视图
1.1 Controller控制器类方法的返回值类型
  参考项目:springmvc_day02_01_response 。
  controller控制器类的方法可以返回:字符串、void、ModelAndView对象
  注意:

1、success.jsp标签记得加:isELIgnored="false"属性,否则在jsp文件无法使用EL表达式!
如:<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>

2、使用的时候不需要经常重启服务器,可以如下图进行重新部属服务器。

在这里插入图片描述

1.2 转发和重定向
  参考项目:springmvc_day02_01_response 。(这部分用的比较少)

1.3 ResponseBody 响应 json 数据
  参考项目:springmvc_day02_01_response 。
   @ResponseBody 作用:该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如: json,xml 等,通过 Response 响应给客户端。
  JQuery的使用说明。

1、我们需要把JQuery的资源文件—— jquery.min.js 放到webapp目录下面。注意,这些js文件不是jar包,而是类似于js的类库,因此我们无法通过在pom.xml导入jar包坐标的方式引入,而必须把相应的资源文件当道webapp下。
2、我们在相应的JS文件引入JQ的资源包:<script src="js/jquery.min.js"></script>  。这样,我们就可以在JS文件中试验JQ来构建AJAX异步请求。
3、关于使用JQuery实现Ajax,可以参考JQuery的文档。

2、SpringMVC实现文件上传
  这部分任意出bug,参考自己的文章:《使用传统方式上传文件到服务器、使用SpringMVC上传文件到服务器、使用SpringMVC跨服务器上传文件三种方式上传过程中出现的bug总结!!》

2.1 传统方式上传
  回顾之前的文件上传方式:视频9,《大纲笔记》—2.1文件上传的回顾。
  首先是传统方式上传文件,参考项目:springmvc_day02_02_fileupload 的代码,参考视频10。

说明:传统方式的文件上传, 指的是我们上传的文件和访问的应用存在于同一台服务器上。并且上传完成之后,浏览器可能跳转。
//项目上传路径:G:\idea_java_project\springmvc_day02_02_fileupload\target\springmvc_day02_02_fileupload\uploads\
//我们所说的项目根目录是:G:\idea_java_project\springmvc_day02_02_fileupload\target\springmvc_day02_02_fileupload

  注意!!!(大坑)
1)我们前面实现传统方式上传,可以成功实现上传。但是我们在 springmvc.xml 中配置了 SpringMVC 的配置文件解析器对象 CommonsMultipartResolver 后,我们使用传统方式上传的时候,文件项集合 List 就为空,此时无法完成上传。
  出现这种情况的原因是,之前没有配置SpringMVC的文件解析器对象的时候,Request对象是HttpServletRequest(其实是他的子类RequestFacade)。而现在,SpringMVC的文件解析器将 HttpServletRequest 封装成为 DefaultMultipartHttpServletRequest,导致fileList = upload.parseRequest(request);获取不到上传的对象所以List为空。
  因此,我们在使用传统方式上传文件的时候,不要配置 文件解析器对象CommonsMultipartResolver,此时传统方式就可以实现上传。
(上面的情况通过debug可以得出结论)

2)如果我们Tomcat服务器部属的是 war exploded ,最后项目会打包部属到我们项目所在位置;如果使用war包,最后项目会打包部属到 Tomcat服务器安装目录的webapps位置。
  比如,我们使用 war exploded,最后项目部属到我们的项目目录下,而图片也是上传到项目目录下:G:\idea_java_project\springmvc_day02_02_fileupload\target\springmvc_day02_02_fileupload\uploads
  当我们使用war包的时候,发现文件上传到 Tomcat安装位置的 webapps 下面:E:\Tomcat\apache-tomcat-8.5.31\webapps\Application\uploads\ ("\Application" 是项目虚拟目录)
(后面统一使用war exploded 即可)

2.2 SpringMvc的方式实现文件的上传
  我们再使用SpringMvc的方式实现文件的上传,同样参考项目:springmvc_day02_02_fileupload 的代码,参考视频11-14,参考《大概笔记》—— 2.2springmvc 传统方式的文件上传。
  SpringMvc文件上传原理:见视频11
在这里插入图片描述

2.3 springmvc 跨服务器方式的文件上传

在实际开发中,我们会有很多处理不同功能的服务器。例如:
	应用服务器:负责部署我们的应用
	数据库服务器:运行我们的数据库
	缓存和消息服务器:负责处理大并发访问的缓存和消息
	文件服务器:负责存储用户上传文件的服务器。

在这里插入图片描述
在这里插入图片描述
  具体如何实施,见视频13-14.
1)我们需要导入跨服务器文件上传的jar包—— jersey的包。
2)我们需要2个服务器:ApplicationTomcat(应用服务器的虚拟目录)、FileTomcat(文件服务器的虚拟目录)。我们创建一个新的项目:fileuploadservlet,这个项目部属 FileTomcat(文件服务器),这个项目的服务器只是用来存储上传的文件。而在 springmvc_day02_02_fileupload 项目部属ApplicationTomcat(应用服务器)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)注意,此时应用服务器文件的上传路径为:http://localhost:8888/file/uploads/ ,这是文件服务器的相应文件夹路径。我们先访问应用服务器,应用服务器再将文件上传到 文件服务器。http://localhost:8888/file/uploads/ 路径在项目中的真实路径为:G:\idea_java_project\fileuploadservlet\target\fileuploadservlet\uploads
  原来文件实际上传路径 G:\idea_java_project\fileuploadservlet\target\fileuploadservlet 路径下没有“/uploads”文件夹,需要我们自己创建一个文件夹,否则出错。
在这里插入图片描述
  注意,出现returned a response status of 403 Forbidden 错误。翻译过来就是返回了“被禁止(403)的响应”。上传文件涉及到读写权限,这个报错的意思就是服务器(Tomcat)没有写入的权限。
  找到Tomcat的目录,依次打开/conf/web.xml文件:
在这里插入图片描述
  在相应Servlet标签下加如下内容:

<init-param>
	<param-name>readonly</param-name>
	<param-value>false</param-value>
</init-param>

在这里插入图片描述
  参考文章:添加链接描述


3、SpringMVC 中的异常处理
  参考项目代码:springmvc_day02_03_exception
  我们在编程过程中,web层,service层,dao层都可能出现异常,每一层出现异常都会往上抛出,知道最后抛出给浏览器,浏览器页面显示异常,流程如下:
在这里插入图片描述
  上面这种异常处理方式,我们之前就这样处理,但是这样用户体验不好。我们在前端控制器捕获异常,随后将异常交给异常处理器处理,异常处理器根据异常会跳转到友好页面,返回给客户端,这样在客户端浏览器就显示相应的友好提示页面。
在这里插入图片描述
异常处理流程:

首先,如果我们web层抛出异常给前端控制器,前端控制器没有配置异常处理,则会将异常抛给浏览器。

 使用SpringMVC做异常处理的步骤为:
 1-编写自定义异常类(做提示信息的)
 2-编写异常处理器类
 3-配置异常处理器(跳转到提示页面)

	我们在web层捕获自定义的异常,抛出给前端控制器。 随后,我们编写异常处理器类,异常处理器类必须实现 HandlerExceptionResolver 接口。 接下来,我们在 springmvc.xml 将自定义的异常处理器 SysExceptionResolver 配置好。 这样,前端控制器获取到web层抛出的我们自定义的异常,就会调用自定义的异常处理器来处理异常,并跳转到相应页面。

4、SpringMVC 中的拦截器
  参考《大概笔记》——第4章 SpringMVC 中的拦截器,参考项目:springmvc_day02_04_interceptor。

	Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器(Controller类)进行预处理和后处理。用户可以自己定义一些拦截器来实现特定的功能。
	谈到拦截器,还要向大家提一个词——拦截器链(Interceptor Chain)。拦截器链就是将拦截器按一定的顺
序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
	说到这里,可能大家脑海中有了一个疑问,这不是我们之前学的过滤器吗?是的它和过滤器是有几分相似,但是也有区别,接下来我们就来说说他们的区别:
	过滤器是 servlet 规范中的一部分, 任何 java web 工程都可以使用(SpringMVC项目也可以使用)。
	拦截器是 SpringMVC 框架自己的,只有使用了 SpringMVC 框架的工程才能用。
	过滤器在 url-pattern 中配置了/ * 之后,可以对所有要访问的资源拦截。
	拦截器它是只会拦截访问的控制器(Controller)方法,如果访问的是 jsp,html,css,image 或者 js 是不会进行拦截的。它也是 AOP 思想的具体应用。
我们要想自定义拦截器, 要求必须实现: HandlerInterceptor 接口。
	拦截器能做的事情,过滤器全部可以做;但是过滤器的一些功能拦截器无法实现。

在这里插入图片描述

  • 此处快捷键:Ctrl+O,可以快速查找可以重写的方法,进行方法的重写。
  • Ctrl+N:调出查找框
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值