Spring Boot(二)web篇

SpringBoot(二)Web 综合开发

Web 开发

Spring Boot Web 开发非常的简单,其中包括常用的 json 输出、filters、property、log 等

json 接口开发

在以前使用 Spring 开发项目,需要提供 json 接口时需要做哪些配置呢

  1. 添加 jackjson 等相关 jar 包
  2. 配置 Spring Controller 扫描
  3. 对接的方法添加 @ResponseBody

Spring开发web,现在看来使用json是很复杂的,而Springboot只需要在类中添加注解@RestController,就会默认使类中的方法以json返回。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7qpDHqo-1605520613663)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201106141224473.png)]

如果该类中,有方法用于返回json,有方法用于跳转页面,就使用Controller来注解该类,在Json的方法上加上@ResponseBody

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpfgMhcA-1605520613666)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201106141509550.png)]


自定义 Filter

我们常常在项目中会使用 filters 用于录调用日志、排除有 XSS 威胁的字符、执行权限验证等等。Spring Boot 自动添加了 OrderedCharacterEncodingFilter 和 HiddenHttpMethodFilter,并且我们可以自定义 Filter。自定义filter有两种方法:

通过代码进行注册
  1. 首先创建Filter类【注意实现Filter】

  2. 在config配置类,加上该类

    @Configuration
    public class MyConfig {
    
        @Bean
        public FilterRegistrationBean filterRegistrationBean(){
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new MyFilter());
            filterRegistrationBean.setOrder(1); //设置优先级
            filterRegistrationBean.setEnabled(true);//是否启用
            filterRegistrationBean.addUrlPatterns("/*");//拦截路径
            Map<String, String> initParameters = new HashMap();
            initParameters.put("excludes", "/favicon.ico,/img/*,/js/*,/css/*");//排除拦截
            filterRegistrationBean.setInitParameters(initParameters);
            return filterRegistrationBean;
        }
    
通过@WebFilter注解进行注册
  1. 首先创建Filter类【注意实现Filter】

  2. 用@WebFilter修饰该类

    @Order(2)//顺序
    @WebFilter(urlPatterns = "/*", filterName = "MyFilter2")//路径和类名
    
  3. 在启动类加上@ServletComponentScan

    @SpringBootApplication
    @ServletComponentScan
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
    }
    

运行结果

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ssa7ioFL-1605520613668)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201104090516411.png)]

都不设置优先级的情况下,通过代码注册的优先级高


Filter责任链模式

拦截器执行doFilter时,会判断有没有其它过滤器需要执行,如果有则到其它过滤器进行操作,直到已经没有过滤器了才会继续放行代码。


配置文件

在配置文件自定义配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XpGwjfWS-1605520613672)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201106162720836.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3JcPlTNM-1605520613674)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201106162730355.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3JBq7ly-1605520613676)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201106162744338.png)]


Thymeleaf 模板

Spring Boot 推荐使用 Thymeleaf 来代替 Jsp,Thymeleaf 模板到底是什么东西呢

Thymeleaf 介绍

Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 JSP,Velocity,FreeMaker 等,它也可以轻易的与 Spring MVC 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。Thymeleaf 是与众不同的,因为它使用了自然的模板技术。这意味着 Thymeleaf 的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档。模板还可以用作工作原型,Thymeleaf 会在运行期替换掉静态值。

Thymeleaf: <p th:text="${message}">Hello World!</p>

注意,由于 Thymeleaf 使用了 XML DOM 解析器,因此它并不适合于处理大规模的 XML 文件。


Thymeleaf 的好处

  • 动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
  • 开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、改jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
  • 多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
  • 与SpringBoot完美整合,SpringBoot提供了Thymeleaf的默认配置,并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代码几乎没有任何区别,就是在模板语法上有区别。

Thymeleaf使用前提

使用Thymeleaf需要导入依赖

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

导入依赖后,SpringBoot会自动为Thymeleaf注册一个视图解析器:ThymeleafViewResolver
与解析JSP的InternalViewResolver类似,Thymeleaf也会根据前缀和后缀来确定模板文件的位置:

  • 默认前缀:classpath:/templates/
  • 默认后缀:.html


