5.SpringMVC-响应处理
本文最后更新于2024.04.28-06:43
,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥。
1.内置的视图解析器
在spring容器配置中 加入
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
2.MVC 视图控制器
某些放在web-inf下的jsp视图 我们希望可以直接访问,不经过Controller,那么可以通过 视图控制器 直接配置
<mvc:view-controller path="/访问的路径" view-name="视图的名字">
3.如何把数据 传回到jsp页面
方式1:
通过获取Servlet API 调用 相应setAttribute方法 按照Servlet的方式 把数据存放到 对应的 作用域
获取Request对象:方法中 直接声明一个 request对象
@RequestMapping("/users")
public String showUsers(HttpServletRequest request){
request.setAttribute("username","shufen");
return "user";
}
方式2:
Model
map
modelMap
传输数据到页面
在方法中 加入参数 参数可以是 Model
Map
ModelMap
三种类型
model.addAttribute(key,value);
map.put(key,value)
modelMap.addAttribute(key,value)
modelMap.put(key,value) 把值 实际上还是放到 request域中
${key}
${requestScope.key}
@RequestMapping("/modeltest")
public String showUsers2(Model model){
model.addAttribute("username","cuihua");
return "user";
}
@RequestMapping("/maptest")
public String showUsers2(Map map){
map.put("username","zhangsan");
return "user";
}
@RequestMapping("/modelMapTest")
public String showUsers2(ModelMap modelMap){
modelMap.addAttribute("username","lisi");
modelMap.put("username","wangwu");
return "user";
}
方式3:
通过 ModelAndView 对象 传递参数到页面
controller中的方法 返回值类型 改成 ModelAndView
ModelAndView中包含 视图名和数据两部分
@RequestMapping("/mvtest")
public ModelAndView showUsers4(){
// 新建要返回的 视图模型对象 构造方法的参数为 视图的名字
ModelAndView mv = new ModelAndView("user");
// addObject 方法可以往模型中 存放数据
mv.addObject("username","jianguo");
//通过setViewName 设置 要跳转的 视图的名字
mv.setViewName("user");
//方法 直接返回一个 ModelAndView对象 会被 视图解析器解析。
return mv;
}
addObject
setViewName
前面三种方法实际上还会把,请求参数绑定 默认放到request域中去
方式4:
向session中添加输入 并在页面获取:
a.直接在 controller的方法中 声明一个参数 HttpSession session即可,页面上通过 el表达式直接取出
b.在Controller 类的内部 声明一个 成员变量 通过 @Autowired 进行自动注入
@Autowired
private HttpSession session;
c.先获取到request对象 再通过 request对象获取 session
@RequestMapping("/users")
public String showUsers(HttpServletRequest request){
HttpSession session= request.getSession();
return "user";
}
package com.edu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@Controller
@SessionAttributes("username")
public class UserController {
@RequestMapping("/model")
public String userLogin2(String username, String password, Model model){
model.addAttribute("username",username);
model.addAttribute("password",password);
return "success";
}
@RequestMapping("/map")
public String userLogin3(String username, String password, Map map){
map.put("username",username);
map.put("password",password);
return "success";
}
@RequestMapping("/modelMap")
public String userLogin4(String username, String password, ModelMap modelMap){
modelMap.put("username",username);
modelMap.put("password",password);
return "success";
}
}
1// 从model中获取指定的属性写入session中
2 // 底层会从model中去找一个叫做type的属性
3 // 找到了会将type设置一份到session中
4 // 这种方式是依赖model的
5 // 当前控制器下所有的处理方法 都会将model指定的属性写入session
e.通过 @SessionAttribute() 注解 加在方法 的 参数上,表示 从session中 取出 指定key的 value 并赋值给 参数.
@SessionAttribute() 的属性 required 表示 session中的这个参数 是否是必须的。
@RequestMapping("/session")
public String session(@SessionAttribute("user") User user){
// do something
return "index";
}
1 * required 用来设置session中某个属性必须存在 , 不存在则会报错:HTTP Status 400 ‐ Missing session attribute 'type' of type String 2 * model和session是互通的:session可以通过model中去获取写入指定的属性, model 也会从session中自动写入指定的属性
作者:涛哥
链接:https://ltbk.net/back/spring_family/springmvc/article/903.html
文章版权归作者所有,未经允许请勿转载。