[学习笔记]基于注解的spring3.0.x MVC学习笔记(五)

在通过requestmapping中返回中,我们可以通过forward还有redirect方式进行页面跳转而避开视图模型的控制,这次先讲forward的功能,forward有2种表示模式,forward功能的功能同request中的request.getRequestDispatcher("目标地址").forward(request,response)功能是一样的(spring mvc 默认这种)先看第一种:代码如下:

   1:  @RequestMapping("/forward")
   2:      public String testForword(ModelMap map){
   3:  //        Map<String,Object> map = new HashMap<String, Object>();
   4:          map.put("testdata", "hello world!");
   5:          return "forward:forwardlist.jsp";
   6:      }

通过forward我们可以访问特定的页面,而不需要经过视图模型进行监控返回页面一定是jsp的页面,如下代码示例:

   1:  @RequestMapping("/forward.do")
   2:      public String testForword(ModelMap map){
   3:  //        Map<String,Object> map = new HashMap<String, Object>();
   4:          map.put("testdata", "hello world!");
   5:          return "forward:forwardlist.html";
   6:      }

两个对比一下可以发现上面跟下面的requestmapping方法跳转是否有些不同,第二种跳转的时候多了个.do,原因是我把web.xml中Spring的servlet-mapping的<url-pattern></url-pattern>,改写成了<url-pattern>*.do</url-pattern>让方法只对*.do的跳转有效,改成这个原因很简单如果<url-pattern>/</url-pattern>使用这种的话对所有/后面所有链接都进行拦截,但是不会拦截视图模型下对应的后缀名称.我的视图模型对应的配置文件如下:

   1:  <bean id="viewResolver"
   2:          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   3:          <property name="viewClass"
   4:              value="org.springframework.web.servlet.view.JstlView"></property>
   5:          <property name="prefix" value="/" />
   6:          <property name="suffix" value=".jsp"></property>
   7:      </bean>

spring会自动过滤视图模型中的suffix对应的后缀,可以使第一个例子正常访问.

第二种的forward方式是可以跳转到指定的另外一个方法体中,代码如下:

forward的代码:

   1:  @RequestMapping("/forward")
   2:      public String testForword(ModelMap map){
   3:  //        Map<String,Object> map = new HashMap<String, Object>();
   4:          map.put("testdata", "hello world!");
   5:          return "forward:collection1";
   6:      }

collection代码:

   1:  @RequestMapping("/collection1")
   2:      public Collection collection1() {
   3:          logger.info("collection is runing1");
   4:          List toys = new ArrayList();
   5:          toys.add("gg5555555");
   6:          toys.add(new UserBean(1, "a", "b"));
   7:          toys.add(new UserBean(2, "PSP", "2100"));
   8:   
   9:          return toys;
  10:      }
最后显示的效果:

9A9792BE-DD4E-4EE8-AB69-6DEDBB6BFE56

posted @ 2011-01-04 22:05  EdwardLau  阅读(4391)  评论(0编辑  收藏  举报