SSM开发实战教程第11章-Spring-MVC关键技术课件.pptx

上传人(卖家):三亚风情 文档编号:3370797 上传时间:2022-08-24 格式:PPTX 页数:108 大小:845.77KB
下载 相关 举报
SSM开发实战教程第11章-Spring-MVC关键技术课件.pptx_第1页
第1页 / 共108页
SSM开发实战教程第11章-Spring-MVC关键技术课件.pptx_第2页
第2页 / 共108页
SSM开发实战教程第11章-Spring-MVC关键技术课件.pptx_第3页
第3页 / 共108页
SSM开发实战教程第11章-Spring-MVC关键技术课件.pptx_第4页
第4页 / 共108页
SSM开发实战教程第11章-Spring-MVC关键技术课件.pptx_第5页
第5页 / 共108页
点击查看更多>>
资源描述

1、SSM开发实战教程第第11章章 Spring MVC关键技术关键技术 当处理器完成请求处理后向其它资源进行跳转时,有两种跳转方式:请求转发与重定向。根据跳转的资源类型,分为两类:跳转到页面与跳转到其它处理器。请求转发的页面,可以是 WEB-INF 中页面,但重定向的页面不能为 WEB-INF中的页面的,因为重定向相当于用户重新发出一次请求,而用户是不可以直接访问 WEB-INF 中的资源。11.1 转发与重定向转发与重定向 当处理器方法返回ModelAndView 时,跳转到指定的ViewName,默认情况下使用的是请求转发,当然也可显式的进行请求转发。此时,需在setViewName()指定

2、的视图前添加forward关键字,一旦添加了forward关键字,控制器方法返回的视图名称就不会再与视图解析器中的前辍与后辍进行拼接,所以必须写出相对于项目根的完整路径才能返回正确的视图。11.1.1 请求转发到其他页面请求转发到其他页面 当通过请求转发跳转到目标资源(页面或Controller)时,若需要目标资源传递数据,可以使用 HttpRequestServlet,HttpSession,还可以将数据存放于ModelAndView中的Model中。目标页面则通过 EL 表达式来访问该数据。下面案例演示使用ModelAndView的情形。项目案例项目案例:用户注册完毕后,显示用户的注册信息

3、。(项目源码见本书配套源码:第11章/转发与重定向/springmvc17)RequestMapping(/doregister.do)public ModelAndView doRegister(User user)ModelAndView mv=new ModelAndView();mv.addObject(user,user);mv.setViewName(forward:/WEB-INF/jsp/info.jsp);return mv;关键代码 当前控制器的处理方法处理完毕后也可不返回视图,而是转发给下一个控制器方法继续处理。项目案例:项目案例:用户注册成功后,转发给其他方法,由其他方

4、法返回视图显示当前用户的基本信息。(项目源码见本书配套源码:第11章/转发与重定向/springmvc18)11.1.2 请求转发到其他控制器方法请求转发到其他控制器方法RequestMapping(/doregister.do)public ModelAndView doRegister(User user)ModelAndView mv=new ModelAndView();mv.addObject(user,user);mv.setViewName(forward:second.do);return mv;RequestMapping(/second.do)public ModelAnd

5、View doSecond(User user)ModelAndView mv=new ModelAndView();mv.addObject(user,user);mv.setViewName(forward:/WEB-INF/jsp/info.jsp);return mv;关键代码 可以发现,参数仍然可以在两个方法之间传递,第一个方法把参数存进ModelAndView,第二个方法用同名形式参数接收。mv.setViewName(forward:second.do);这行代码实现转发到另一个方法second.do继续处理。当处理器方法返回String 时,该String 即为要跳转的视图。必

6、须在其前面加上前辍 forward:,显式的指定跳转方式为请求转发。视图解析器将不会对其进行前辍与后辍的拼接,该String中的路径须是完整路径。请求转发的目标资源无论是一个页面,还是一个Controller,用法一样。项目案例项目案例:用户注册成功后,转发给其他方法,由其他方法返回视图显示当前用户的基本信息。(项目源码见本书配套源码:第11章/转发与重定向/springmvc19)11.1.3 返回返回String时的请求转发时的请求转发 RequestMapping(/doregister.do)public String doRegister(User user,HttpServletR

7、equest request)request.setAttribute(user,user);return forward:/WEB-INF/jsp/info.jsp;注意:这种情况不能使用ModelAndView来传递数据,但可以使用HttpServletRequest等来传递数据。关键代码 在重定向时,请求参数不能通过HttpServletRequest向目标资源中传递。可以通过以下方式之一来传递请求参数。一、一、通过通过ModelAndView中的中的Model携带参数携带参数 当ModelAndView中的Model 存入数据后,视图解析器InternalResourceViewRes

