热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot中Web综合开发示例分析

本篇内容主要讲解“SpringBoot中Web综合开发示例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“

本篇内容主要讲解“Spring Boot中Web综合开发示例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Boot中Web综合开发示例分析”吧!

Web 开发

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

json 接口开发

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

  1. 添加 jackjson 等相关 jar 包

  2. 配置 Spring Controller 扫描

  3. 对接的方法添加 @ResponseBody

就这样我们会经常由于配置错误,导致406错误等等,Spring Boot 如何做呢,只需要类添加 @RestController 即可,默认类中的方法都会以 json 的格式返回

@RestControllerpublic class HelloController {    @RequestMapping("/getUser")    public User getUser() {        User user=new User();        user.setUserName("小明");        user.setPassWord("xxxx");        return user;    }}

如果需要使用页面开发只要使用 @Controller注解即可,下面会结合模板来说明

自定义 Filter

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

两个步骤:

  1. 实现 Filter 接口,实现 Filter 方法

  2. 添加 @Configuration 注解,将自定义Filter加入过滤链

好吧,直接上代码

  1. @Configuration

  2. public class WebConfiguration {

  3.    @Bean

  4.    public RemoteIpFilter remoteIpFilter() {

  5.        return new RemoteIpFilter();

  6.    }


  7.    @Bean

  8.    public FilterRegistrationBean testFilterRegistration() {


  9.        FilterRegistrationBean registration = new FilterRegistrationBean();

  10.        registration.setFilter(new MyFilter());

  11.        registration.addUrlPatterns("/*");

  12.        registration.addInitParameter("paramName", "paramValue");

  13.        registration.setName("MyFilter");

  14.        registration.setOrder(1);

  15.        return registration;

  16.    }


  17.    public class MyFilter implements Filter {

  18.        @Override

  19.        public void destroy() {

  20.            // TODO Auto-generated method stub

  21.        }


  22.        @Override

  23.        public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)

  24.                throws IOException, ServletException {

  25.            // TODO Auto-generated method stub

  26.            HttpServletRequest request = (HttpServletRequest) srequest;

  27.            System.out.println("this is MyFilter,url :"+request.getRequestURI());

  28.            filterChain.doFilter(srequest, sresponse);

  29.        }


  30.        @Override

  31.        public void init(FilterConfig arg0) throws ServletException {

  32.            // TODO Auto-generated method stub

  33.        }

  34.    }

  35. }

自定义 Property

在 Web 开发的过程中,我经常需要自定义一些配置文件,如何使用呢

配置在 application.properties 中

com.neo.title=纯洁的微笑com.neo.description=分享生活和技术

自定义配置类

  1. @Component

  2. public class NeoProperties {

  3.    @Value("${com.neo.title}")

  4.    private String title;

  5.    @Value("${com.neo.description}")

  6.    private String description;


  7.    //省略getter settet方法


  8.    }

log配置

配置输出的地址和输出级别

logging.path=/user/local/loglogging.level.com.favorites=DEBUGlogging.level.org.springframework.web=INFOlogging.level.org.hibernate=ERROR

path 为本机的 log 地址, logging.level 后面可以根据包路径配置不同资源的 log 级别

数据库操作

在这里我重点讲述 Mysql、spring data jpa 的使用,其中 Mysql 就不用说了大家很熟悉。Jpa 是利用 Hibernate 生成各种自动化的 sql,如果只是简单的增删改查,基本上不用手写了,Spring 内部已经帮大家封装实现了。

下面简单介绍一下如何在 Spring Boot 中使用

1、添加相 jar 包

    org.springframework.boot    spring-boot-starter-data-jpa     mysql    mysql-connector-java

2、添加配置文件

  1. spring.datasource.url=jdbc:mysql://localhost:3306/test

  2. spring.datasource.username=root

  3. spring.datasource.password=root

  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver


  5. spring.jpa.properties.hibernate.hbm2ddl.auto=update

  6. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

  7. spring.jpa.show-sql= true

其实这个 hibernate.hbm2ddl.auto 参数的作用主要用于:自动创建|更新|验证数据库表结构,有四个值:

  1. create: 每次加载 hibernate 时都会删除上一次的生成的表,然后根据你的 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

  2. create-drop :每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。

  3. update:最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。

  4. validate :每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

dialect 主要是指定生成表名的存储引擎为 InneoDB
show-sq 是否打印出自动生产的 SQL,方便调试的时候查看

