springMVC目录(下)
零、注意
一、maven web项目中,不能直接访问静态资源(html、css、js等)。
1、为什么不能直接访问静态资源?
因为拦截的是/
和/*.jsp
所以路径为/*.html
也会被拦截,但是dispatcherServlet不能处理这些html,需要交给tomcat默认的servlet去处理。
2、如何交给tomcat默认的servlet处理?
✳①交给默认servlet<mvc:defalut-servlet-handler></mvc:defalut-servlet-handler>
略②指定静态资源路径<mvc:resources mapping="映射路径(浏览器地址)" location="具体路径(webapp下的哪个文件夹下面的哪个静态资源)"></mvc:resources>
(没添加一个静态资源都需要指定,复杂了)
二、返回数据类型(response)
1、重定向返回数据,需要加RedirectAttributes属性,获取时需要使用@RedirectAttributes注解
2、返回任意类型的数据,需要加@ResponseBody返回值转为json格式;
自定义类,还需要开启自定义转换,才能生效,👇<mvc:annotation-driven></mvc:annotation-driven>
三、拦截器与过滤器?
过滤器:tomcat提供的;
拦截器:springMVC提供的;用于对处理器进行预处理和后处理
四、Controller请求转发,json自动转换等功能
需要在spring的xml文件中添加<mvc:annotation-driven></mvc:annotation-driven>
主要就是为了Spring MVC来用的,提供Controller请求转发,json自动转换等功能
五、文件上传下载需要导入jar包、实例化文件上传下载工具
Ⅰ、springMVC返回值的处理
【待补充】
Ⅱ、springMVC常用注解 0
一、@RequestParam
位置:用在方法的入参位置
作用:用于前端传入的参数与方法形参匹配(前端传入的参数名与方法形参名不一致才使用,否则没必要)
属性:
1)value:默认属性,用于指定前端传入的参数名称;
2)required:用于指定此参数是否必传(boolean),默认为true,此时前端不传数据就会报错;
3)defaultValue:当参数为必传参数且前端没有传入参数时,必须指定一个默认值。
@RequestMapping("test1")
public String test1(@RequestParam(value = "user",required = true,defaultValue = "abc")String username){
System.out.println(username);
return "/index.jsp";
}
解释——前端前端将user=***,传到控制层,控制层使用username接收;因为required = true,此时如果前端没有将参数传过来,使用默认值,则username=abc
二、@RequestHeader
位置:用在方法入参位置
作用:用于从请求头中获取参数
属性:同@RequestParam
@RequestMapping("test2")
public String test2(@RequestHeader("cookie") String cookie){
System.out.println(cookie);//JSESSIONID=2D7************
return "/index.jsp";
}
请求头——
三、@CookieValue
位置:用在方法入参位置
作用:用于从cookie中获取参数
@RequestMapping("test3")
public String test3(@CookieValue("JSESSIONID") String jsessionid){
System.out.println(jsessionid);//2D7F453*********
return "/index.jsp";
}
四、@SessionAttributes(value={"…","…","…",……})
位置:放在类上
作用:将请求域的参数,放到session域中
AnnotationController.java
package com.hbw.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@Controller
@RequestMapping("annotation")
@SessionAttributes(value = {
"a","b","c","d","e"})
public class AnnotationController {
@RequestMapping("test4")
public ModelAndView test4(Map map, Model model, ModelAndView modelAndView, ModelMap modelMap, HttpServletRequest request){
map.put("a","1");
model.addAttribute("b","2");
modelAndView.setViewName("/index.jsp");
modelMap.addAttribute("d","4");
request.setAttribute("e","5");
return modelAndView;
}
}
因为使用了request——tomcat内置对象之一,需要导入servlet-api的jar包
但是,新导入的jar包会与启动tomcat插件冲突,给jar包加个作用范围(scope=provided)
pom.xml