SpringMVC的响应处理

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 SpringMVC的响应处理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1.将请求数据传入后台处理

1.1 使用默认内置视图解析器·ViewResolver

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/"/>
    <property name="suffix" value=".jsp"/>
</bean>

1.2 使用视图控制器·ViewController

直接跳转页面而不经过后台的逻辑处理

<mvc:view-controller path="/" view-name="index" />

注意!必须在web>WEB-INF文件夹下有同名对应的文件,否则会报错

SpringMVC的响应处理

2.传输数据到视图

2.1 使用Model、Map、ModelMap传输数据到页面

  • Model方式
@RequestMapping("/testmodel")public String testModel(Model model){	model.setAttribute("key01","value");    return "index";}
  • Map方式
@RequestMapping("/testmap")public String testMap(Map map){	map.setAttribute("key01","value");    return "index";}
  • ModelMap方式
@RequestMapping("/testmodelmap")public String testModelMap(ModelMap modelmap){	modelmap.put("key01","value");    return "index";}

这三种方式底层都是传输的他们共有的实现类BindingAwareModelMap.

2.2 使用ModelAndView对象传输数据到页面

ModelAndView可以同时封装数据和视图

@RequestMapping("/testmodelandview")
public String testModelAndValue() {
    ModelAndView modelandvalue = new ModelAndView("main");
	modelandvalue.setAttribute("key01","value");
    return modelandvalue;
}

2.3 使用session传输数据到页面

2.3.1 通过servlet api的方式去读写session

  • 通过参数绑定的方式去获取servlet api
@RequestMapping("/testsession01")
public String testSession01(HttpSession session){
	session.setAttribute("key01","value");
    return "index";
}
  • 通过自动注入的方式去获取servlet api
@Autowried
private HttpSession session;
@RequestMapping("/testsession02")
public String testSession02(){
	session.setAttribute("key02","value");
    return "index";
}

2.3.2 通过springmvc提供的注解方式去读写session

  • @SessionAttributes
    • 用在类上,负责写入session,对当前类下所有方法生效
    • 依赖model,底层是从model中找同名的属性,找到了就在session设置一份一样的
  • @SessionAttribute
    • 用在参数上,负责读 取session
    • model和session可以相互获取写入数据,在参数前设置@SessionAttribute(value=”mytest”)相当于隐式的向model里写入这个参数
  • @SessionAttribute(value=”mytest”, required=false) 可以用来做设置该属性非必须存在(否则未传入时会报400错误)
@RequestMapping("/testsessionattribute")
public String testSessionAttribute(@SessionAttribute("mytest") String mytest){
	System.out.println(mytest);
    return "index";
}

4.使用@ModelAttribute来获取请求中的数据

常用场景

方法上:

// @ModelAttribute修饰的方法会在当前处理器中所有方法之前调用 
@Autowried 
private HttpSession session; 
@ModelAttribute 
public void testModelAttribute(HttpSession s){ 
    this.session=s; 
}

@ModelAttribute修饰的方法会在当前处理器中所有方法之前调用

  • 可以全局变量赋值
@Autowried
private HttpSession session;
@ModelAttribute
public void testModelAttribute(HttpSession s){
	this.session=s; 
}
  • 执行更新数据库操作时,用户提供的修改字段只有部分几个时,就会造成部分字段更新丢失
    • SpringMVC在进行参数绑定以前,会将model中的跟参数名符合的属性拿出来进行合并,新提交的字段会被覆盖,缺失的会保留(用于一些无法定制SQL语句的框架,比如Hibernate)

参数上:可省略

5.页面转发【forward】与重定向【redirect】

forward转发的特点:

  • 地址栏的请求不会发生变化,显示的还是第一次请求的地址
  • 请求的次数:1次
  • 请求域的数据不会丢失
  • 根目录localhost:8080/项目地址/,包含了项目的访问地址

redirect重定向的特点:

  • 地址栏的地址发生变化,显示最新请求的地址
  • 请求次数:2次
  • 请求域中的数据会丢失,因为是不同的请求
  • 根目录:localhost:8080/不包含项目的名称(springmvc中无论转发还是重定向都会包含目名称)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135473.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!