Spring Boot之Web开发与打War包

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 Spring Boot之Web开发与打War包,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

静态资源访问

静态资源目录

Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

/static
/public
/resources
/META-INF/resources

访问 :当前项目根路径/ + 静态资源名

示例:

在src/main/resources/目录下创建static,并在static目录下存放一张图片1.jpg

访问http://localhost:8080/1.jpg路径即可访问

静态资源默认映射/**,当请求时,先找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面

更改资源路径

1.更改默认的静态资源路径

spring:
  # 更改默认静态资源目录	
  resources:
    static-locations: [classpath:/abc/]

2.更改静态资源访问前缀

访问:当前项目 + static-path-pattern + 静态资源名 =》 静态资源文件夹下找

spring:
  mvc:
    # 更改默认请求映射
    static-path-pattern: /res/**

静态资源配置原理

SpringBoot启动默认加载*AutoConfiguration自动配置类;SpringMVC功能的自动配置类是:WebMvcAutoConfiguration

在这里插入图片描述

配置文件的相关属性和*Properties进行了绑定
在这里插入图片描述
WebMvcProperties就等于application.yml中的如下配置

spring:
  resources:
  mvc:

ResourceProperties就等于application.yml中的如下配置

spring:
  resources:

资源处理的默认规则

spring.resources. add-mappings: false   禁用所有静态资源规则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Webjar

进行web开发时,静态资源文件放置在webapp目录下,在SpringBoot中,资源文件放置在src/main/resources/static目录下

在Servlet3中,允许直接访问WEB-INF/lib下的jar包中的/META-INF/resources目录资源,即WEB-INF/lib/{*.jar}/META-INF/resources下的资源可以直接访问

WebJars利用了此功能,将所有前端的静态文件打包成一个jar包,对于引用方而言,和普通的jar引入是一样的,还能很好的对前端静态资源进行管理。

WebJars的jar包部署在Maven中央仓库上

官网:https://www.webjars.org/

自动映射 /webjars/**

引入Jquery的Jar包

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.6.0</version>
</dependency>

执行测试

访问:http://localhost:8080/webjars/jquery/3.6.0/jquery.js
在这里插入图片描述

注意:webjars/后面地址要按照依赖里面的包路径填写
Spring Boot之Web开发与打War包

欢迎页index.html

Spring Boot 支持静态和模板化的欢迎页面。index.html它首先在配置的静态内容位置中查找文件。如果没有找到,它会寻找一个index模板。如果找到其中任何一个,它会自动用作应用程序的欢迎页面。

1.静态页面

在静态资源目录static下添加index.html

注意:可以配置静态资源路径,但是不可以配置静态资源的访问前缀。否则导致index.html不能被默认访问

2.模板化页面

使用Controller处理index

	@RequestMapping("/index")
    public String test() {
        return "index";
    }

自定义Favicon

Favicon:网站页面的图标,浏览器标签处看到的图标

在这里插入图片描述

在静态资源目录,如static目录下添加favicon.ico 即可实现自定义Favicon

全局捕获异常

@ExceptionHandler表示拦截的具体异常

@ControllerAdvice是controller的一个辅助类,常作为全局异常处理的切面类。约定了几种可行的返回值:

1.返回String,表示跳到某个view

2.返回modelAndView

3.返回model,需使用@ResponseBody进行json转换
@ControllerAdvice
public class GlobalExceptionHandler {
	@ExceptionHandler(RuntimeException.class)
	@ResponseBody
	public Map<String, Object> exceptionHandler() {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("code", "101");
		map.put("msg", "系統错误");
		return map;
	}
}

渲染Web页面

通过@RestController来处理请求,返回的内容为json对象,如果需要渲染html页面,则Spring Boot提供了多种模板引擎的默认配置支持动态HTML

默认配置的模板引擎主要有以下几种:

Thymeleaf

FreeMarker

Velocity

Groovy

Mustache

当使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。如果要修改这个路径,具体如何修改,可在各模板引擎的配置属性中查询并修改。

1.Freemarker渲染web视图

引入依赖

<!-- 引入freeMarker的依赖包. -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

添加配置application.properties

#启用模板缓存
spring.freemarker.cache=true
#检查模板位置是否存在
spring.freemarker.check-template-location=true
#设置编码格式
spring.freemarker.charset=UTF-8
#内容类型值
spring.freemarker.content-type=text/html
#后缀,该后缀用于在构建URL时查看名称。
spring.freemarker.suffix=.ftl
#以逗号分隔的模板路径列表
spring.freemarker.template-loader-path=classpath:/templates/

添加web层访问逻辑

@Controller
public class IndexControler {

	@RequestMapping("/index")
	public String index(ModelMap map) {
		map.addAttribute("name", "小白");
		return "index";
	}
}

在src/main/resources/创建一个templates文件夹,新增后缀为*.ftl的文件。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8"/>
    <title>freemarker</title>
</head>
<body>
	${name}
</body>
</html>

2.JSP渲染Web视图

SpringBoot应用默认支持的动态网页技术是Thymeleaf,并不支持JSP;因此在SpringBoot应用想要使用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>

修改pom.xml打包方式

<packaging>war</packaging>

配置application.properties

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

Controller访问逻辑

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

在main目录下,添加webapp目录与resources目录同级,在main/webapp/WEB-INF/jsp/添加index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>jsp</title>
</head>
<body>
    <h3>hello jsp</h3>
</body>
</html>

打包方式

1.Jar

SpringBoot项目默认打包方式就是打Jar包,所以无需任何配置。

2.War

指定打包方式

在pom.xml中指定打包方式:War
<packaging>war</packaging>

移除自带的内置Tomcat

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<artifactId>spring-boot-starter-tomcat</artifactId>
					<groupId>org.springframework.boot</groupId>
				</exclusion>
			</exclusions>
		</dependency>

添加servlet-api依赖

	<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<scope>provided</scope>
		</dependency>

添加War的启动类

public class WarStarterApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 指向springboot项目的启动类
        return builder.sources(Application.class);
    }
}

最后将生成War包丢进Tomcat运行即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137030.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!