SpringBoot访问静态文件

什么是静态文件?

不需要通过web容器去得到的文件,直接通过路径就能得到的文件,比如项目的css,js,img等文件。

所有的资源文件都应该在src/main/resources(maven项目中会自动创建这个文件夹)文件夹下面,但在SpringBoot中,系统默认扫描静态文件在static或者public文件夹下,这里我们在src/main/resources目录下创建一个static文件夹,我们copy一张图片到static目录下,将图片命名为hello.png,我们启动项目并通过浏览器进行访问这张图片

例如:

src/main/resources------>static------->hello.png

访问:localhost:8080/helo.png

SpringBoot采用默认扫描的方式,配置:默认扫描application.properties文件

同样是放在src/main/resources下。

SpringBoot捕获全局异常

以前捕获全局异常需要进行aop封装,这个功能在SpringBoot中的到了封装,我们直接用就好了

@ExceptionHandler 表示拦截异常

@ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常处理的切面类

@ControllerAdvice 可以指定扫描范围

@ControllerAdvice 约定了几种可行的返回值,如果是直接返回 model 类的话,使用 @ResponseBody 进行 json转换

我们在项目下面新建一个包com.exception,新建一个异常拦截类GlobalExceptionHandler进行拦截Controller抛出的异常,我们这里拦截RuntimeException运行时异常,只需要在Controller里面制造一个异常,在hello请求里面增加 int a = 10 / 0;即可被捕获,其他的异常类型大家自己下去演示。

代码:

@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Map<String, Object> exceptionHandler() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("errorCode", "404");
map.put("errorMsg", "找不到页面了!");
return map;
}
}
}

SpringBoot集成thymleaf

在之前的示例中,我们都是通过@RestController来处理请求,所以返回的内容为json对象。那么如果需要渲染html页面的时候,要如何实现呢?

我们说到了SpringBoot是SSM框架和SSH框架的替代品,那么毫无疑问也是用于搭建Web项目,前面简单了提到了控制层的使用和异常的捕获,这里,我们讲一下前台页面的展示。

SSM框架使用的JSP作为前台展示页面,JSP在运行时将要编译成一个Servlet,这样对服务器是一个大大的消耗。而今天,我们只需要使用前台模版引擎,这种方式就好比静态页面的方式,不需要占用服务器太多的资源,这又是我们转投SpringBoot的有一个不可抗拒的理由。

几种前台模版引擎:

Thymeleaf

FreeMarker

Groovy

这里介绍三种,这些都是SpringBoot官方推荐使用的模版,而且特别说出了避免使用JSP,目前用的最多的就是前两种,

当我们使用上述模板引擎中的任何一个,SpringBoot默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。所以今天我们需要在src/main/resources目录下创建一个templates文件夹用来存放我们的前台模版页面。

当使用模版的时候我们需要在配置文件中添加几条配置,SpringBoot自动会读取默认的配置文件路径是在resources下的application.properties文件,这里我们在配置文件中配置下面的参数

spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html

我们使用Thymeleaf的话需要引入相关的jar包

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

这里我们在前台页面目录templates下新建一个index.html文件,内容如下

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<h2>Welcome To Majiaxueyuan For Study</h2>
</body>
</html>

然后我们在com.controller下新建一个Controller命名为CommonController,要返回到页面我们和SSM框架一样,在类上注解Controller而不是RestController,RestController代表是返回JSON字符串给前台,而Controller注解是返回页面,具体代码如下:

@Controller
public class CommonController {
@RequestMapping("/index")
public String index() {
return "index";
}
}

然后这里就配置完成了我们的基本的页面和跳转,我们就可以通过浏览器进行访问了。

到这里我们访问127.0.0.1:8080/index就可以跳转到我们的index.html页面了。

thymleaf展示数据

@Controller
public class CommonController {
@RequestMapping("/index")
public String index(model) {
List<String> list = new ArrayList<>();
List.add("AAAA");
List.add("bbbbb")
model.addAttribute("list","list")
model.addAttribute("name","我们一起学猫叫")
return "index";
}
}
<input type="text" class="layui-input" th:value="${name}" />
<li th:text="${name}"></li>
<table border="1">
 <tr>
   <th>用户名</th>
   <th>邮箱</th>
 </tr>
 <tr  th:each="user : ${userlist}">
    <td th:text="${user.userName}">Onions</td>
    <td th:text="${user.email}">test@test.com.cn</td>
 </tr>
</table>

<table>
		<tr>
			<th>编号</th>
		</tr>
		<tr th:each="l:${list}">
			<td th:text="${l;}"></td>
		</tr>