8、olver 会将map中的key 与value,以请求参数的形式放到请求的URL后。注意事项:11.1.4 请求重定向到其他页面请求重定向到其他页面(1).放入到Model中的value,只能是基本数据类型与 String,不能是自定义类型的对象数据。原因是视图解析器会将Map的value放入到URL后作为请求参数传递出去,任何类型的value,都会变为String。(2).重定向的面页中是无法从request 中读取数据的。但由于map中的key与value,以请求参数的形式放到了请求的URL后,所以,页面可以通过EL表达式中的请求参数param读取。(3).重定向的页面不能是/WEB-IN

9、F下的页面。因为重定向相当于客户端发出一次新的请求,而客户端是不可以请求/WEB-INF下的资源的。项目案例项目案例:用户登录成功后,通过重定向页面实现登录后显示用户信息。(项目源码见本书配套源码:第6章/转发与重定向/springmvc20)RequestMapping(/dologin.do)public ModelAndView doLogin(User user)ModelAndView mv=new ModelAndView();mv.addObject(username,user.getUsername();mv.addObject(password,user.getPasswor

10、d();mv.setViewName(redirect:/show.jsp);return mv;关键代码 二二.使用使用 HttpSession 携带参数携带参数 项目案例项目案例:用户登录成功后,通过重定向页面实现登录后显示用户信息。(项目源码请见:SSM教材源码/第11章/转发与重定向/springmvc21)RequestMapping(/dologin.do)public ModelAndView doLogin(User user,HttpSession session)ModelAndView mv=new ModelAndView();session.setAttribute(

11、user,user);mv.setViewName(redirect:/show2.jsp);return mv;关键代码 重定向到其它 Controller方法时,携带参数可以采用前面的其中一个方式。而目标Controller 接收这些参数,也有多种方式。一通过一通过 ModelAndView的的Model携带参数携带参数 目标Controller在接收这些参数时,只要保证目标 Controller的方法形参名称与发送 Controller 发送的参数名称相同即可接收。当然,目标 Controller 也可以进行参数的整体接收。只要保证参数名称与目标 Controller接收参数类型的类的属

12、性名相同即可。11.1.5 请求重定向到其他控制器请求重定向到其他控制器 项目案例项目案例:用户登录成功后,通过重定向页面实现登录后显示用户信息。(项目源码见本书配套源码:第6章/转发与重定向/springmvc22)(1)修改doLogin方法,添加两个目标方法。RequestMapping(/dologin.do)public ModelAndView doLogin(User user)ModelAndView mv=new ModelAndView();mv.addObject(username,user.getUsername();mv.addObject(password,user

13、.getPassword();/第1次测试mv.setViewName(redirect:second.do);/第2次测试/mv.setViewName(redirect:third.do);return mv;/整体接收RequestMapping(/second.do)public ModelAndView doSecond(User user)ModelAndView mv=new ModelAndView();mv.addObject(username,user.getUsername();mv.addObject(password,user.getPassword();mv.set

14、ViewName(redirect:/show.jsp);return mv;/逐个参数接收RequestMapping(/third.do)public ModelAndView doThird(String username,String password)ModelAndView mv=new ModelAndView();mv.addObject(username,username);mv.addObject(password,password);mv.setViewName(redirect:/show.jsp);return mv;(2)测试运行,输入http:/localhost

15、:8080/springmvc22/user/login.do。注释掉mv.setViewName(redirect:second.do),添加mv.setViewName(redirect:third.do)再次测试。观察两次结果是否相同。二使用二使用 HttpSession 携带参数携带参数项目案例项目案例:用户登录成功后,通过重定向页面实现登录后显示用户信息。(项目源码请见:SSM教材源码/第6章/转发与重定向/springmvc23)(1)拷贝项目springmvc22为springmvc23,修改处理器类UserController。RequestMapping(/dologin.d

16、o)public ModelAndView doLogin(User user,HttpSession session)session.setAttribute(user,user);ModelAndView mv=new ModelAndView();mv.setViewName(redirect:fourth.do);return mv;RequestMapping(/fourth.do)public ModelAndView doFifth(HttpSession session)User user=(User)session.getAttribute(user);ModelAndVie

17、w mv=new ModelAndView();mv.addObject(username,user.getUsername();mv.addObject(password,user.getPassword();mv.setViewName(redirect:/show.jsp);return mv;可以重定向到页面,也可以重定向到其他控制器方法。当处理器的方法返回类型为String时,可在字符串中添加前缀redired:即可实现重定向。如果还要传递参数,可以通过URL携带参数,通过HttpSession 携带参数,通过Model携带参数等多种办法。这里重点介绍Model和RedirectAt

18、tributes携带参娄和的办法。一一 重定向到页面时携带参数重定向到页面时携带参数11.1.6 返回返回String时的重定向时的重定向 1.通过通过Model形参携带参数形参携带参数 在Controller形参中添加 Model 参数,将要传递的数据放入 Model 中进行参数传递。这种方式同样也是将参数拼接到了重定向请求的 URL后,因而放入其中的数据只能是基本类型数据,不能是自定义类型。项目案例项目案例:用户登录成功后,通过重定向页面实现登录后显示用户信息。(项目源码见本书配套源码:第6章/转发与重定向/springmvc24)RequestMapping(/dologin.do)pu

19、blic String doLogin(User user,Model model)model.addAttribute(username,user.getUsername();model.addAttribute(password,user.getPassword();return redirect:/show.jsp;关键代码2.通过形参通过形参RedirectAttributes携带参数携带参数 RedirectAttributes专门用于携带重定向参数的。它其实继承自Model的接口,底层仍然使用ModelMap 实现。所以,这种携带参数的方式,同样不能携带自定义对象。项目案例项目案例

20、:用户登录成功后,通过重定向页面实现登录后显示用户信息。(项目源码见本书配套源码:第11章/转发与重定向/springmvc25)(1)拷贝项目springmvc24为springmvc25,修改UserController如下。RequestMapping(/dologin.do)public String doLogin(User user,RedirectAttributes rd)rd.addAttribute(username,user.getUsername();rd.addAttribute(password,user.getPassword();return redirect:

21、/show.jsp;(2)要使用 RedirectAttributes 参数,还需要在 SpringMVC 的配置文件中注册MVC 的注解驱动。二二 重定向到控制器时携带参数重定向到控制器时携带参数重定向到控制器时,携带参数的方式,可以使用请求 URL 后携带方式,HttpSession携带方式,Model 形参携带方式等,下面案例学习下使用Model 形参携带参数,注意传递与接收的要点就是接收方法的形参的名称要与传递方法的model中的key名称一致。可以整体接收,也可以逐个参数接收。项目案例项目案例:用户登录成功后,通过重定向页面实现登录后显示用户信息。(项目源码见本书配套源码:第6章/转

22、发与重定向/springmvc26)/重定向到控制器RequestMapping(/dologin.do)public String doLogin(User user,Model model)model.addAttribute(username,user.getUsername();model.addAttribute(password,user.getPassword();return redirect:second.do;关键代码/逐个参数接收RequestMapping(/second.do)public ModelAndView doSecond(String username,S

23、tring password)ModelAndView mv=new ModelAndView();mv.addObject(username,username);mv.addObject(password,password);mv.setViewName(redirect:/show.jsp);return mv;当处理器方法返回void时,可以使用HttpServletRequest实现请求转发。既可转发到页面,也可转发到其他控制器方法。若有数据需要向目标资源传递,可将数据放入到 HttpServletRequest或 HttpSession 中。但不能将数据放到 Model、Redire

24、ctAttributes中,因为这两者的数据都是通过拼接到处理器方法的返回值中,作为请求的一部分出现向下传递的。但这里没有返回值,所以它们中的数据无法向下传递。(项目源码见本书配套源码:第11章/转发与重定向/springmvc26)11.1.7 返回返回void时的请求转发时的请求转发RequestMapping(/dologin.do)public void doLogin(HttpServletRequest request,HttpServletResponse response,User user)throws IOException,ServletExceptionif(user.

25、getUsername().equals(张三)&user.getPassword().equals(123)request.setAttribute(user,user.getUsername();request.getRequestDispatcher(/WEB-INF/jsp/success.jsp).forward(request,response);elseresponse.sendRedirect(login.do);关键代码当处理器方法返回 void 时,使用 HttpServletResponse 的sendRedirect()方法实现重定向。若有数据需要向下一级资源传递,需要

26、将数据放入到HttpSession中,不能放在HttpServletRequest中。项目案例项目案例:用户登录成功后,通过重定向页面实现登录后显示用户信息。(项目源码见本书配套源码:第11章/转发与重定向/springmvc27)11.1.8 返回返回void时的重定向时的重定向/重定向到控制器RequestMapping(/dologin.do)public void doLogin(User user,HttpSession session,HttpServletRequest request,HttpServletResponse response)session.setAttribu

27、te(username,user.getUsername();session.setAttribute(password,user.getPassword();try response.sendRedirect(request.getContextPath()+/show3.jsp);catch(IOException e)e.printStackTrace();关键代码11.2.1 SimpleMappingExceptionResolver异常处理器异常处理器 该方式只需要在 SpringMVC 配置文件中注册该异常处理器Bean即可。该Bean 比较特殊,没有 id 属性,无需显式调用或

28、被注入给其它,当异常发生时会自动执行该类。项目案例项目案例:用户注册时会发生不同形式的异常,分别捕捉到这些异常,跳转到相应的页面显示异常信息。(项目源码见本书配套源码:第11章/异常处理/springmvc28)11.2 异常处理异常处理RequestMapping(/doregister.do)public ModelAndView register(String username,int age)throws Exception ModelAndView mv=new ModelAndView();if(!username.equals(张三)throw new NameException

29、(学生姓名不正确!);if(age=30)throw new AgeException(学生年龄太大!);if(age=20)throw new Exception(测试其他异常!,跳转到了有这些信息的页面!);mv.addObject(username,username);mv.addObject(age,age);mv.setViewName(forward:/show4.jsp);return mv;控制器关键代码 forward:/nameError.jsp forward:/ageError.jsp 在springmvc.xml中注册异常处理器有关属性说明如下:exceptionMa

30、ppings:Properties类型属性,用于指定具体的不同类型的异常所对应的异常响应页面。Key 为异常类的全限定性类名,value则为响应页面路径(字符串),响应页面字符串默认会受视图解释器解释,若要不受视图解释器解释,则要加上“forward:”前缀。defaultErrorView:指定默认的异常响应页面。若发生的异常不是exceptionMappings 中指定的异常,则使用默认异常响应页面。exceptionAttribute:捕获到的异常对象,可以在异常响应页面中使用。WebContent下创建异常响应页面。测试运行 上面案例使用 SpringMVC的 SimpleMappin

31、gExceptionResolver 异常处理器,可以实现发生指定异常后的跳转。但如果想在捕获到指定异常时,执行一些操作,它就无法实现了。解决方法之一就是让控制器实现HandlerExceptionResolver接口,然后重写接口的resolveException方法。当一个类实现了HandlerExceptionResolver接口后,只要有异常发生,无论什么异常,都会自动执行接口方法 resolveException()。可以通过instanceof来判断具体的异常种类,从而可以精确地执行一些对应的操作并跳转到不同的目标异常响应页面。实现HandlerExceptionResolver接

32、口的控制器也叫自定义一个异常处理器。11.2.2 HandlerExceptionResolver接口接口处理异常处理异常项目案例项目案例:用户注册时会发生不同形式的异常,分别捕捉到这些异常,跳转到相应的页面显示异常信息。(项目源码见本书配套源码:第11章/异常处理/springmvc29)(1)拷贝项目springmvc28为springmvc29,删除配置文件中的SimpleMappingExceptionResolver 异常处理器,修改控制器UserController,让它实现HandlerExceptionResolver接口。public class UserController

33、 implements HandlerExceptionResolver在UserController中添加下述方法(原有方法不变)。Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex)ModelAndView mv=new ModelAndView();mv.addObject(ex,ex);mv.setViewName(forward:/defaultError.jsp);if(ex i

34、nstanceof NameException)mv.setViewName(/nameError.jsp);if(ex instanceof AgeException)mv.setViewName(/ageError.jsp);return mv;(2)运行测试 http:/localhost:8080/springmvc29/user/register.do结果同上。使用注解ExceptionHandler注解到方法上,将一个方法指定为异常处理方法。该注解只有一个可选属性value,用于指定该注解的方法所要处理的异常类,即所要匹配的异常。被注解的方法,其返回值可以是 ModelAndVie

35、w、String或void,方法参数可以是Exception及其子类对象、HttpServletRequest、HttpServletResponse等。系统会自动为这些方法参数赋值。可以直接将异常处理方法注解于Controller之中11.2.3 使用使用ExceptionHandler注解注解实现异常处理实现异常处理项目案例项目案例:用户注册时会发生不同形式的异常,分别捕捉到这些异常,跳转到相应的页面显示异常信息。(项目源码见本书配套源码:第11章/异常处理/springmvc30)关键步骤:关键步骤:(1)拷贝项目springmvc29为springmvc30,修改UserControl

36、ler,不再实现上述接口,删除resolveException方法。添加两个方法如下。RequestMapping(/doregister.do)public ModelAndView register(String username,int age)throws Exception ModelAndView mv=new ModelAndView();if(!username.equals(张三)throw new NameException(学生姓名不正确!);if(age=30)throw new AgeException(学生年龄太大!);if(age=20)throw new Exc

37、eption(测试其他异常!,跳转到了有这些信息的页面!);mv.addObject(username,username);mv.addObject(age,age);mv.setViewName(forward:/show4.jsp);return mv;ExceptionHandler(NameException.class)public ModelAndView HandleNameException(Exception ex)ModelAndView mv=new ModelAndView();mv.addObject(ex,ex);mv.setViewName(forward:/na

38、meError.jsp);return mv;ExceptionHandler(AgeException.class)public ModelAndView HandleAgeException(Exception ex)ModelAndView mv=new ModelAndView();mv.addObject(ex,ex);mv.setViewName(forward:/ageError.jsp);return mv;这样做的话,一个控制器方法发生异常,在同一个控制器里面都可找到相匹配的异常处理方法进行处理。缺点就是正常业务代码跟异常处理功能代码放在同一个类,混在一起,程序的可维护性差。

39、刚才提到这种做法业务逻辑代码与异常处理代码混合编程,可维护性差,解决思路是将异常处理方法专门定义在一个独立的类中,让其它Controller继承该类即可。不过也可能会导致新问题,因为Java类是“单继承”的,唯一的一个继承机会使用了,使得若再有其它类需要继承,将无法直接实现。项目案例项目案例:用户注册时会发生不同形式的异常,分别捕捉到这些异常,跳转到相应的页面显示异常信息。将异常处理方法独立成一个类。(项目源码见本书配套源码:第11章/异常处理/springmvc31)具体步骤见教材 在前面的案例程序中,表单提交的不论是int还是String类型的请求参数,接受请求的处理器方法的形参,均可直接

40、接收到相应类型的相应数据,无须先接收到String再由程序员来转换,相当方便。这是因为在SpringMVC框架中,有默认的类型转换器。这些默认的类型转换器,大多数情况下可以将String类型的数据,自动转换为相应类型的数据。但默认类型转换器不可以将用户提交的所有String都能转换为所有用户需要的类型。比如,SpringMVC 的默认类型转换器中,默认只能转换“yyyy/MM/dd”的日期格式是,其他格式就转换不了,这时需要自定义类型转换器。11.3 类型转换器类型转换器 若要定义类型转换器类,则该类需要实现Converter接口。该Converter接口有两个泛型:第一个为待转换的类型,第二

41、个为目标类型,该接口的方法convert(),用于完成类型转换。项目案例项目案例:用户输入yyyy-MM-dd的日期字符串能被后台正确接收到。(项目源码见本书配套源码:第11章/自定义类型转换器/springmvc32)11.3.1 自定义类型转换器自定义类型转换器ConverterRequestMapping(/doregister.do)public ModelAndView doRegister(String username,String password,Date birthday)throws NameException,AgeExceptionModelAndView mv=ne

42、w ModelAndView();mv.addObject(username,username);mv.addObject(password,password);mv.addObject(birthday,birthday.toLocaleString();mv.setViewName(forward:/show4.jsp);System.out.println(birthday);return mv;控制器关键代码新建包com.lifeng.util放置工具类,包下新建一个自定义日期转换类DateConverter1,实现接口Converterpublic class DateConvert

43、er1 implements ConverterOverridepublic Date convert(String source)try if(source!=null&!source.equals()SimpleDateFormat sdf=new SimpleDateFormat(yyyy-MM-dd);return sdf.parse(source);catch(ParseException e)e.printStackTrace();return null;Springmvc.xml配置文件中注册类型转换器Springmvc.xml配置文件中创建转换服务beanSpringmvc.x

44、ml配置文件,注册注解驱动,使用类型转换服务bean 项目案例项目案例:无论用户输入yyyy/MM/dd,yyyy-MM-dd,yyyyMMdd都能正确接收到日期。(项目源码见本书配套源码:第11章/接收多种格式的日期类型转换/springmvc33)11.3.2 接收多种格式的日期类型转换接收多种格式的日期类型转换Overridepublic Date convert(String source)try if(source!=null&!source.equals()SimpleDateFormat sdf=getSimpleDateFormat(source);return sdf.par

45、se(source);catch(ParseException e)e.printStackTrace();return null;拷贝项目springmvc32为springmvc33修改转换器DateConverter1如下。private SimpleDateFormat getSimpleDateFormat(String source)SimpleDateFormat sdf=new SimpleDateFormat();if(source.matches(d4-d2-d2$)sdf=new SimpleDateFormat(yyyy-MM-dd);else if(source.ma

46、tches(d4/d2/d2$)sdf=new SimpleDateFormat(yyyy/MM/dd);else if(source.matches(d4d2d2$)sdf=new SimpleDateFormat(yyyyMMdd);return sdf;当数据类型转换发生异常后,通常需要返回到表单页面,让用户重新填写。如果不作处理,发生类型转换异常后,系统会自动跳转到400页面。若要在发生类型转换异常后,跳转到指定页面,则需要捕获异常,然后通过异常处理器跳转到指定页面。仅仅完成跳转,则使用系统定义好的 SimpleMappingExceptionResolver就可以。但如果当页面返回到

47、原填写的表单页面后,还需要将用户原来填写的数据显示出来,让用户能够更正填错的数据,也就是还需要完成数据回显功能。这时需要自定义异常处理器。11.3.3 类型转换发生异常后的数据回类型转换发生异常后的数据回显显 数据回显的原理:在异常处理器中,用request.getParameter()方法将用户输入的表单原始数据获取到,再放入到 ModelAndView 中的Model中,然后在要跳转到的目标页面中直接通过EL表达式读取出,这就实现了数据回显。项目案例项目案例:回显类型转换失败的数据。(项目源码见本书配套源码:第11章/类型转换失败后数据回显/springmvc34)修改异常处理类UserE

48、xceptionResolver的HandleMismatchException方法关键代码/数据类型不匹配异常ExceptionHandler(TypeMismatchException.class)public ModelAndView HandleMismatchException(Exception ex,HttpServletRequest request)ModelAndView mv=new ModelAndView();String username=request.getParameter(username);String password=request.getParame

49、ter(password);String age=request.getParameter(age);String birthday=request.getParameter(birthday);mv.addObject(ex,ex);mv.addObject(username,username);mv.addObject(password,password);mv.addObject(age,age);mv.addObject(birthday,birthday);mv.setViewName(register);return mv;修改注册页面register.jsp用户注册$ex.mes

50、sage 姓名:密码:年龄:注册日期:以上代码能解决当年龄输入有误,但日期输入正确的回显问题。若日期输入有误,年龄输入正确时,无法实现回现。因为当日期格式输入有误时,SimpleDateFormat 的 parse()方法将会抛出 ParseException异常,而非 TypeMismatchException。如何解决?可否让异常处理器再捕获ParseException 再跳转?不行,因为Converter的 convter()方法是没有抛出异常的,自定义类型转换器中的convert()方法不能抛出异常,对异常的处理方式必须为 try-catch。也就是说,convert()方法要将异常自

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(SSM开发实战教程第11章-Spring-MVC关键技术课件.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|