SSM开发实战教程第10章-SpringMVC注解式开发课件.pptx

上传人(卖家):三亚风情 文档编号:3370621 上传时间:2022-08-24 格式:PPTX 页数:111 大小:2.27MB
下载 相关 举报
SSM开发实战教程第10章-SpringMVC注解式开发课件.pptx_第1页
第1页 / 共111页
SSM开发实战教程第10章-SpringMVC注解式开发课件.pptx_第2页
第2页 / 共111页
SSM开发实战教程第10章-SpringMVC注解式开发课件.pptx_第3页
第3页 / 共111页
SSM开发实战教程第10章-SpringMVC注解式开发课件.pptx_第4页
第4页 / 共111页
SSM开发实战教程第10章-SpringMVC注解式开发课件.pptx_第5页
第5页 / 共111页
点击查看更多>>
资源描述

1、SSM开发实战教程第第10章章 SpringMVC注解式开发注解式开发上一章的第一个Spring MVC程序是基于配置式的开发,有助于我们理解Spring MVC的基本原理与流程,但实战起来比较繁锁,Spring MVC还提供注解式的开发,大大简化开发流程,实际开发往往采用注解式开发。下面来看第一个注解式开发程序。项目案例:项目案例:用注解式开发设计一个项目,浏览器输入:http:/localhost:8080/springmvc2/first.do输出网页内容:我的第一个注解式SpringMVC。(项目源码见本书配套源码:第10章/第一个注解式mvc程序/springmvc2)10.1 第一

2、个注解式开发程序第一个注解式开发程序(1)在Eclipse中新建Dynamic Web Project项目springmvc2,导入有关jar包,如图5.1所示。注意多了一个spring-aop-4.3.4.RELEASE.jar包。只有导进了这个包才能使用注解。(2)配置web.xml。内容跟第一个SpringMVC项目中的web.xml内容一模一样,拷贝过来即可。(3)配置springmvc.xml,需要配置组件扫描器。上面代码中,与配置式开发相比,少了一大堆配置,无须配置处理器映射器和处理器适配器。但问题来了,那“请求/响应”的映射关系在哪定义呢?客户端的url请求从哪里可以找到对应的服

3、务端处理器来处理呢?可发现上面代码里多了一个配置组件扫描器,表示通过扫描指定的包下面的类中的注解从而获取映射关系。这里是扫描包com.lifeng.controller下的所有类中的注解。(4)创建控制器。在src下新建包controller,新建一个类FirstController。无须实现任何接口。初始代码如下:public class FirstControllerpublic ModelAndView doHello()ModelAndView mv=new ModelAndView();mv.addObject(msg,我的第一个注解式SPringMVC!);mv.setViewNa

4、me(welcome);return mv;接着在类名和方法doHello()上面分别添加注解,最终代码如下:Controller public class FirstControllerRequestMapping(/hello.do)public ModelAndView doHello()ModelAndView mv=new ModelAndView();mv.addObject(msg,My First Annotation SpringMVC!);mv.setViewName(welcome);return mv;第一个注解Controller表示将本类定义为一个控制器类,这个类无

5、须再实现Controller接口。第二个注解RequestMapping(/hello.do)表示定义一种“请求/响应”的映射关系,即如果客户端浏览器发出“/hello.do”的url请求则由该注解下面的doHello()方法来响应,即浏览器通过url路径+/hello.do就可访问到本方法,url请求能够直接映射到控制器类的方法级别。这样一个简单的注解,就轻松的取代了之前的处理器映射器和bean的配置,大大减少了配置工作量。(5)创建响应页面。在项目WebContent/WED-INF下创建文件夹jsp,再在目录WebContent/WED-INF/jsp下创建welcome.jsp页面。在

6、之间添加$msg(6)运行并测试程序。url输入:http:/localhost:8080/springmvc2/hello.do输出网页内容:我的第一个注解式SpringMVC。结果如图5.2所示。如果是中文可能会有乱码,后面会解决这个问题,这里先用英文。核心控制器DispatcherServlet的典型配置如下:springmvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc.xml springmvc *.do 10.2 核心控制器核心控制器Dispa