</table>
<li th:if="${name == null}">为空才显示</li>
<a th:></a>
<img th:src="@{/img/logo.png}"/>
//包括css等都要加th:    @{}

Thymeleafz=中@符号的作用就是获取当前项目的路径

SpringBoot集成JSP(不推荐)

引入jsp的包

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

配置文件中配置下面的参数

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

这样的话我们就可以像以前一样使用JSP进行访问了

SpringBoot学习笔记(二):SpringBoot访问静态文件、捕获全局异常、集成Thymeleaf、集成JSP的更多相关文章

  1. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

  2. springboot学习笔记-6 springboot整合RabbitMQ

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  3. ASP.NET Core 2 学习笔记(五)静态文件

    之前的ASP.NET网站,只要把*.html.*.css.*.jpg.*.png.*.js等静态文件放在项目根目录,默认都可以直接被浏览:但ASP.NET Core 小改了浏览静态文件的方式,默认根目 ...

  4. SpringBoot学习笔记<二>注解

    此篇为项目作结之笔记,关于注解. 项目启动入口@SpringBootApplication[必选]  @ServletComponentScan[可选] 注解后: Servlet.Filter.Lis ...

  5. SpringBoot学习笔记(8)-----SpringBoot文件上传

    直接上代码,上传文件的前端页面: <body> <form action="/index/upload" enctype="multipart/form ...

  6. SpringBoot学习笔记二之Spring整合Mybatis

    原文链接: https://www.toutiao.com/i6803235766274097678/ 在learn-admin-component子工程中加入搭建环境所需要的具体依赖(因为比较长配置 ...

  7. springboot学习笔记-5 springboot整合shiro

    shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/  它提供了很方便的权限认证和登录的功能. 而springboot作为一个开源框架,必然提供了和sh ...

  8. 【转】SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)

    http://blog.csdn.net/a67474506/article/details/61640548 Dubbo是什么东西我这里就不详细介绍了,自己可以去谷歌 SpringBoot整合Dub ...

  9. SpringBoot学习笔记(16)----SpringBoot整合Swagger2

    Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化RESTful风格的web服务 http://swagger.io Springfox的前身是swagger-springmvc,是 ...

  10. SpringBoot学习笔记(11)-----SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用

    1. activemq 首先引入依赖 pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId& ...

随机推荐

  1. 基于第三方开源库的OPC服务器开发指南(3)——OPC客户端

    本篇将讲解如何编写一个OPC客户端程序测试我们在前文<基于第三方开源库的OPC服务器开发指南(2)——LightOPC的编译及部署>一篇建立的服务器.本指南的目的是熟悉OPC服务器的开发流 ...

  2. pytorch,cuda8,torch.cuda.is_available return flase (ubuntu14)

    因为ubuntu 系统是14.0的,安装pytorch1.0的时候,本身已经安装好了cuda8,在验证gpu的时候,torch.cuda.is_available()返回false 安装命令是: co ...

  3. 2019-5-21-win10-uwp-xaml-兼容多个版本条件编译

    title author date CreateTime categories win10 uwp xaml 兼容多个版本条件编译 lindexi 2019-5-21 11:19:3 +0800 20 ...

  4. indexof方法区分大小写

    1)全部转换为大写:str.toUpperCase().IndexOf(s.toUpperCase()) 2)全部转换为小写:str.toLowerCase().IndexOf(s.toLowerCa ...

  5. Batch - C:\Progra~1是什么意思

    就是那种DOS下的8.3的规范,可以这样写 C:\Progra~1也可以这样写全名字的 "C:\Program File",因为这个路径中的文件夹名有空格,要用两个英文输入法下的双 ...

  6. Java 多线程 - ThreadLocal

    ref: https://www.cnblogs.com/chengxiao/p/6152824.html

  7. Python 学习杂项

    #print("Hello World!") #name = "nihfjkds" age = 454 num1 = 1 num2 = 2 #print(nam ...

  8. day30 python类的继承,抽象类等

    Python之路,Day17 = Python基础17-面向对象入门 继承 class Student(People): pass print(Student.__bases__) # 查看 Stud ...

  9. kubernetes istio的快速安装和使用例子

    安装 [root@master ~]# wget https://github.com/istio/istio/releases/download/1.1.5/istio-1.1.5-linux.ta ...

  10. VC++ COMBO BOX控件的使用

    1.你在编辑状态下点那个控件的向下的三角形,就出冒出来一个可以调高度的东东.将高度调高,否则在执行时会不能显示下拉选项.   2.为combo box添加选项,在编辑状态下选combo box控件的属 ...