在通过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: }