3、添加实体类和 Dao

  1. @Entity

  2. public class User implements Serializable {


  3.    private static final long serialVersiOnUID= 1L;

  4.    @Id

  5.    @GeneratedValue

  6.    private Long id;

  7.    @Column(nullable = false, unique = true)

  8.    private String userName;

  9.    @Column(nullable = false)

  10.    private String passWord;

  11.    @Column(nullable = false, unique = true)

  12.    private String email;

  13.    @Column(nullable = true, unique = true)

  14.    private String nickName;

  15.    @Column(nullable = false)

  16.    private String regTime;


  17.    //省略getter settet方法、构造方法


  18. }

dao 只要继承 JpaRepository 类就可以,几乎可以不用写方法,还有一个特别有尿性的功能非常赞,就是可以根据方法名来自动的生产 SQL,比如 findByUserName 会自动生产一个以 userName 为参数的查询方法,比如 findAlll 自动会查询表里面的所有数据,比如自动分页等等。。

Entity 中不映射成列的字段得加 @Transient 注解,不加注解也会映射成列

public interface UserRepository extends JpaRepository {    User findByUserName(String userName);    User findByUserNameOrEmail(String username, String email);}

4、测试

  1. @RunWith(SpringJUnit4ClassRunner.class)

  2. @SpringApplicationConfiguration(Application.class)

  3. public class UserRepositoryTests {


  4.    @Autowired

  5.    private UserRepository userRepository;


  6.    @Test

  7.    public void test() throws Exception {

  8.        Date date = new Date();

  9.        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);        

  10.        String formattedDate = dateFormat.format(date);


  11.        userRepository.save(new User("aa1", "aa@126.com", "aa", "aa123456",formattedDate));

  12.        userRepository.save(new User("bb2", "bb@126.com", "bb", "bb123456",formattedDate));

  13.        userRepository.save(new User("cc3", "cc@126.com", "cc", "cc123456",formattedDate));


  14.        Assert.assertEquals(9, userRepository.findAll().size());

  15.        Assert.assertEquals("bb", userRepository.findByUserNameOrEmail("bb", "cc@126.com").getNickName());

  16.        userRepository.delete(userRepository.findByUserName("aa1"));

  17.    }


  18. }

当让 Spring Data Jpa 还有很多功能,比如封装好的分页,可以自己定义 SQL,主从分离等等,这里就不详细讲了

Thymeleaf 模板

Spring Boot 推荐使用 Thymeleaf 来代替 Jsp,Thymeleaf 模板到底是什么来头呢,让 Spring 大哥来推荐,下面我们来聊聊

Thymeleaf 介绍

Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 JSP,Velocity,FreeMaker 等,它也可以轻易的与 Spring MVC 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

好了,你们说了我们已经习惯使用了什么 Velocity,FreMaker,beetle之类的模版,那么到底好在哪里呢?

比一比吧

Thymeleaf 是与众不同的,因为它使用了自然的模板技术。这意味着 Thymeleaf 的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档。模板还可以用作工作原型,Thymeleaf 会在运行期替换掉静态值。Velocity 与 FreeMarke r则是连续的文本处理器。 下面的代码示例分别使用 Velocity、FreeMarker 与 Thymeleaf 打印出一条消息:

Velocity: 

$message

FreeMarker: 

${message}

Thymeleaf: Hello World!

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

URL

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

Thymeleaf

条件求值

Login

for循环

      Onions      2.41      yes

就列出这几个吧

页面即原型

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

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

Gradle 构建工具

Spring 项目建议使用 Maven/Gradle 进行构建项目,相比 Maven 来讲 Gradle 更简洁,而且 Gradle 更适合大型复杂项目的构建。Gradle 吸收了 Maven 和 Ant 的特点而来,不过目前 Maven 仍然是 Java 界的主流,大家可以先了解了解。

