第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

控制器的響應(yīng)與數(shù)據(jù)轉(zhuǎn)發(fā)(三)

標(biāo)簽:
Java SSM Spring
控制器的响应:
【转发】在转发过程中,客户端只发出过1次请求!在浏览器的地址栏中,也只会显示第1次请求的路径!转发是在服务器内部完成的,可以传递数据!
【重定向】当服务器响应重定向时,客户端会发出第2次请求!最终,在浏览器的地址栏中,会显示第2次请求的路径!由于是2次不同的请求,基于Http协议是无状态协议,没有经过特殊处理(Session/Cookie/数据库存取……)的数据是无法在2次请求之间传递的!
至于常见的响应码,这里就不列举了,相信大家都可以通过网络资源整理出来……
数据的转发:
【不推荐】将转发的数据封装在HttpServletRequest对象中
可以为处理请求的方法添加HttpServletRequest request参数,当需要转发数据时,将数据封装在request中即可,后续也不需要显式的执行转发,在SpringMVC的控制器中,默认的响应方式就是转发。
@RequestMapping("handle_reg.com")
public String handleReg(User user, HttpServletRequest request) {
    // 假定输入的用户名已经被占用
    // 提示:您输入的用户名XXX已经被占用
    request.setAttribute("msg","您输入的用户名" + user.getUsername() + "已经被占用!");
    // 返回视图名,也可以理解为文件的文件名
    return "error"; // 页面:/WEB-INF/error.jsp
}
JSP代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error Message</title>
</head>
<body>
<h1>
${msg }
</h1>
</body>
</html>
【不推荐】使用ModelAndView
可以将处理请求的方法的返回值设置为ModelAndView类型,该类型的常用构造方法有:
ModelAndView()
ModelAndView(String viewName)
ModelAndView(String viewName, Map<String, ?> model)
当需要转发数据时,可以使用以上3种中的最后一种:
@RequestMapping("handle_reg.com")
public ModelAndView handleReg(String username) {
    String viewName = "error";
    Map<String, Object> model = new HashMap<String, Object>();
    model.put("msg","[2] 您输入的用户名" + username + "已经被占用!");
    ModelAndView mav = new ModelAndView(viewName, model);
    return mav;
}
由于这种方式使用相对比较复杂,所以,一般不推荐使用这种做法!
【推荐】使用ModelMap封装需要转发的数据
使用ModelMap的流程与使用HttpServletRequest完全相同,即:方法的返回值依然使用String类型,在方法中声明该参数,然后在方法体中直接封装数据,最后,返回视图名:
@RequestMapping("handle_reg.com")
public String handleReg(String username,ModelMap modelMap) {
    modelMap.addAttribute("msg","[3] 您输入的用户名" + username + "已经被占用!");
    return "error";
}
小结
在SpringMVC中,转发数据共有3种做法,
第1种使用HttpServletRequest的做法简单直接.但是,并不推荐这样处理,主要是因为框架已经帮我们处理了request需要执行的任务,而我们在编写代码时应该尽量不干预框架的处理过程。
第2种使用ModelAndView,是框架的核心处理方式.但是,因为使用方式过于麻烦,所以,也不推荐这样使用。
第3种使用ModelMap,使用简洁,推荐使用。
附:重定向
在SpringMVC中,当需要重定向时,首先,应该保证处理请求的方法的返回值是String类型(与转发一样),然后,返回值使用redirect:作为前缀即可,例如:
@RequestMapping("handle_reg.com")
public String handleReg() {
    // 假设注册成功,需要登录
    return "redirect:login.do";
}
需要注意的是:在redirect:右侧的不是视图名,而是重定向的目标的路径,可以是绝对路径,也可以是相对路径。
当处理的请求的返回值类型是String时,如果返回值使用redirect:作为前缀,是重定向,否则,是转发!


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消