SpringMvc请求方式分为转发、重定向两种,是用forward和redirect关键字在controller层进行处理。
下面代码实现了这两种不同的请求方式:
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controllerpublic class HelloController {
/**
* 转发形式
* @param name
* @param model
* @return
*/
@RequestMapping("/helloForward") public String helloForward(@RequestParam(value="name", required=false, defaultValue="World2017") String name, Model model) {
model.addAttribute("name", name); return "hello";
}
@RequestMapping("/hello") public String hello() {
return "hello";
}
/**
* 使用RedirectAttributes类
* @param name
* @param redirectAttributes
* @return
*/
@RequestMapping("/helloRedirect") public String helloRedirect(@RequestParam(value="name", required=false ) String name, RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("name", name);
return "redirect:/hello";
}
@RequestMapping("/hello2") public String hello2(Model model,HttpServletRequest request) {
HttpSession session = request.getSession();
model.addAttribute("name",session.getAttribute("name")); return "hello";
}
/**
* 常规做法,重定向之前把参数放进Session中,在重定向之后的controller中把参数从Session中取出并放进ModelAndView
* @param name
* @param request
* @return
*/
@RequestMapping("/helloRedirect2") public String helloRedirect2(@RequestParam(value="name", required=false ) String name, HttpServletRequest request) {
request.getSession().setAttribute("name", name);
return "redirect:/hello2";
}
}
在使用redirect进行重定向时请求的URL链接发生了改变,并且在controller中如果像reward一样 model.addAttribute("name", name)放置的参数,重定向之后是无法获取到的,所以重定向需要另外的方式进行参数的传递,上面的程序介绍了两种重定向传参的方式:
①、重定向之前把参数放进Session中,在重定向之后的controller中把参数从Session中取出并放进ModelAndView
②、使用RedirectAttributes类,这种实现方式比较简单。
再总结一下servlet中转发request.getRequestDispatcher().forward()和重定向response.sendRedirect()的区别:
①、转发是一次请求,一次响应,而重定向是两次请求,两次响应
②、转发:servlet和jsp共享一个request,重定向:两次请求request独立,所以前面request里面setAttribute()的任何东西,在后面的request里面都获取不到
③、转发:地址栏不会改变,重定向:地址栏发生变化。
请求转发,重定向,springmvc怎么实现上边的两种跳转方式呢?
在Spring MVC中,你可以使用不同的方式来实现请求转发和重定向。1.请求转发(Forward):使用HttpServletRequest对象的getRequestDispatcher()方法获取RequestDispatcher对象。使用RequestDispatcher对象的forward()方法进行请求转发。以下是一个示例代码:RequestMapping("\/forwardExample")public String forwardExample(...
spring mvc怎么重定向
SpringMvc请求方式分为转发、重定向两种,是用forward和redirect关键字在controller层进行处理。下面代码实现了这两种不同的请求方式:import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;impo...
spring mvc 重定向,地址栏带了参数,不想带怎么办
response.sendRedirect(url?mesage=xxxx);这是GET方式的。如果我们要以POST方式重定向时,找了一下,发现 没有现成的东西,可以办得到。这里要自己写一个方法去实现:httpClient.java import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Iterator;import jav...
如何解决:redirect-SpringMVC重定向传参的问题:addFlashAttribute_百度...
redirectAttributes.addFlashAttribute("xx", "xx!");\/\/使用addFlashAttribute,参数不会出现在url地址栏中 return "redirect:\/yy";} 要是知道原理就很简单了:redirectAttributes.addFlashAttribute()是把参数放在session中 ,跳转之后再从session中移除。在重定向的页面是可以用el取数据的,但是在重定向...
SpringBoot 项目正常在Eclipse中启动没问题,用maven达成jar包运行后出 ...
回答:看下 spring.mvc.view.suffix的配置是否是.jsp
spring mvc 重定向 打印system打印不出东西怎么回事
代替原先的 system.out.println(注意多加了一个代码注释,这样就行了。无论你用什么开发工具,就算是记事本,都可以用查找替换功能,就是效率高低罢了,不过这个方法确实方便你解决问题而又能保留调试信息。如果项目时间允许,建议你用日志方法代替sysout,这样如果你在交付产品时,在配置文件中把日志的所有...
spring mvc 重定向后model还有数据吗
方式三:使用spring mvc提供的现成工具类 这也是本人推荐的实现方式,当然前提是你用了spring mvc。在spring mvc中,我们常用的是ModelMap,但是它还提供了一个RedirectAttributesModelMap类,该类实现了RedirectAttributes接口,提供一个闪存存储方案,使属性能够在重定向时依旧生存而不用嵌入到url,以下是官方...
springmvc参数配置(springmvc参数)
6、spring是框架,mvc是一种设计模式。8,springmvc默认支持的参数类型有哪些?分别有什么作用Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是使用内置的SpringWeb框架还可以是Struts这样的Web框架。FlashMap管理器,负责重定向时,保存参数至临时存储(默认Session)@...
Spring MVC controller中,使用redirect重定向后却无法传递session的属...
提供的线索无法判断出问题所在。可以肯定,无论何种提交,session中的参数是一定可以传的,如果你看不到,那只是你看不到而已,是别的地方写错了,不是redirect的问题!信我,一定是别的地方错了。
如何防止spring mvc重复提交
解决办法:采用重定向的方式添加数据不会导致数据的重复插入或删除。向servlet发送一个添加请求时,这个servlet只执行添加操作,然后重定向到另一个servlet进行数据的查询,最后转发到显示页面。2)通过Session Token(Session令牌)当客户端第一次向服务器端发送请求的时候,服务器会通过Token标签,并且会将这个...