一个使用 Gradle 配置的项目

  1. buildscript {

  2.    repositories {

  3.        maven { url "http://repo.spring.io/libs-snapshot" }

  4.        mavenLocal()

  5.    }

  6.    dependencies {

  7.        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE")

  8.    }

  9. }


  10. apply plugin: 'java'  //添加 Java 插件, 表明这是一个 Java 项目

  11. apply plugin: 'spring-boot' //添加 Spring-boot支持

  12. apply plugin: 'war'  //添加 War 插件, 可以导出 War 包

  13. apply plugin: 'eclipse' //添加 Eclipse 插件, 添加 Eclipse IDE 支持, Intellij Idea 为 "idea"


  14. war {

  15.    baseName = 'favorites'

  16.    version =  '0.1.0'

  17. }


  18. sourceCompatibility = 1.7  //最低兼容版本 JDK1.7

  19. targetCompatibility = 1.7  //目标兼容版本 JDK1.7


  20. repositories {     //  Maven 仓库

  21.    mavenLocal()        //使用本地仓库

  22.    mavenCentral()      //使用中央仓库

  23.    maven { url "http://repo.spring.io/libs-snapshot" } //使用远程仓库

  24. }


  25. dependencies {   // 各种 依赖的jar包

  26.    compile("org.springframework.boot:spring-boot-starter-web:1.3.6.RELEASE")

  27.    compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.3.6.RELEASE")

  28.    compile("org.springframework.boot:spring-boot-starter-data-jpa:1.3.6.RELEASE")

  29.    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'

  30.    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.4'

  31.    compile("org.springframework.boot:spring-boot-devtools:1.3.6.RELEASE")

  32.    compile("org.springframework.boot:spring-boot-starter-test:1.3.6.RELEASE")

  33.    compile 'org.webjars.bower:bootstrap:3.3.6'

  34.    compile 'org.webjars.bower:jquery:2.2.4'

  35.    compile("org.webjars:vue:1.0.24")

  36.    compile 'org.webjars.bower:vue-resource:0.7.0'


  37. }


  38. bootRun {

  39.    addResources = true

  40. }

WebJars

WebJars 是一个很神奇的东西,可以让大家以 Jar 包的形式来使用前端的各种框架、组件。

什么是 WebJars

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

为什么使用

我们在开发 Java web 项目的时候会使用像 Maven,Gradle 等构建工具以实现对 Jar 包版本依赖管理,以及项目的自动化管理,但是对于 Javascript,Css 等前端资源包,我们只能采用拷贝到 webapp 下的方式,这样做就无法对这些资源进行依赖管理。那么 WebJars 就提供给我们这些前端资源的 Jar 包形势,我们就可以进行依赖管理。

如何使用

1、 WebJars主官网 查找对于的组件,比如 Vuejs

    org.webjars    vue    2.5.16

2、页面引入

就可以正常使用了!

到此,相信大家对“Spring Boot中Web综合开发示例分析”有了更深的了解,不妨来实际操作一番吧!这里是编程笔记网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


推荐阅读
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • 在Unity3D的第13天学习中,我们深入探讨了关节系统和布料模拟技术。关节系统作为Unity中的关键物理组件,能够实现游戏对象间的动态连接,如刚体间的关系、门的开合动作以及角色的布娃娃效果。铰链关节涉及两个刚体的交互,能够精确模拟复杂的机械运动,为游戏增添了真实感。此外,布料模拟技术则进一步提升了角色衣物和环境装饰物的自然表现,增强了视觉效果的真实性和沉浸感。 ... [详细]
  • 本文深入探讨了 Spring Cloud 微服务架构中 Gateway 组件的应用,详细介绍了其在实现高效请求路由与过滤方面的关键作用。文章首先从基本配置入手,逐步讲解了如何通过静态路由和动态路由实现灵活的服务访问控制。此外,还特别介绍了如何配置 Gateway 以自动从 Nacos 服务注册中心拉取服务列表,进一步提升系统的可维护性和扩展性。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • 深入解析Spring框架中的双亲委派机制突破方法
    在探讨Spring框架中突破双亲委派机制的方法之前,首先需要了解类加载器的基本概念。类加载器负责将类的全限定名转换为对应的二进制字节流。每个类在被特定的类加载器加载后,其唯一性得到保证。然而,这种机制在某些场景下可能会限制灵活性,因此Spring框架提供了一些策略来突破这一限制,以实现更加动态和灵活的类加载。这些策略不仅能够提升系统的可扩展性,还能在复杂的运行环境中确保类的正确加载和管理。 ... [详细]
  • 在 Tomcat 上部署 Jenkins 实现持续集成环境搭建
    本文介绍了如何在Tomcat服务器上部署Jenkins以构建持续集成环境。首先,需下载并解压Tomcat压缩包,例如 `apache-tomcat-8.5.37.tar.gz`。接着,为Tomcat创建一个管理用户,并对相关文件目录进行权限配置,确保Jenkins能够顺利运行于Tomcat之上。此外,还详细阐述了环境配置、服务启动及基本的故障排查技巧,为用户提供了一套完整的部署指南。 ... [详细]
author-avatar
手机用户2502911617_428
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有