7、tcherServlet的的配置配置它表示spring将拦截所有*.do请求,其中*匹配任意字符,即拦截所有后缀为.do的请求,再交给下的所指定的springmvc.xml文件进行解释。如果用/代替*.do则指拦截所有请求,代码如下所示:springmvc /classpath:springmvc.xml指的是SpringMVC的配置文件为src目录下springmvc.xml文件,容器启动后会自动到src目录下查找名为springmvc.xml的配置文件(然后加载进来)。注意:如果SpringMVC找不到配置文件会报错。节点是可选项,可以省略,则web.xml中的核心控制器Dispatche

8、rServlet的配置可简化为:springmvc org.springframework.web.servlet.DispatcherServlet springmvc *.do 这里并未指明SpringMVC配置文件的位置,问题来了,spring将拦截所有*.do请求后,下一步交给谁进行解释呢?(即到哪里找到SpringMVC配置文件呢?)答案是应用程序在启动时会默认到WEB-INF目录下查找如下格式命名的MVC配置文件。ServletName-servlet.xml 其中ServletName应与web.xml配置文件的中的一致对开发者来讲,这个mvc配置文件需自行创建,而且要遵守两条规

9、则:(1)命名规则:ServletName-servlet.xml(2)位置规则:必须放在WEB-INF下本例中由于web.xml中的ServletName为springmvc故mvc 配置文件应命名为springmvc-servlet.xml,且必须放在目录WEB-INF下。此外核心控制器DispatcherServlet的配置还可选用1表示Serlvet容器在服务器启动时立即加载。如果没有这条配置,则表示应用程序在第一个Servlet请求时加载该Servlet。传统的配置式开发中的控制器Controller类,必须实现Controller接口,并实现接口中的HandleRequest()方

10、法,还需要在配置文件中配置处理器映射,且一个处理器(控制器)只能有一个方法,为了实现程序功能,不得不创建大量的处理器(控制器)类,不够方便灵活。而一个基于注解的控制器可以有多个方法,能大大减少处理器(控制器)类的数量。10.3 Controller注解注解将一个普通的类转化为控制器类只需要该类的声明上面加上Controller注解即可。要使Controller注解被扫描到,必须在springmvx.xml文件中配置组件扫描器。其中base-package指明了使用了注解的Controller类所在的包,系统会自动扫描该包下的所有类,识别其中的注解。该注解可以用于类上,也可用于方法上。10.4.

11、1 注解用于方法上注解用于方法上 基于注解的控制器无须在xml配置文件中配置处理器映射器,仅需要用RequestMapping对控制器类中任意一个方法进行注解即可建立“请求/响应”映射关系,将客户端请求与处理器的方法一一对应。项目案例:项目案例:客户端浏览器如果请求login.do则出现登录界面,如果请求register.do则出现注册界面。使用Srping MVC注解式开发。(项目源码见本书配套源码:第10章/RequestMapping注解用于方法上/springmvc3)10.4 RequestMapping注解注解(1)创建项目springmvc3,添加jar包,配置web.xml,代

12、码参照上一个项目。(2)在SRC下创建springmvc.xml配置文件,参照上一个项目。(3)创建控制器类UserController。Controller public class UserController RequestMapping(/login.do)public String login()return login;RequestMapping(/register.do)public String register()return register;可以看到,UserController 类下的login()方法和register()都添加了注解。分别表示客户端通过Url请求/

13、login.do就可访问到login()方法,通过Url请求/register.do就可访问到register()方法。注意,login方法这里是String类型,并不是指返回字符串给客户端,而是指返回给客户端的逻辑视图名称,再经sprimgmvc.xml配置文件的中视图解释器进行解释(即拼接前缀与后缀)才返回实际的视图给客户端。(4)在WEB-INF/jsp目录下创建login.jsp和register.jsp文件login.jsp关键代码如下:用户登录姓名:密码:register.jsp关键代码如下:用户注册姓名:密码:(5)运行测试,可以发现浏览器输入http:/localhost:80

14、80/springmvc3/login.do出现了如图所示登录界面。浏览器输入http:/localhost:8080/springmvc3/register.do出现了如图书馆如图所示注册界面 10.4.2 注解用于类上注解用于类上 上面项目中,客户端通过Url请求/login.do就可访问到UserController 类的login()方法,通过Url请求/register.do就可访问到UserController类的register()方法.如果该项目只有用户登录,则没有什么冲突,但如果该项目除了用户登录,还有一种管理员登录,假定管理员登录注册的也用到同一个客户端url请求路径。实现

15、管理员登录注册的Controller类 AdminController代码如下:Controllerpublic class AdminController RequestMapping(/login.do)public String login()return loginAdmin;RequestMapping(/register.do)public String register()return registerAdmin;可以看到,控制器中AdminController的两个RequestMapping注解都与控制器UserController的RequestMapping注解相同。问题

16、来了,若浏览器发出/login.do的url请求那到底该返回用户登录界面还是管理员登录界面呢?现在的情况是无法区分,程序将报错,因为两个类的login()方法用的都是同一种注解,出现冲突。假定两个类的login()方法的注解都不变,有什么办法可以解决冲突问题呢?解决办法就是在各自的类上再加上一个RequestMapping注解,且每个类的注解的名称不同。具体操作请见下面这个案例。项目案例:项目案例:把项目springmvc3拷贝为springmvc4,增加管理员登录和注册功能。解决上述冲突问题。(项目源码见本书配套源码:第10章/RequestMapping注解用于类上/springmvc4)

17、实现步骤:实现步骤:(1)把项目springmvc3拷贝为springmvc4,添加AdminController类代码同上。注意Web项目拷贝后需要右击项目选择properties修改属性中的Web Project Settings-Context root:改为新的名字。(2)将login.jsp页面拷贝为loginAdmin.jsp内容修改为如下。管理员登录管理员登录 姓名:密码:(3)将register.jsp页面拷贝为registerAdmin.jsp内容修改为如下。管理员注册管理员注册姓名:密码:(4)测试运行。浏览器输入http:/localhost:8080/springmvc

18、4/login.do 程序报错。原因刚才已经提到了,就是两个控制类上的注解都同样是/login.do。(5)解决方案,分别给两个控制类上添加RequestMapping注解。本例中UserController类添加RequestMapping注解后代码如下:ControllerRequestMapping(/user)public class UserController RequestMapping(/login.do)public String login()return login;RequestMapping(/register.do)public String register()r

19、eturn register;AdminController类添加RequestMapping注解后代码如下:ControllerRequestMapping(/admin)public class AdminController RequestMapping(/login.do)public String login()return login;RequestMapping(/register.do)public String register()return register;除此之外,url请求路径还要加上类上的注解作为上一级路径,这样两种不同的登录就可以区分开来了。浏览器如果访问htt

20、p:/localhost:8080/springmvc4/user/login.do则访问到的是如图10.5所示的用户登录界面。浏览器如果访问http:/localhost:8080/springmvc4/admin/login.do则访问到的是如图10.6所示的管理员登录界面。结论,当类和方法上都有RequestMapping注解时,最终的Url请求必须是两者的结合体。如类上的RequestMapping注解为RequestMapping(/user),方法上的RequestMapping注解为RequestMapping(/login.do),则最终的Url请求为/user/login.d

21、o,单独用方法上注解的/login.do请求将无法被识别,必须先加上类上的注解/user才能构成完整的请求路径。类上的注解是上一级路径,方法上的注解是下一级路径。项目springmvc3中,若要限定只能用GET方式访问login()方法,则需要将login()方法上的RequestMapping注解修改为如下:RequestMapping(value=/login.do,method=RequestMethod.GET)public String login()return login;10.4.3 请求的提交方式请求的提交方式 同理若要限定只能用POST方式访问login()方法,则需要将l

