1.控制层如何保存数据到页面
可以保存到四大域对象中.pageContext,request,session,application
request.setAttribute(key,value);//存放数据到request中 request.getAttribute(key);或${key}//获取reques对象中保存的数据
1.1springmvc如何保存数据-request
//把请求路径hello映射到该方法上 //自动接受参数为id的值,而且会自动转型了。 @RequestMapping("/hello") public String hello(HttpServletRequest request){ //可以保存在request对象中 request.setAttribute("name","张三"); System.out.println("~~~~~hello~~~~"); return "main"; //经过视图解析器--/views/main.jsp //这里使用的请求转发 // return "redirect:/views/main.jsp"; //表示我使用重定向跳转 而且不经过视图解析器 }
//上面保存在Request中需要依赖与Servlet。spring自身也提供了一个类用于保存数据Model 默认周期和request对象一样 @RequestMapping("/hello01") public String hello01(Model model){ //可以保存在request对象中 model.addAttribute("name","李四"); System.out.println("~~~~~hello~~~~"); return "main"; //经过视图解析器--/views/main.jsp //这里使用的请求转发 // return "redirect:/views/main.jsp"; //表示我使用重定向跳转 而且不经过视图解析器 }
1.2springmvc保存数据s
Controller
@SessionAttributes(value = {"name","age"}) //指定在model中哪些数据的范围为session范围
public class Hello02Controller {
@RequestMapping("/list01")
public String list01(HttpSession session){
//保存数据到session
session.setAttribute("name","王五");
return "redirect:/views/main.jsp";
}
@RequestMapping("/list02")
public String list02(Model model){
//保存数据到session
model.addAttribute("name","赵六");
model.addAttribute("age","18");
return "redirect:/views/main.jsp";
}
}
2.springmvc相应json数据
2.1什么时候需要响应json数据
ajax异步请求时需要响应的是json数据。实现ajax的方式
第一种:jquey 第二种:axios
2.2servlet之前如何响应json数据
1. 引入fastjson依赖 2. JSON.toJsonString(java对象)把java对象转化为json字符串; 3. out.print(json数据); 4. out.flush(); out.close();
2.3 springmvc响应json数据
1.引入依赖jackson
!--jackson依赖:把controller层方法返回的java对象转化为json字符串-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
3.控制层返回对象
@Controller
public class AjaxController {
//返回的为java对象
@RequestMapping("/ajax01")
@ResponseBody //把该方法返回的java对象转化为json字符串---jackson
public User ajax01(){
User user=new User("张三","123",18,"男",new Date());
return user; //
}
//返回的为java对象
@RequestMapping("/ajax02")
@ResponseBody //把该方法返回的java对象转化为json字符串---jackson
public List<User> ajax02(){
List<User> users=new ArrayList<User>();
users.add(new User("张三1","123",18,"男",new Date()));
users.add(new User("张三2","123",18,"男",new Date()));
users.add(new User("张三3","123",18,"男",new Date()));
users.add(new User("张三4","123",18,"男",new Date()));
return users;
}
}
1.引入jackson依赖
2.在controller方法上使用@ResponseBody:java对象转化为json字符串
3.该方法返回类型java对象
4.springmvc全局异常处理
当controller出现异常时,全部交于springmvc的全局异常处理类解决
4.1.定义一个全局异常处理类
@ControllerAdvice //控制层的异常处理
public class MyGlobleExceptionHandler {
//当控制层发生RuntimeException异常类型时交于该方法处理
@ExceptionHandler(value = RuntimeException.class)
public String my01(RuntimeException e){ //把发生异常的对象交于该方法的参数
System.out.println("发生了运行时异常");
return "fail";
}
//当控制层发生RuntimeException异常类型时交于该方法处理
@ExceptionHandler(value = Exception.class)
public String my01(Exception e){ //把发生异常的对象交于该方法的参数
System.out.println("发生了Exception时异常");
return "fail";
}
}
4.2.修改controller
@RequestMapping("/list01") public String list01(HttpSession session,int id) throws Exception { if(id==1){ int c=10/0; }else if(id==2){ throw new Exception("~~~~~~~~"); } //保存数据到session session.setAttribute("name","王五"); return "redirect:/views/main.jsp"; }
5.springmvc的拦截器
以前:filter过滤。拦截不符合要求的一切请求支援
拦截器:拦截器只会拦截controller层的资源实现拦截器
1.创建一个拦截器
public class MyInterceptor implements HandlerInterceptor { //前缀拦截器--Boolean 如果返回true 允许放行 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("~~~~~~~~~lan jie qi~~~~~~~~~~~~~~~~~~~~"); return false; } }
2.配置拦截器
<!--配置拦截器规则-->
<mvc:interceptors>
<mvc:interceptor>
<!--mapping:拦截的规则/**:表示多层路径-->
<mvc:mapping path="/**"/>
<!--exclude-mapping:无需经过拦截器的路径 -->
<mvc:exclude-mapping path="/list02"/>
<!--bean:表示自定义的拦截器名称-->
<bean class="com.ykq.interceptor.MyInterceptor"/>
</mvc:interceptor></mvc:interceptors>