您的位置:首页 > 编程语言 > Java开发

springMVC 几种页面跳转方式

2017-09-26 00:00 281 查看

SpringMVC跳转问题

SpringMVC的Controller每次处理完数据后都会返回一个逻辑视图(view)和模型(model)
所以我们会看到原生的Controller是返回一个ModelAndView(内部包含了view和model)。
正常情况下(除非被@ModelAttribute注解了的方法),否则最终都会返回ModelAndView。

当然有时候一个功能处理方法不一定要返回一个逻辑视图,也可以重定向到另一个功能方法
服务器内部转发到一个逻辑视图或者另一个功能方法。


重定向方式: 由于重定向的本质是,要求浏览器重新发送一个请求,SpringMvc里面的页面一般是放到WEB-INF下,浏览器不可以直接访问)
所以这里的重定向实质是重定向到另一个功能方法。

服务器内部请求转发: 请求转发为服务器内部行为,所以可以直接跳转访问一个jsp页面也可以跳转到另一个功能处理方法。

SpringMvc的强大之处在于它封装了Servlet大量底层代码,但是有没有完全屏蔽用户对Servlet API
的使用。所以SpringMvc中页面跳转也是分为两大类:

使用Servlet API实现页面跳转

使用SpringMvc的API实现页面跳转

1、使用Servlet API

1.1通过HttpServletResponse的API直接输出(不需要配置渲染器)

controller类的主要代码

@Controller
public class RequestController{
@RequestMapping("/resp")
public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {

resp.getWriter().println("hello HttpServletResponse");

}

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

dispatcher-servlet.xml主要代码

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!
7fe0
--作用是扫描指定包下所有的包含注解的类-->
<context:component-scan base-package="com.jsu.mvc"/>

</beans>


1.2 使用HttpServletResponse 重定向到另一个视图(其他不变 )

@RequestMapping("/resp")
public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {

resp.sendRedirect("index.jsp");

}
}


1.3 使用HttpServletRequest 转发(默认访问/下的index.jsp页面 不受渲染器的影响)

@RequestMapping("/resp")
public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
req.setAttribute("message","it's forword ");
req.getRequestDispatcher("index.jsp").forward(req,resp);
}


1.4直接返回jsp页面的名称(无渲染器)

其他的配置不变

@RequestMapping("/nice")
public String hello1(){
//转发方式1
return "home.jsp";
//转发方式2
return "forward:index.jsp";
//重定向方式
return "redirect:index.jsp";
}


1.5当有渲染器指定

@RequestMapping("/nice")
public String hello1(){
//转发方式1
return "home";
//转发方式2
return "forward:index";
//重定向方式  hello指的是requsrmapping
return "redirect:hello";
}


2 使用SpringMVCAPI

2.1 使用modelandview普通返回一个视图

需要视图解析器 能指定跳转页面

public class HelloController implements Controller {

@Override
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest,
javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {

ModelAndView mv = new ModelAndView();
//封装要显示到视图的数据
mv.addObject("msg","hello myfirst mvc");
//视图名
mv.setViewName("hello");
return mv;

}
}

[servlet-name]-servlet.xml

<!--配置渲染器-->
<!--配置hellocontroller中页面的位置-->

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!--结果视图的前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--结果视图的后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<bean name="/hello.do" class="com.jsu.mvc.HelloController"></bean>


2.2、使用ModelAndView转发和重定向:

使用ModelAndView时,可以重定向或请求转发 ,也需要配置相应的[servlet-name]-servlet.xml视图解析器

//Controller中使用ModelAndView进行跳转和重定向
@RequestMapping("/e")
public ModelAndView testE(){
System.out.println("testE");
//跳转到服务器内部的一个页面
//return "index";

//跳转到服务器内部的一个功能处理方法
//return new ModelAndView("forward:/dispather/b");
//重定向一个功能方法
return new ModelAndView("redirect:/dispather/b");
}


来自!http://blog.csdn.net/jsu_9207/article/details/51281027
http://www.cnblogs.com/ggr0305/p/7218686.html
唉今天有点头疼转载了几篇博客,没深看,改天在来修改完善一下

9/27修改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: