美文网首页
SpringBoot下搭建SSM框架开发web网站(三)

SpringBoot下搭建SSM框架开发web网站(三)

作者: 我想放假休息 | 来源:发表于2019-11-05 23:10 被阅读0次

视图解析(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());
        }
    }
}

相关文章

网友评论

      本文标题:SpringBoot下搭建SSM框架开发web网站(三)

      本文链接:https://www.haomeiwen.com/subject/sahybctx.html