22、ogin()方法上的RequestMapping注解修改为如下:RequestMapping(value=/login.do,method=RequestMethod.POST)public String login()return login;这时若强行用GET方式访问,将报如图10.7所示错误。RequestMapping在默认情况下两种方式都支持,如果不想限制GET或POST方式,则只需删除RequestMapping注解中的method=RequestMethod.GET或method=RequestMethod.POST即可。项目案例:项目案例:将项目springmvc3拷贝为spr

23、ingmvc5,做上述修改,测试效果。(项目源码见本书配套源码:第10章/请求的提交方式/springmvc5)在资源路径中使用通配符,可以匹配灵活多变的URI请求,映射到同一个控制器方法进行响应。有两种用法:路径级数的精确匹配,与路径级数的可变匹配。/user/*/login.do:表示在login.do的资源名称前面,限定只能有两级路径,第一级路径必须是/user,而第二级路径随意。这种称为路径级数的精确匹配。/user/*/login.do:表示在login.do的资源名称前面,必须以/user路径开头,而其它级的路径可有可没有,若有又包含几级,各级又叫什么名称,都随意。这种称为路径级数

24、的可变匹配。10.4.4 请求请求URI中使用通配符中使用通配符 项目案例:项目案例:将项目springmvc4拷贝为springmvc6,分别测试路径级数的精确匹配和可变匹配。(项目源码见本书配套源码:第10章/路径级数的精确匹配与模糊匹配/springmvc6)(1)将项目springmvc4拷贝为springmvc6,修改UserController如下:ControllerRequestMapping(/user)public class UserController RequestMapping(/*/login.do)public String login()return logi

25、n;RequestMapping(/*/register.do)public String register()return register;(2)测试。浏览器中输入http:/localhost:8080/springmvc6/user/login.do报错,级数不匹配。再次输入http:/localhost:8080/springmvc6/user/aa/login.do正确显示,如图10.8所示。再次输入:http:/localhost:8080/springmvc6/user/aa/bb/register.do http:/localhost:8080/springmvc6/user

26、/aa/register.do http:/localhost:8080/springmvc6/user/register.do 均可正常显示,如图所示。RequestMapping中params 属性中定义了请求中必须携带的参数的要求。以下是几种情况的说明。RequestMapping(value=”/login.do”,params=“name”,”pwd”):要求请求中必须携带请求参数 name 与 pwd。RequestMapping(value=”/login.do”,params=“!name”,”pwd”):要求请求中必须携带请求参数 pwd,但必须不能携带参数name。Requ

27、estMapping(value=”/login.do”,params=“name=john”,”pwd=123456”):要求请求中必须携带请求参数 name,且其值必须为iohn;必须携带参数pwd,其其值必须为123456。RequestMapping(value=”/login.do”,params=“name!=john”):要求请求中必须携带请求参数name,且其值必须不能为john。10.4.5 请求中携带参数请求中携带参数知识扩展:知识扩展:RequestMapping注解的各个属性,如表10.1所示 10.5.1 基本类型做形参基本类型做形参 要求前台页面的表单输入框的nam

