视图解析(html)
现在都提倡前后端分类,在开发中并不提倡使用jsp。所以jsp后面有空再聊
方法一 (推荐)
先导入包依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在配置文件 application.properties 下配置
#返回的页面路径
spring.thymeleaf.prefix=classpath:/templates/
#后缀格式
spring.thymeleaf.suffix=.html
#禁用html 模板缓存
spring.thymeleaf.cache=false
根据上面配置,html文件放在templates下
QQ截图20191014120157.png
然后再用代码就可以访问了。(最后有代码简写方式)
@Controller
public class HtmlController {
@RequestMapping("/six")
public String getsix(){
//如果six.html在文件夹page下的话,得写成 return "page/six";
return "six";
}
}
方法二 (不导包,如果要用拦截器的话就用Filter)
假如工程文件目录如下
QQ截图20191012150423.png
如果我要访问这些文件的话,可以直接在地址栏输
127.0.0.1/one.html
127.0.0.1/two.html
127.0.0.1/html/three.html
127.0.0.1/html/four.html
这种写法不可以访问jsp的 比如http://127.0.0.1/jsp/five.html
当然我们也可以利用Controller层java代码访问
@Controller
public class HtmlController {
@RequestMapping("/one")
public String one(){
return "one.html";
}
@RequestMapping("/three")
public String getHtml() {
return "html/three.html";
}
}
访问时输入
127.0.0.1/one
127.0.0.1/three
当然我们也可以省略掉return 中的.html,我们就需要在配置文件 application.properties 下配置一句话(和方法一的有区别)
#视图控制器
spring.mvc.view.suffix=.html
然后把代码的 .html 去掉也可以访问
我们的简写控制类
如果我们一个一个的写控制类的话,其实是很繁琐的,下面有个方法可以简化
写一个视图配置类,建议新建一个包,用于放配置类
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration//标志当前类在启动的时候会被加载
public class WebMvcConfiguration implements WebMvcConfigurer {
//视图控制器配置
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//urlPath:浏览器输入的地址 viewName:该地址跳转到的页面,不加templates文件夹和.html
//如果没有在配置文件下写 spring.mvc.view.suffix=.html 的话 .setViewName("abc")要写成.setViewName("abc.html");
registry.addViewController("/abc").setViewName("abc");
//也可以写成 registry.addViewController("/abcdef").setViewName("abc");
}
}
这样子,在地址栏输入 127.0.0.1/abc再回车,就可以进入 abc.html 页面了
由此可见,我们可以对registry.addViewController("/abc").setViewName("abc");
进行循环执行的话,不就相当于写了多个控制类吗。
下面就上一个示例代码
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
@Configuration//标志当前类在启动的时候会被加载
public class WebMvcConfiguration implements WebMvcConfigurer {
public ArrayList<String> urllist = new ArrayList<>();
public LinkedHashMap<String,String> urlmap = new LinkedHashMap<>();
public WebMvcConfiguration() {
urllist.add("one");
urllist.add("two");
urllist.add("html/three");
urllist.add("html/four");
urlmap.put("to"+"one","one");
urlmap.put("to"+"two","two");
urlmap.put("to"+"three","html/three");
urlmap.put("to"+"four","html/four");
}
//视图控制器配置
@Override
public void addViewControllers(ViewControllerRegistry registry) {
for(String str:urllist){
registry.addViewController("/"+str).setViewName(str);
}
for(Map.Entry<String,String> entry:urlmap.entrySet()){
registry.addViewController("/"+entry.getKey()).setViewName(entry.getValue());
}
}
}
网友评论