原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
之前讲过@RequestBod注解,该注解主要是返回给前端一个json格式的字符串。如果我们不加这个注解则会包一个404的错,404的错主要就是说页面找不到或者方法找不到,很显然,在这应该是页面找不到的意思,怎么找到这个页面呢?这就是今天要讲的页面(也就是MVC中的V)的渲染。
还是在之前的工程,我们需要做点改动:
在spring-servlet.xml文件中加入以下内容:
<!--开启对静态资源的访问 -->
<mvc:default-servlet-handler/>
<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/pages/" p:suffix=".html" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是主页
</body>
</html>
然后新建个controller:PageControlerP,内容如下:
@Controller
@RequestMapping("/page")
public class PageController {
@RequestMapping("/index")
public String index(){
return "index";
}
}
然后启动项目访问/page/index路径:
看到的结果是成功访问了这个html页面,说明访问成功了。接下来就可以自己给html修改样式修改内容什么的了。
这么做的原理是什么呢?
首先,这个html文件是静态资源,比如css,js,图片等等都是静态资源文件,一般放在WEB-INF下,我们从外部访问WEB-INF是没有权限的,毕竟这里放了配置文件。但是这部分文件我们需要访问,于是我们使用<mvc:default-servlet-handler/>开启了访问权限,这是spring3.0.4提供的,在这之前更麻烦。开启了之后我们就需要渲染页面了。
页面一般是由org.springframework.web.servlet.view.InternalResourceViewResolver这个Resolver来渲染的,p:prefix参数是用来设置静态资源的文件, p:suffix参数用来设置静态资源的后缀,当我们普通的Controller返回一个String类型字符串的时候,InternalResourceViewResolver就会自动根据这个字符串,路径和后缀帮我们拼接一个地址(/WEB-INF/pages/字符串.html)然后去判断,如果存在就交给前端进行访问,如果不存在就返回404.当然,我们也可以将路径定义到别的地方,比如什么/WEB-INF/view,甚至是resource下都行,前提是定义好之后文件必须建在这,后缀也是一样,可以是静态页面html,还可以是动态页面jsp等等。动态页面只不过是后端执行之后生成的html给前端进行访问,原理是一样,对数据的操作和servlet差不多。
另外源码还是更新在github上上次的代码中,https://github.com/YaoguaiDa/SpringMVC_Demo.git