SpringBoot(二):web综合开发

一、SpringBoot(二):web综合开发

上篇文章介绍了Spring boot初级教程:spring boot(一):入门篇,方便大家快速入门、了解实践Spring boot特性;本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源技术本文也会介绍),对了这里只是一个大概的介绍,特别详细的使用我们会在其它的文章中来展开说明。

1. 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 HelloWorldController {
    @RequestMapping("/getUser")
        public User getUser() {
        User user=new User();
        user.setUserName("小明");
        user.setPassWord("xxxx");
        return user;
    }
}

如果我们需要使用页面开发只要使用@Controller ,下面会结合模板来说明

自定义Filter

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

两个步骤:

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

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

好吧,直接上代码

@Configuration
public class WebConfiguration {
  @Bean
  public RemoteIpFilter remoteIpFilter() {
    return new RemoteIpFilter();
  }
  @Bean
  public FilterRegistrationBean testFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new MyFilter());
    registration.addUrlPatterns("/*");
    registration.addInitParameter("paramName", "paramValue");
    registration.setName("MyFilter");
    registration.setOrder(1);
    return registration;
  }
 
  public class MyFilter implements Filter {
    @Override
    public void destroy() {
      // TODO Auto-generated method stub
    }
    @Override
    public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException {
      // TODO Auto-generated method stub
      HttpServletRequest request = (HttpServletRequest) srequest;
      System.out.println("this is MyFilter,url :"+request.getRequestURI());
      filterChain.doFilter(srequest, sresponse);
    }
    @Override
    public void init(FilterConfig arg0) throws ServletException {
      // TODO Auto-generated method stub
    }
  }
}

自定义Property(配置)

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

配置在application.properties中

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

配置在application.yml中(个人)

server:  
  port: 8090  //配置端口
  session-timeout: 30  
  tomcat.max-threads: 0  
  tomcat.uri-encoding: UTF-8  
  context-path: /title   //默认访问路径(boot1.0版本)
  servlet:
  	context-path: /title   //默认访问路径(boot2.0版本)
  
spring:  
  datasource:  //数据库配置
    url : jdbc:mysql://localhost:3306/newbirds  
    username : root  
    password : mymysql  
    driverClassName : com.mysql.jdbc.Driver  

注意点 

":"后面必须跟空格,变量命名支持驼峰和“-”连接命名,同时变量在配置文件内也支持直接引用。

com: 
    neo: 
        localtitle: 雨雾清影
        description: 分享生活和技术
        info:{$com.neo.localtitle}乐于向大家{$com.neo.description}

配置有两种使用方式

第一种是直接用**@Value**赋值给变量

@Componentpublic class NeoProperties {
    @Value("${com.neo.title}")
    private String title;    
    @Value("${com.neo.description}")    
    private String description;      
    //省略getter settet方法
}

另一种是用**@ConfigurationProperties**生成配置类,注意使用@ConfigurationProperties(prefix=“localtitle”)自动赋值的话, prefix对应的变量不能写成驼峰命名,既localTitle,会报错。同时get和set的变量名必须一致,支持驼峰命名。

@ConfigurationProperties(prefix = "com.neoinfo")
public class ConfigBean {
  private String localtitle;
  private String description;
  
  public String getLocaltitle() {
    return localtitle;
  }
  
  public void setLocaltitle(String localtitle) {
    this.localtitle = localtitle;
  }
  
  public String getDescription() {
    return description;
  }
  
  public void setDescription(String description) {
    this.description = description;
  }
}

Log配置

SLF4J——Simple Logging Facade For Java,它是一个针对于各类Java日志框架的统一Facade抽象。Java日志框架众多——常用的有**java.util.logginglog4j, logbackcommons-logging**, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定义了统一的日志抽象接口,而真正的日志实现则是在运行时决定的——它提供了各类日志框架的binding。

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了。

从上图可以看到,日志输出内容元素具体如下:

  • 时间日期:精确到毫秒
  • 日志级别:ERROR, WARN, INFO, DEBUG or TRACE
  • 进程ID
  • 分隔符:--- 标识实际日志的开始
  • 线程名:方括号括起来(可能会截断控制台输出)
  • Logger名:通常使用源代码的类名
  • 日志内容

Spring Boot为我们提供了很多默认的日志配置,所以,只要将spring-boot-starter-logging作为依赖加入到当前应用的classpath,则“开箱即用”。下面介绍几种在application.properties就可以配置的日志相关属性。

控制台输出

日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。

Spring Boot中默认配置ERRORWARNINFO级别的日志输出到控制台。您还可以通过启动您的应用程序–debug标志来启用“调试”模式(开发的时候推荐开启),以下两种方式皆可:

  • 在运行命令后加入--debug标志,如:$ java -jar springTest.jar --debug
  • application.properties中配置debug=true,该属性置为true的时候,核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别。

文件输出 >

默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.file或logging.path属性。

  • logging.file,设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
  • logging.path,设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log

如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件。

如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log