语法

  • ${} :这个类似与el表达式,但其实是ognl的语法,比el表达式更加强大
  • th-指令:th-是利用了Html5中的自定义属性来实现的。如果不支持H5,可以用data-th-来代替
    • th:each:类似于c:foreach 遍历集合,但是语法更加简洁
    • th:text:声明标签中的文本
      • 例如1,如果user.id有值,会覆盖默认的1
      • 如果没有值,则会显示td中默认的1。这正是thymeleaf能够动静结合的原因,模板解析失败不影响页面的显示效果,因为会显示默认值!

URL

URL 在 Web 应用模板中占据着十分重要的地位,需要特别注意的是 Thymeleaf 对于 URL 的处理是通过语法 @{...}来处理的。Thymeleaf 支持绝对路径 URL:

<a th:href="@{http://www.thymeleaf.org}">Thymeleaf</a>

条件求值

<a th:href="@{/login}" th:unless=${session.user != null}>Login</a>

for循环

<tr th:each="prod : ${prods}">
      <td th:text="${prod.name}">Onions</td>
      <td th:text="${prod.price}">2.41</td>
      <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
</tr>

页面即原型

在 Web 开发过程中一个绕不开的话题就是前端工程师与后端工程师的协作,在传统 Java Web 开发过程中,前端工程师和后端工程师一样,也需要安装一套完整的开发环境,然后各类 Java IDE 中修改模板、静态资源文件,启动/重启/重新加载应用服务器,刷新页面查看最终效果。

但实际上前端工程师的职责更多应该关注于页面本身而非后端,使用 JSP,Velocity 等传统的 Java 模板引擎很难做到这一点,因为它们必须在应用服务器中渲染完成后才能在浏览器中看到结果,而 Thymeleaf 从根本上颠覆了这一过程,通过属性进行模板渲染不会引入任何新的浏览器不能识别的标签,例如 JSP 中的 ,不会在 Tag 内部写表达式。整个页面直接作为 HTML 文件用浏览器打开,几乎就可以看到最终的效果,这大大解放了前端工程师的生产力,它们的最终交付物就是纯的 HTML/CSS/JavaScript 文件。

模板缓存

Thymeleaf会在第一次对模板解析之后进行缓存,极大的提高了并发处理能力。但是这给我们开发带来了不便,修改页面后并不会立刻看到效果,我们开发阶段可以关掉缓存使用:application.properties

# 开发阶段关闭thymeleaf的模板缓存
spring.thymeleaf.cache=false
12

注意:在Idea中,我们需要在修改页面后按快捷键:Ctrl + Shift + F9 对项目进行rebuild才可以。


WebJar

什么是WebJars

什么是WebJars?WebJars是将客户端(浏览器)资源(JavaScript,Css等)打成jar包文件,以对资源进行统一依赖管理。WebJars的jar包部署在Maven中央仓库上。


为什么使用

我们在开发Java web项目的时候会使用像Maven,Gradle等构建工具以实现对jar包版本依赖管理,以及项目的自动化管理,但是对于JavaScript,Css等前端资源包,我们只能采用拷贝到webapp目录下的手工方式,这样做就无法对这些资源进行依赖管理。而且容易导致文件混乱、版本不一致等问题。那么WebJars就提供给我们这些前端资源的jar包形式,我们就可以进行****依赖管理****。

WebJars是将这些通用的Web前端资源打包成Java的Jar包,然后借助Maven工具对其管理,保证这些Web资源版本唯一性,升级也比较容易。关于webjars资源,有一个专门的网站http://www.webjars.org/,我们可以到这个网站上找到自己需要的资源,在自己的工程中添加入maven依赖,即可直接使用这些资源了。

如何使用

WebJars主官网 查找对于的组件,比如bootstrap,jquery

<!-- 引用bootstrap -->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.7-1</version>
        </dependency>

<!-- 引用jquery -->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.1.1</version>
        </dependency>

然后我们观察一下项目的依赖jar包,依赖中就有了bootstrap.jar和jquery.jar

img

然后在src/main/resources/static文件下新建index.html,代码如下:

<meta charset="UTF-8">
    <title>Dalaoyang</title>
    <link rel="stylesheet" href="/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css" />
    <script src="/webjars/jquery/3.1.1/jquery.min.js"></script>
    <script src="/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js"></script>

alaoyang


到这里,项目就可以用前端的资源啦。

**参考文章**
https://blog.csdn.net/ityouknow/article/details/80490926?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160462735719724835832495%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=160462735719724835832495&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-26-80490926.pc_v1_rank_blog_v1&utm_term=springboot&spm=1018.2118.3001.4450
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值