28、e属性与对应控制器方法中的形式参数名称与类型一致,控制器方法就能接收到来自前台表单传过来的参数,即请求参数与方法形参要完全相同,这些参数由系统在调用时直接赋值,程序员可在方法内直接使用。项目案例:项目案例:如果用户输入有用户名为admin,密码为123,则返回登录成功的界面,否则返回登录错误的页面。(项目源码见本书配套源码:第10章/通过方法的形参接收客户端数据/springmvc7)10.5 客户端到处理器的参数传递客户端到处理器的参数传递(1)拷贝springmvc4为springmvc7,在UserController类中新建一个方法如下代码所示。RequestMapping(/dolo

29、gin.do)public ModelAndView doLogin(String username,String password)ModelAndView mv=new ModelAndView();if(username.equals(admin)&password.equals(123)mv.setViewName(success);mv.addObject(user,admin);elsemv.setViewName(fail);return mv;(2)Login.jsp页面修改为如下:用户登录姓名:密码:注意添加了action=dologin.do。(3)新建success.js

30、p和fail.jsp页面,只需简单的分别加一句登录成功,登录失败即可,测试成功失败两种情形success.jsp关键代码如下:登录成功,欢迎$user 光临fail.jsp关键代码如下:登录失败(4)浏览器输入http:/localhost:8080/springmvc6/user/login.do 测试成功和失败的登录,如图10.10所示【结论】【结论】前台表单的数据提交后被后台的dologin()方法成功的获取了,证明了只要前台表单的name属性与方法的形式参数名称与类型一致即可传递与获取数据。【注意】【注意】如果表单的name属性与方法的参数名称不一致,也有办法,就是用RequestPa

31、ram()校正参数名,做法是在接收方法的形参前加个RequestParam(“表单的name属性”),示例如下:假定表单的name属性分别为username和password,而处理器的方法参数分别为uname和pwd。RequestMapping(/dologin.do)public ModelAndView doLogin(RequestParam(“username”)String uname,RequestParam(“password”)String pwd)ModelAndView mv=new ModelAndView();if(uname.equals(admin)&pwd.e

32、quals(123)mv.addObject(user,admin);mv.setViewName(admin);else mv.setViewName(fail);return mv;上面代码中,方法的形参分别是uname、pwd,明显与表单不一样,但形参uname前面加上了注解RequestParam(“username”),表示先接收到表单name 属性为username的值,再传给uname。同理,形参pwd前面加上了注解RequestParam(“password”),表示先接收到表单name 属性为password的值,再传给pwd。RequestParam()有三个属性:valu

33、e:指定请求参数的名称。required:指定该注解所修饰的参数是否是必须的,boolean 类型。若为 true,则表示请求中所携带的参数中必须包含当前参数。若为false,则表示有没有均可。defaultValue:指定当前参数的默认值。若请求 URI 中没有给出当前参数,则当前方法参数将取该默认值。即使required为true,且URI中没有给出当前参数,该处理器方法参数会自动取该默认值,而不会报错。对于上面案例所请求的参数,若含有中文,可能会出现中文乱码问题,SpringMVC对于请求参数中的中文乱码问题,提供了专门的字符集过滤器,只需要在web.xml配置文件中注册字符串过滤器即可

34、解决中文乱码问题。上面项目若要解决乱码问题,只需在web.xml中添加如下配置即即可:(项目源码见本书配套源码:第10章/通过方法的形参接收客户端数据/springmvc7)10.5.2 中文乱码问题中文乱码问题 characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true characterEncodingFilter /*项目springmvc7中,方法doLogin()也可只用一个实体类做形式参数,前提是这个实体类的各个属性要

35、与前台表单的各个name属性相同。项目案例:项目案例:如果用户输入有用户名为admin,密码为123,则返回登录成功的界面,否则返回登录错误的页面。(项目源码见本书配套源码:第10章/实体bean整体接收客户端数据/springmvc8)10.5.3 实体实体bean做形参做形参RequestMapping(/dologin.do)public String doLogin(User user)if(user.getUsername().equals(admin)&user.getPassword().equals(123)System.out.println(user.getUsername

36、();System.out.println(user.getPassword();return success;return login;控制器关键代码 当请求参数为某类的对象属性的属性值时,要求请求参数名称为“类对象属性.属性”。项目案例:项目案例:在项目springmvc8实现了简单注册功能的基础上,若注册时还要提供地址信息,而地址信息封装在一个名为Address的bean类里面,包含国家和城市属性,User下面添加了一个类型为Address的对象属性,如何获得包含地址信息在内的注册信息。(项目源码见本书配套源码:第10章/实体bean包含对象属性/springmvc9)10.5.4 实体

37、实体bean含对象属性含对象属性 方法的形参,除了可以接收请求中携带的参数,也可接收URL中的变量,比如这个URL路径:http:/localhost:8080/springmvc10/zhangsan/1/user.do里面含有zhangsan,显然对应的是用户名的信息,里面含有1,显然对应的是用户编号id,这些信息,通过RequestMapping注解,配合方法参数名称,一样能接收到。项目案例:项目案例:如何接收URL路径变量。(项目源码见本书配套源码:第10章/路径变量的接收/springmvc10)10.5.5 路径变量路径变量(1)拷贝项目springmvc9为springmvc10

38、在控制器UserController中添加方法doUser()。RequestMapping(/username/id/user.do)public ModelAndView doUser(PathVariable String username,PathVariable String id)ModelAndView mv=new ModelAndView();mv.setViewName(success);System.out.println(username);/测试是否接收到usernameSystem.out.println(id);/测试是否接收到idreturn mv;以上代码中,

39、/username/id/user.do用括起来的部分被称为路径变量,将指定的URL模式地址与访问控制器指定方法的路径进行关联与匹配,如果匹配得上则控制器的指定方法被调用,并且路径中部分会被当作变量值被方法接收。一般情况下,路径变量名要与方法中的形参名称一致。比如RequestMapping中的username要与方法doUser(String username,String id)中的username相同。方法的每一个参数前面都要用注解PathVariable修饰,否则接收不到数据。(2)测试http:/localhost:8080/springmvc10/user/zhangsan/1/u

40、ser.do观察控制台的输出。(3)如果路径变量与方法参数名称不一致,则需用到PathVariable进行修正,上面方法修改如下。RequestMapping(/uname/uid/user.do)public ModelAndView doUser(PathVariable(uname)String username,PathVariable(uid)String id)ModelAndView mv=new ModelAndView();mv.setViewName(success);System.out.println(username);/测试是否接收到usernameSystem.o

41、ut.println(id);/测试是否接收到idreturn mv;什么是REST风格:把请求参数变为请求路径的一种编程风格。通过路径变量的使用,可以实现REST风格的编程。传统的编程风格中,某项事物列表Web页面,要想一个个编辑,需要每一项中有类似这种超链接:/detail?id=1 其中每一项的id不同。而采用RESTful风格后,超链接将变成:/detail/1或者 1/detail意义一样。10.5.6 RESTful风格编程风格编程 项目案例项目案例:学生列表页面超链接了学生详细信息页面,详细步骤如下,先用传统风格编程,再改用REST风格。(项目源码见本书配套源码:第10章/RES

42、T风格/springmvc11)效果示例代码RequestMapping(/dologin.do)public ModelAndView doLogin(HttpServletRequest request)String username=request.getParameter(username);String password=request.getParameter(password);ModelAndView mv=new ModelAndView();if(username.equals(张三)&password.equals(123)mv.setViewName(success);

43、mv.addObject(user,张三);elsemv.setViewName(fail);return mv;10.5.7 HttpServletRequest参数参数 控制器的方法除了接收基本类型的请求参数,也能整体接收bean类型的参数,还能接收数组参数。接收数组参数的关键点有两个:1.前台表单有多个表单域的name属性相同;2.控制器方法用这个name值命名的数组作为参数。项目案例项目案例:页面有多个兴趣爱好供选择,选择好后,控制台能显示出来。(项目源码见本书配套源码:第10章/接收数组类型的请求参数/springmvc1103)10.5.8 接收数组类型的请求参数接收数组类型的请求

44、参数(1)拷贝项目springmvc1102为springmvc1103,修改UserController,添加下面两个方法。RequestMapping(/interest.do)public String interest()return interest;RequestMapping(/dointerest.do)public String doInterest(String myinterest)/测试用控制台输出各条兴趣System.out.println(我的兴趣爱好有:);for(String interest:myinterest)System.out.print(intere

45、st+);同名 return interest;(2)WEB-INF/jsp下新增页面interest.jsp。我的兴趣爱好摄影:跳舞:旅游:阅读:观测控制台的输出(3)运行测试,输入http:/localhost:8080/springmvc1103/user/interest.do 测试控制台输出。10.6 服务端到客户端的参数传递服务端到客户端的参数传递上面学习了参数从客户端到服务端的传递,下面来学习参数从服务端到客户端的传递。使用Controller注解的控制器下面的方法,其返回值常用的有以下四种类型:ModelAndView String 无返回值 void 返回自定义类型对象 若控

46、制器方法处理完后,需要跳转到其它资源,同时又要在往跳转的资源传递数据,此时控制器方法返回 ModelAndView 比较合适。这种情况下控制器方法里面需要定义一个 ModelAndView 对象,并调用ModelAndView 对象的addObject()方法添加Model数据,用于传递到目标View页面,调用setViewName()方法设置目标View页面。这在上面的案例中已多次用到。若该控制器方法只跳转而不传数据,或只传数据而并不向任何资源跳转(如页面的 Ajax 异步响应),此时若返回 ModelAndView,都不太合适,要么 Model 多余,要么 View 多余。可以考虑用其他三

47、种返回值类型。除了ModelAndView可以把数据从后台带到前端,还有HttpServletRequest,Model和HttpSession等对象也可以,后面会作介绍。控制器方法返回的字符串代表的是逻辑视图名,再通过InternalResourceViewResolver内部资源视图解析器解析将其转换为物理视图地址。除了逻辑视图名,也可以是View对象名,但需要另外定义一个BeanNameViewResolver视图解释器将其解释为真正的URL。10.7 控制器方法返回控制器方法返回String类型类型1.返回内部资源逻辑视图名返回内部资源逻辑视图名 若要跳转的资源为内部资源,则视图解析器

48、可以使用 InternalResourceViewResolver 内部资源视图解析器。此时处理器方法返回的字符串就是要跳转页面的文件名去掉前缀路径和后缀文件扩展名后的部分。这个字符串与视图解析器中的 prefix、suffix 相结合,即可形成要访问的 URI。之前的案例大都属于这种情况。2.返回返回View对象名对象名 若要跳转的资源为外部资源,则可以使用BeanNameViewResolver类型的视图解析器,然后在配置文件中再定义一些外部资源视图View对象,此时处理器方法返回的字符串就是要跳转资源视图View的名称。当然,这些视图View对象,也可以是内部资源视图View对象。一般这

49、种情况只跳转,不带传递数据。项目案例:项目案例:将项目springmvc11拷贝为springmvc12,实现登录成功后跳转到百度首页,否则跳转到163网易邮箱页面。(项目源码见本书配套源码:第10章/返回字符串跳转到外部URI/springmvc12)。10.7.1 返回返回View对象名对象名 使用ModelAndView对象做为控制器方法的返回值类型,可以很好地同时解决了跳转路径和携带的数据问题,但String做为控制器方法的返回值类型只解决了跳转路径问题,如果跳转到目标页面同时还要携带数据怎么办呢?有3个解决方案:1.使用方法中的Model参数;2使用方法中的HttpRequestSe

50、rvlet对象;3.使用方法中的HttpSession对象。在参数中使用Model,可以把数据封装到Model对象中,进而再跳转到的目标页面,目标页面使用EL表达式读取出来。上面提到,Model与HttpServletRequest,HttpSession三者均可以携带数据从后台到前台。10.7.2 使用使用Model参数参数 在参数中使用Model,可以把数据封装到Model对象中,进而再跳转到的目标页面,目标页面使用EL表达式读取出来。上面提到,Model与HttpServletRequest,HttpSession三者均可以携带数据从后台到前台。项目案例:项目案例:登录页面,登录成功后跳

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

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

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


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

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


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