轻量级JavaEEWeb框架技术PPT第13章-Spring MVC 高级应用.pptx
《轻量级JavaEEWeb框架技术PPT第13章-Spring MVC 高级应用.pptx》由会员分享,可在线阅读,更多相关《轻量级JavaEEWeb框架技术PPT第13章-Spring MVC 高级应用.pptx(138页珍藏版)》请在三一文库上搜索。
1、13.1什么是Spring MVC拦截器13.2实现Spring MVC拦截器13.3登录权限认证13.4文件上传13.5文件下载13.6Spring MVC的表单标签库介绍13.7Spring MVC 表单标签实例13.8Spring MVC 国际化方案13.9基于浏览器的国际化13.10基于HttpSession的国际化13.11基于HttpSession的国际化(自动处理设置)Spring MVC 中的拦截器(Interceptor)类似于Servler 中的过滤器(Filter)。拦截器是框架基石,Spring MVC自身的功能就是通过拦截器实现的;也是框架扩展的基石,用于对处理器进行
2、预处理和后处理。常用于日志记录、权限管理、性能监控、通用行为等。13.2.1实现拦截器方法13.2.2实现拦截器接口HandlerInterceptor13.2.3实现WebRequestInterceptor 接口SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的。在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式。第一种方式是要定义的Interceptor类要实现了Spring 的HandlerInterceptor 接口,或者是这个类继承实现了HandlerInterceptor 接口的类,例如Spr
3、ing 已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter。第二种方式是实现Spring的WebRequestInterceptor接口,或者是继承实现了WebRequestInterceptor的类5。HandlerInterceptor 接口中定义了三个方法,就是通过这三个方法来对用户的请求进行拦截处理的。boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler)throws Exception实现处理器的
4、预处理(如检查登陆),第三个参数为响应的处理器,自定义Controller *返回值:true表示继续流程(如调用下一个拦截器或处理器);false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时需要通过response来产生响应void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView)throws Exception实现处理器的后处理(但在渲染视图之前),此时可以通过modelAndView(模型和视图对
5、象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex)throws Exception整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中public class MyInterceptor implement
6、s HandlerInterceptor /*在处理方法之前执行,一般用来做一些准备工作:例如日志,权限检查 *如果返回false 表示被拦截,将不会执行处理方法 *返回true继续执行处理方法 */Override public boolean preHandle(HttpServletRequest req,HttpServletResponse resp,Object handler)throws Exception System.out.println(执行preHandler-+req.getRemoteHost()+req.getRemoteUser();/resp.sendRed
7、irect(index.jsp);return true;/*在处理方法执行之后,在渲染视图执行之前执行,一般用来做一些清理工作 */Override public void postHandle(HttpServletRequest req,HttpServletResponse resp,Object handler,ModelAndView mv)throws Exception System.out.println(执行postHandler);/*在视图渲染后执行 一般用来释放资源 */Override public void afterCompletion(HttpServletR
8、equest arg0,HttpServletResponse arg1,Object arg2,Exception arg3)throws Exception System.out.println(执行afterCompletion);WebRequestInterceptor 中也定义了三个方法,和HandlerInterceptor中的三个方法相似,也是通过这三个方法来实现拦截的。这三个方法都传递了同一个参数WebRequest,那么这个WebRequest 是什么呢?这个WebRequest 是Spring 定义的一个接口,它里面的方法定义都基本跟HttpServletRequest
9、一样,在WebRequestInterceptor 中对WebRequest 进行的所有操作都将同步到HttpServletRequest 中,然后在当前请求中一直传递5。该方法将在请求处理之前进行调用,也就是说会在Controller 方法调用之前被调用WebRequest 的setAttribute(name,value,scope)SCOPE_REQUEST:它的值是0,代表只有在request 中可以访问。SCOPE_SESSION:它的值是1,如果环境允许的话它代表的是一个局部的隔离的session,否则就代表普通的session,并且在该session范围内可以访问。SCOPE_G
10、LOBAL_SESSION:它的值是2,如果环境允许的话,它代表的是一个全局共享的session,否则就代表普通的session,并且在该session 范围内可以访问。该方法将在请求处理之后,也就是在Controller 方法调用之后被调用,但是会在视图返回被渲染之前被调用,所以可以在这个方法里面通过改变数据模型ModelMap 来改变数据的展示。该方法会在整个请求处理完成,也就是在视图返回并被渲染之后执行。所以在该方法中可以进行资源的释放操作。编写权限认证实例。查看书籍,必须登录才能查看,只有登录才能访问,没有登录转到登录页面。页面有登录页面、主页面和查看书籍页面,主页面添加查看书籍链接,
11、添加退出登录链接。13.3.1编写登录验证拦截器13.3.2编写登录Controller13.3.3配置拦截器13.3.4编写登录页面13.3.5编写主页面13.3.6编写查看书籍页面13.3.7运行结果创建拦截器类LoginInterceptor,继承实现了HandlerInterceptor接口的HandlerInterceptorAdapter类。重写preHandle方法。(1)首先判断当前请求是否是登录/login请求,是返回true,继续执行。(2)从session中获取用户session USER_SESSION,判断是否为空,不为空表示用户已经登录成功,返回true,继续执行。
12、(3)用户session USER_SESSION为空,说明用户没有登录,跳转到登录页面,返回false,不再继续执行当前请求。public class LoginInterceptor extends HandlerInterceptorAdapter Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler)throws Exception/获取请求的RUi:去除http:localhost:8080这部分剩下的String uri=requ
13、est.getRequestURI();/UTL:除了login.jsp是可以公开访问的,其他的URL都进行拦截控制if(uri.indexOf(/login)=0)return true;/获取sessionHttpSession session=request.getSession();User user=(User)session.getAttribute(USER_SESSION);/判断session中是否有用户数据,如果有,则返回true,继续向下执行if(user!=null)return true;/不符合条件的给出提示信息,并转发到登录页面request.setAttribu
14、te(msg,您还没有登录,请先登录!);request.getRequestDispatcher(/WEB-INF/jsp/loginForm.jsp).forward(request,response);return false;Controllerpublic class UserController/*向用户登录页面跳转*/RequestMapping(value=/login,method=RequestMethod.GET)public String toLogin()return loginForm;登录验证请求/login,请求方法为Post。参数User user,获得提交的
15、用户名与密码;参数Model model用户存放与view交换的信息;参数HttpSession session,把登录成功后的user信息保存在session,作为登录成功的标志。方法中,首先判断用户名密码是否正确,正确保存用户信息到session中,并且返回return redirect:main,重定向到主页面main;如图不正确返回存在错误信息到model中,并且返回return loginForm,重定向到登录页面。RequestMapping(value=/login,method=RequestMethod.POST)public String login(User user,M
16、odel model,HttpSession session)/获取用户名和密码String username=user.getUsername();String password=user.getPassword();/些处横板从数据库中获取对用户名和密码后进行判断if(username!=null&username.equals(admin)&password!=null&password.equals(admin)/将用户对象添加到Session中session.setAttribute(USER_SESSION,user);/重定向到主页面的跳转方法return redirect:ma
17、in;model.addAttribute(msg,用户名或密码错误,请重新登录!);return loginForm;登录请求方法为get请求,请求路径为/login,方法中没有逻辑,直接返回loginForm,调用登录页面loginForm.jsp。/*向用户登录页面跳转*/RequestMapping(value=/login,method=RequestMethod.GET)public String toLogin()return loginForm;主页面请求方法为get请求,请求路径为/main,方法中没有逻辑,直接返回main,调用主页面main.jsp。RequestMapp
18、ing(value=/main)public String toMain()return main;查看书籍请求方法为get请求,请求路径为/viewBook,方法中没有逻辑,直接返回viewBook,调用查看书籍页面viewBook.jsp。RequestMapping(value=/viewBook)public String toViewBook()return viewBook;退出登录请求方法为get请求,请求路径为/logout,参数为HttpSession session,方法中通过session.invalidate()清除session,然后返回redirect:login,
19、重定向到登录请求/login。RequestMapping(value=/logout)public String logout(HttpSession session)/清除sessionsession.invalidate();/重定向到登录页面的跳转方法return redirect:login;在spring配置文件springContext.xml中配置拦截器。配置要素是拦截什么?由那个拦截器类拦截?(1)拦截什么?拦截所有请求。(2)有那个拦截器类拦截?拦截器类org.ldh.LoginInterceptor 登录页面loginForm.jsp Form表单有两个输入框,输入用户名
20、与密码,有提交按钮,提交方式为post,form表单action为/login。用户名:密 码:主页面main.jsp 显示登录用户名,从session中取出,有两个链接,一个是退出登录链接/logout,一个是查看图书链接/viewBook。当前用户:$USER_SESSION.username你已经登录!退出登录查看图书查看书籍viewBook.jsp比较简单就是出版书的文本文件上传是项目开发中最常见的功能。为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会
21、把用户选择的文件以二进制数据发送给服务器。一旦设置了enctype为multipart/form-data,浏览器即会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HTTP响应。在2003年,Apache Software Foundation发布了开源的Commons FileUpload组件,其很快成为Servlet/JSP程序员上传文件的最佳选择。Servlet3.0规范已经提供方法来处理文件上传,但这种上传需要在Servlet中完成。而Spring MVC则提供了更简单的封装。在WebContent/WEB-INF下创建一个content文件夹,用于放
22、文件的上传、下载等jsp文件,创建uploadForm.jsp文件,演示Spring MVC的文件上传:负责上传文件的表单和一般表单有一些区别,负责上传文件的表单的编码类型必须是“multipart/form-data”。13.4.1Spring MVC MultipartFile13.4.2装配MultipartResolver处理上传13.4.3拷贝库文件13.4.4创建上传页面13.4.5创建成功页面13.4.6编写上传Controller类13.4.7运行效果Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。Spring M
23、VC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件。byte getBytes():获取文件数据。String getContentType:获取文件MIME类型,如image/jpeg等。InputStream getInputStream():获取文件流。String getName():获取表单中文件组件的名字。String getOriginalFilename():获取上传
24、文件的原名。Long getSize():获取文件的字节大小,单位为byte。boolean isEmpty():是否有上传文件。void transferTo(File dest):将上传文件保存到一个目录文件中。SpringMVC上下文中默认没有装配MultipartResolver。因此,默认情况下其不能处理文件上传工作。如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver。10485760 UTF-8 Spring MVC 上传文件处理类mons.CommonsMultipartResolver需要依赖commons-fileupload、com
25、mons-io-1.3.2包,导入这两个包到lib目录下创建上传页面文件uoload.jsp,form表单method属性设置为post(method=post),enctype 属性设置为multipart/form-data(enctype=multipart/form-data),上传提交请求为upload。因此,action属性为upload。文件描述:请选择文件:为了展示上传效果,这个实例中,上传为图片文件,然后把上传的图片文件在成功页面展示。创建上传页面success.jsp,在页面中显示上传的图片上传成功!文件标题:$description文件为:创建一个FileUploadDo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 轻量级JavaEEWeb框架技术PPT第13章-Spring MVC 高级应用 轻量级 JavaEEWeb 框架 技术 PPT 13 Spring 高级 应用
链接地址:https://www.31doc.com/p-21712627.html