三.响应配置
1.直接访问视图
<!--
配置直接访问视图
path属性:访问命令
view-name属性:访问的视图名
该视图名同样经过viewResolver处理
最终访问的视图为:prefix+view-name+suffix
-->
<mvc:view-controller path="/showLogin" view-name="login"/>
2.Handler方法返回值类型
- ModelAndView
- 返回模型与视图
- 可以两者均返回,也可以只返回自重任意一种
- String
- 使用字符串作为返回值的时候,其返回值的格式有三种情况
- 直接写字符串
- 返回的是视图名
- 将当前的方法的返回值作为视图名来处理
- 会经过viewResolver处理
redirect:命令
- 使用重定向的方式访问指定的命令
forward:命令
- 使用转发的方式访问指定的命令
- void
- 响应结果与方法的参数有关
- 当方法的参数中包含响应对象的时候
- 将当前的响应交给对应的参数去实现
- 当方法的参数中不包含响应对象的时候
- 将当前的请求名作为视图名返回响应
- 会通过viewResolver进行处理
@ResponseBody Object
- 当方法或者方法的返回值类型被
@ResponseBody
进行标注的时候 - 表示当前方法的返回值是作为数据模型返回
- 不会返回视图,只返回数据模型
- 一般用于Ajax操作
- 如果当前Controller中所有的方法都是返回数据模型的时候
- 可以在当前类上使用
@RestController
代替原有的@Controller
- 当类使用
@RestController
进行标注之后 - 其效果相当于为当前类中的每一个方法都自动添加
@ResponseBody
注解
- 可以在当前类上使用
- 当方法或者方法的返回值类型被
//@Controller
@RestController
@RequestMapping("/resp")
public class ResponseController {
@RequestMapping("/f1")
public String f1(){
return "login";
}
@RequestMapping("/f2")
public ModelAndView f2(){
ModelAndView mav = new ModelAndView();
mav.setViewName("login");
return mav;
}
@RequestMapping("/f3")
public void f3(){
System.out.println("ResponseController.f3");
String s = "/WEB-INF/pages/"+"resp/f3"+".jsp";
}
@RequestMapping("/f4")
public void f4(HttpServletResponse response) throws IOException {
System.out.println("ResponseController.f4");
PrintWriter out = response.getWriter();
out.print("<h1 style='color:green;'>Hello World</h1>");
}
@ResponseBody
@RequestMapping("/f5")
public String f5(){
return "<h1>hello</h1>";
}
@RequestMapping("/f6")
public @ResponseBody String f6(){
return "<h1>hello f6</h1>";
}
}
3.POST请求字符编码过滤器
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4.访问静态资源
默认情况下,所有的SpringMVC工程均无法直接访问静态资源
静态资源:HTML、CSS、JavaScript、image…
必须通过配置实现访问静态资源的目的
有两种方式进行配置
-
方式一
- 配置访问非WEB-INF下的资源
<mvc:default-servlet-handler/>
-
方式二
- 通过配置访问命令进行访问
- 该方式可以访问任意位置的资源
- 可以是非WEB-INF下的,也可以是WEB-INF中的
- 通过
mvc:resources
标签进行配置 - 该配置与其他命令的配置存在区别
- 不是配置一个命令指向一个资源,而是通过通配符进行配置
- 该标签存在两个属性
- mapping属性
- 配置访问静态资源的命令
- 该命令访问是以目录为基准进行配置
- 一般需要与
/*
或者/**
联合使用 /*
表示只匹配一层目录/**
表示匹配0或多层目录- 最终访问资源的命令为:mapping属性值+[资源所在的子目录]+资源的名字
- location属性
- 访问的资源位置
- 值对应的是一个目录的命令,而不是一个具体的静态资源的名字
- 表示访问该目录下的所有的静态资源
- mapping属性
<mvc:resources mapping="/hm/*" location="/WEB-INF/html/"/>
<mvc:resources mapping="/img/**" location="/WEB-INF/images/"/>