目录
1. controller数据返回到网页并回显
之前使用Sevlet时,我们的网页获取保存的数据呢:可以使用EL表达式。
其中 request: 作用范围: 同一个请求内有效。setAttribute(key,value)
session:作用范围: 同一个会话有效,只要会话不关闭会一直有效。setAttribute(key,value)
在SpringMVC也可以使用
request请求
@RequestMapping("/list01")
public String list(HttpServletRequest request){
//查询到一个学生信息。
Student student=new Student(1,"lcy",new Date());
//可以保存到request中,同一个请求
request.setAttribute("s",student);
return "list01.jsp"; //转发
}
但是如果你使用request,你和tomcat容器绑定了。 但SpringMVC中提过了Model
Model是每次请求中都存在的默认参数,利用其addAttribute()
方法即可将服务器的值传递到jsp
页面中
@RequestMapping("/list01")
public String list(Model model){
//查询到一个学生信息。
Student student=new Student(1,"lcy",new Date());
//可以保存到Model中,同request一样
request.setAttribute("s",student);
return "list01.jsp"; //转发
}
Session也是如此
但是Model默认时request范围,这时需要我们在类的头上添加注解
@SessionAttributes(value = {"user"})
//保存到session范围。
@RequestMapping("/list03")
public String list3(HttpSession session){
Student student=new Student(1,"lcy",new Date());
session.setAttribute("user",student);
return "list03.jsp"; //转发
}
@RequestMapping("/list04")
public String list4( Model model){
Student student=new Student(1,"lcy",new Date());
model.addAttribute("user",student);//默认在request范围
//@SessionAttributes(value = {"user"})
return "list04.jsp"; //转发
}
2. 重定向跳转
在方法的返回字符串的内容时加上redirect:,即为重定向跳转
@RequestMapping("list05")
public String list05(){
return "redirect:list.jsp";
//当springmvc看到你返回的字符串钟含有redirect:时会进行重定向跳转
}
3. SpringMVC返回json数据
当进行异步请求时(Ajax)需要返回json数据,在Servlet中,借助Fastjson,手动的把java对象转化为json格式的数据,并使用out.print(json)输出json数据,然后在关闭out对象。(麻烦)
但在SpringMVC中,有一个内置 名为jackson的jar包,可以把java对象转换为json对象,我们只需要引入依赖即可。
(1)引入jackson依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.2.2</version>
</dependency>
(2) 在类头添加注解 @ResponseBody(作用:把java对象转换为json对象)
@RequestMapping("json01")
@ResponseBody
public List<Student> json01(){
List<Student> list=new ArrayList<Student>();
list.add(new Student(1,"lcy",new Date()));
list.add(new Student(2,"zyf",new Date()));
return list;
}
其中,把时间类转发为json格式,须在属性上面添加注解@JsonFormat(pattern="yyyy-MM-dd")
4. SpringMVC全局异常处理类
当Controller类发生异常时,全局异常类执行处理方法
创建一个异常类: 在类头添加@ControllerAdvice注解
@ControllerAdvice
public class MyExceptinHandle {
@ExceptionHandler(value = Exception.class) //当发生Exception就会触发该方法
public String error(){
return "error.jsp";
}
}
(2)在SpringMVC配置文件中也要添加包扫描,保证SpringMVC能够扫描到该类
<context:component-scan base-package="com.lcy.controller, com.lcy.handler" />
5. SpringMVC拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。
(1)创建类并实现HandlerInterceptor
public class MyInterceptor implements HandlerInterceptor {
//拦截器的处理方法。
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("经过了该拦截器");
return true;//true:表示拦截器放行 false:不放行
}
}
(2)在springmvc配置文件上进行注册。
<!--拦截器的配置-->
<mvc:interceptors>
<mvc:interceptor>
<!--mapping:哪些路径需要经过拦截器 /**: 表示n层路径 /*:表示一层路径-->
<mvc:mapping path="/**"/>
<!--exclude-mapping:设置不经过该拦截的路径-->
<mvc:exclude-mapping path="/login"/>
<!--bean表示你自定义的拦截器类路径-->
<bean class="com.ykq.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>