注:二者不能同时使用,如若同时使用,则只有logging.file生效

默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO

**级别控制 >

所有支持的日志记录系统都可以在Spring环境中设置记录级别(例如在application.properties中)

格式为:’logging.level.* = LEVEL’

  • logging.level:日志级别控制前缀,*为包名或Logger名
  • LEVEL:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

举例:

  • logging.level.com.dudu=DEBUGcom.dudu包下所有class以DEBUG级别输出
  • logging.level.root=WARN:root日志以WARN级别输出

自定义日志配置

由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

  • Logback:logback-spring.xmllogback-spring.groovylogback.xmllogback.groovy
  • Log4j:log4j-spring.propertieslog4j-spring.xmllog4j.propertieslog4j.xml
  • Log4j2:log4j2-spring.xmllog4j2.xml
  • JDK (Java Util Logging):logging.properties

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项(下面会提到)。

上面是默认的命名规则,并且放在src/main/resources下面即可。

如果你即想完全掌控日志配置,但又不想用logback.xml作为Logback配置的名字,可以通过logging.config属性指定自定义的名字:

logging.config=classpath:logging-config.xml

虽然一般并不需要改变配置文件的名字,但是如果你想针对不同运行时Profile使用不同的日

志配置,这个功能会很有用。

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

logging.path=/user/local/log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR

数据库操作

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

下面简单介绍一下如何在spring boot中使用

1、添加相jar包
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
   <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
  </dependency>
2、添加配置文件
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
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-sql **是否打印出自动生产的SQL,方便调试的时候查看

3、添加实体类和Dao
@Entity
public class User implements Serializable { 
  private static final long serialVersionUID = 1L;  
  
  @Id
  @GeneratedValue
  private Long id;  
  @Column(nullable = false, unique = true)
  private String userName;  
  @Column(nullable = false)  
  private String passWord;  
  @Column(nullable = false, unique = true)  
  private String email;  
  @Column(nullable = true, unique = true)  
  private String nickName;  
  @Column(nullable = false)  
  private String regTime;  
  
  //省略getter settet方法、构造方法
}

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

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

public interface UserDao extends JpaRepository {
  User findByUserName(String userName);
  User findByUserNameOrEmail(String username, String email);
}
4、测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class UserRepositoryTests {    
	@Autowired
    private UserRepository userRepository;   
    @Test
    public void test() throws Exception {
        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);        
        String formattedDate = dateFormat.format(date);
 
        userRepository.save(new User("aa1", "aa@126.com", "aa", "aa123456",formattedDate));
        userRepository.save(new User("bb2", "bb@126.com", "bb", "bb123456",formattedDate));
        userRepository.save(new User("cc3", "cc@126.com", "cc", "cc123456",formattedDate));
 
        Assert.assertEquals(9, userRepository.findAll().size());
        Assert.assertEquals("bb", userRepository.findByUserNameOrEmail("bb", "cc@126.com").getNickName());
        userRepository.delete(userRepository.findByUserName("aa1"));
    }
 
}

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

thymeleaf模板

Spring boot 推荐使用来代替jsp,thymeleaf模板到底是什么来头呢,让spring大哥来推荐,下面我们来聊聊

Thymeleaf 介绍

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

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

比一比吧

Thymeleaf是与众不同的,因为它使用了自然的模板技术。这意味着Thymeleaf的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档。模板还可以用作工作原型,Thymeleaf会在运行期替换掉静态值。Velocity与FreeMarker则是连续的文本处理器。

下面的代码示例分别使用Velocity、FreeMarker与Thymeleaf打印出一条消息:

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

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

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文件。

Gradle 构建工具

spring 项目建议使用Gradle进行构建项目,相比maven来讲 Gradle更简洁,而且gradle更时候大型复杂项目的构建。gradle吸收了maven和ant的特点而来,不过目前maven仍然是Java界的主流,大家可以先了解了解。

一个使用gradle配置的项目

buildscript {
    repositories {
        maven { url "http://repo.spring.io/libs-snapshot" }
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE")
    }
}
 
apply plugin: 'java'  //添加 Java 插件, 表明这是一个 Java 项目
apply plugin: 'spring-boot' //添加 Spring-boot支持
apply plugin: 'war'  //添加 War 插件, 可以导出 War 包
apply plugin: 'eclipse' //添加 Eclipse 插件, 添加 Eclipse IDE 支持, Intellij Idea 为 "idea"
 
war {
    baseName = 'favorites'
    version =  '0.1.0'
}
 
sourceCompatibility = 1.7  //最低兼容版本 JDK1.7
targetCompatibility = 1.7  //目标兼容版本 JDK1.7
 
repositories {     //  Maven 仓库
    mavenLocal()        //使用本地仓库
    mavenCentral()      //使用中央仓库
    maven { url "http://repo.spring.io/libs-snapshot" } //使用远程仓库
}
 
dependencies {   // 各种 依赖的jar包
    compile("org.springframework.boot:spring-boot-starter-web:1.3.6.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.3.6.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-data-jpa:1.3.6.RELEASE")
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.4'
    compile("org.springframework.boot:spring-boot-devtools:1.3.6.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-test:1.3.6.RELEASE")
    compile 'org.webjars.bower:bootstrap:3.3.6'
    compile 'org.webjars.bower:jquery:2.2.4'
    compile("org.webjars:vue:1.0.24")
    compile 'org.webjars.bower:vue-resource:0.7.0'
 
}
 
bootRun {
    addResources = true
}

WebJars

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

什么是WebJars

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

为什么使用

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

如何使用

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

<dependency>
    <groupId>org.webjars.bower</groupId>
    <artifactId>vue</artifactId>
    <version>1.0.21</version>
</dependency>

2、页面引入

<link th:href="@{/webjars/bootstrap/3.3.6/dist/css/bootstrap.css}" rel="stylesheet"></link>

就可以正常使用了!

本文所有讲的代码示例都在这里https://github.com/ityouknow/spring-boot-starter

 

 

PS:博文仅作为个人学习笔记,如有错误欢迎指正,转载请注明出处~

更多博文详见:

《博文笔记 分类导航目录》

参考文档:

1. Spring Boot干货系列:(二)配置文件解析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot是Java语言中非常流行的快速开发框架,它提供了丰富的开箱即用功能,能够极大地提高开发效率。学生综合素质评价是一种全面评估学生综合素质的方法,这包括学生的思想品德、学业水平、实践能力和社会责任感等方面。 在使用Spring Boot进行学生综合素质评价时,可以采用一些开源的综合性评价工具,这些工具具有很好的可定制性和可扩展性,能够满足不同学校、不同年级和不同学科的需求。通过这些工具,可以搜集学生的课程表现、考试成绩、作业水平、课外活动表现、社会实践经历等多方面的数据,并对这些数据进行评估和分析,形成全面的综合素质评价报告。 在具体实施过程中,可以使用Spring Boot提供的数据访问框架,如Spring Data JPA等,来快速开发数据访问层。同时,可以使用Spring Boot提供的MockMvc和TestRestTemplate等工具来进行接口测试,确保评价系统的正确性和稳定性。通过这种方式,可以帮助学校、学生和家长更好地了解学生的学习状态和综合素质水平,提高学生的学习动力和学习效果。 ### 回答2: Spring Boot 是一款优秀的 Java 开发框架,可以极大地提高开发效率。而学生综合素质评价则是对学生进行全方位、多维度的评估,包括学习成绩、品德修养、思想素质、身心健康等方面。那么,Spring Boot 和学生综合素质评价有什么关联呢? 首先,Spring Boot 的快速开发特点可以为学生综合素质评价系统的建设提供支持。通过利用 Spring Boot 等框架,开发人员可以快速地搭建出一个具有优秀可扩展性和稳定性的平台。这样便可以方便地记录学生的成绩、综合评价、心理健康等数据。 其次,在学生综合素质评价系统开发中,Spring Boot 对于数据交互也发挥了重要作用。利用 Spring Boot 对于数据库操作的支持,可以将学生综合素质评价系统与学校的其他信息系统无缝集成,实现数据共享和互通。同时,Spring Boot 也能够方便地进行 API 接口开发,使得学生综合素质评价系统更加易用。 总而言之,Spring Boot 学生综合素质评价是十分有意义的。利用 Spring Boot 可以快速搭建出一个良好的评价平台,并且通过其强大的数据处理功能,方便进行数据交互与 API 可扩展操作。通过 Spring Boot 对于学生综合素质评价的应用,可以不仅提高系统的开发效率和运行效果,还有助于更好地记录、分析和评估学生的多样化综合成长。 ### 回答3: Spring Boot是一种基于Java语言的快速开发框架,能够简化web应用程序的开发和部署过程。而学生综合素质评价则是一种学生综合表现的全面评价方法,用于客观评价学生在学习、生活等方面的综合能力。那么,如何将这两者结合起来呢? 我们可以基于Spring Boot框架开发出一个学生综合素质评价系统,通过该系统能够实现学生综合素质数据的收集、分析和评价。该系统可以从学生每天的学习、生活、思考等方面收集数据,例如学生每天的上课情况、学习成绩、参加社交活动的情况等。然后将这些数据上传至服务器进行分析,并将分析结果用可视化的方式呈现给用户。 在这个过程中,Spring Boot框架的优点得到了应用。首先,Spring Boot的起步依赖机制提供了大量的自动化配置,使得开发人员可以更加专注于业务的开发和设计。其次,Spring Boot集成了各种现代化的框架和技术,例如Spring Cloud、Spring Data JPA等,能够快速搭建高可用、高性能的系统。最后,Spring Boot开发的应用程序具有高度的可维护性和可扩展性,能够支持系统的快速迭代和升级。 综上所述,使用Spring Boot开发学生综合素质评价系统是非常可行的,通过该系统能够实现学生综合素质的全面评价和数据分析,为学生的成长提供了更多的支持和帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值