SpringBoot+热部署+Redis+Thymeleaf+JSR303校验框架的整合

版权声明:禁止转载 https://blog.csdn.net/qq_36505948/article/details/82145941

在处理完基本的部署后,SpringBoot已经可以实现将数据库数据回传到前端以JSON形式展示,但是SpringBoot要进行前端页面的跳转呢,在非前后端分离的项目中,页面跳转是交给后端来发布命令的,因此,我们一般是通过Thymeleaf框架与frameWorker框架两个执行使用,无论是springmvc或者SpringBoot都是样的处理方式!

1-----SpringBoot热部署:

SpingBoot不仅是对SpringMvc进行高度封装,其本身也对Tomcat进行了封装,实现了一键启动和关闭的作用,但是对于开发中我们的频繁修改代码,每次都要进行重启,这明显是很不友好的 ,因此SpringBoot的热部署插件出现了!

1.添加依赖

   分别添加依赖和插件

POM文件依赖包:
        <!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>


Plugin插件包:
<!--热部署插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork><!--保证devtools可以重启-->
                    <addResources>true</addResources><!--加载静态资源-->
                </configuration>
            </plugin>

2.进行IDEA的设置

当部署完成后,需要启动IDEA的权限,使得它允许被程序调用.

---------File-Settings-Compiler-Build Project automatically或者直接搜索compiler

-------注册按钮的启动:

对于2017.2.15版本或已经被中文版本化的IDEA版本,可能会出现命令1失效,如果失效请使用第二条命令:

扫描二维码关注公众号,回复: 4124179 查看本文章

命令1:请看第二条

命令2:ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running 

3.实现效果:

 效果1:修改类或者配置文件,应用会进行重启

效果2:修改静态页面,在thymeleaf已经被配置为cache缓存为false的情况下,应用会被重载(不是重启)


2--------配置Thyemleaf页面跳转

1 .添加依赖

SpringBoot支持想前端传递json数据,但是对于页面跳转则需要另外的设置以保证其能加载和识别HTML,追加依赖如下:

POM文件中依赖如下:
        <!--页面框架-freemarker-->
        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>-->
        <!--两者可以共存,但是一般常用以下-->
        <!--页面框架-thymeleaf-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

 2 .页面使用

步骤1:在resources文件夹里面设置templates模块,设置如下:

步骤2:进行application.yml文件的节点配置-->设置通用的必须参数

步骤3:关闭服务器的缓存:

步骤4:代码如何写

在后端通常采用如下:

前端一般这么用:

   此处的js和bootstarp和validator都是在后端的resources配置好的,其语法网络上已经上五花八门的介绍,这里便不再多说,可自行搜索thymeleaf页面语法!

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>登录</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    
    <!-- jquery @{}里面的斜杠表示static静态文件夹-->
    <script type="text/javascript" th:src="@{/js/jquery.min.js}"></script>
    <!-- bootstrap -->
    <link rel="stylesheet" type="text/css" th:href="@{/bootstrap/css/bootstrap.min.css}" />
    <script type="text/javascript" th:src="@{/bootstrap/js/bootstrap.min.js}"></script>
    <!-- jquery-validator  用于做表单验证-->
    <script type="text/javascript" th:src="@{/jquery-validation/jquery.validate.min.js}"></script>
    <script type="text/javascript" th:src="@{/jquery-validation/localization/messages_zh.min.js}"></script>
    <!-- layer -->
    <script type="text/javascript" th:src="@{/layer/layer.js}"></script>
    <!-- md5.js -->
    <script type="text/javascript" th:src="@{/js/md5.min.js}"></script>
    <!-- common.js -->
    <script type="text/javascript" th:src="@{/js/common.js}"></script>

	<style type="text/css">
		html,body{
			height:100%;
			width:100%;
		}
		body{
			background:url('/img/bg.jpg') no-repeat;
			background-size:100% 100%;
			padding-top:100px;
		}
	</style>

    </head>
<body>

<form name="loginForm" id="loginForm" method="post"  style="width:30%; margin:0 auto;">

	<h2 style="text-align:center; margin-bottom: 20px">用户登录</h2>
	
	<div class="form-group">
       	<div class="row">
	       	<label class="form-label col-md-4">请输入手机号码</label>
	        <div class="col-md-8">
	        	<input id="mobile" name = "mobile" class="form-control" type="text" placeholder="手机号码" required="true"  minlength="11" maxlength="11" />
	    	</div>
	    	<div class="col-md-1">
	    	</div>
    	</div>
    </div>
    
    <div class="form-group">
     		<div class="row">
		        <label class="form-label col-md-4">请输入密码</label>
		        <div class="col-md-8">
		        	<input id="password" name="password" class="form-control" type="password"  placeholder="密码" required="true" minlength="6" maxlength="16" />
	       		</div>
      		</div>
	</div>
	
	<div class="row" style="margin-top:40px;">
		     	<div class="col-md-6">
	       	 		<button class="btn btn-primary btn-block" type="reset" onclick="reset()">重置</button>
	       	 	</div>
	       	 	<div class="col-md-6">
	       	 		<button class="btn btn-primary btn-block" type="submit" onclick="login()">登录</button>
	       	 	</div>
	 </div>
	 
</form>
</body>
<script>
function login(){
	$("#loginForm").validate({
        submitHandler:function(form){
             doLogin();
        }    
    });
}
function doLogin(){
	g_showLoading();
	
	var inputPass = $("#password").val();
	var salt = g_passsword_salt;
	var str = ""+salt.charAt(0)+salt.charAt(2) + inputPass +salt.charAt(5) + salt.charAt(4);
	var password = md5(str);
	
	$.ajax({
		url: "/login/do_login",
	    type: "POST",
	    data:{
	    	mobile:$("#mobile").val(),
	    	password: password
	    },
	    success:function(data){
	    	if(data.status == 0){
                layer.msg("成功");
                window.location.href="/goods/to_list";
            }else{
                layer.msg(data.msg);
            }
            //layer.closeAll();
        },
	    error:function(){
	    	layer.closeAll();
	    }
	});
}
</script>
</html>

3------Redis的部署

1.追加依赖

  新增Redis的依赖,用于与SpringBoot整合

 <!--添加redis的jedis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
            <version>1.4.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

格式化存储:
		<!--fastjson依赖-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.38</version>
		</dependency>

 2.配置

 需要增加配置类与依赖类将数据从,application.yml中读取出来

步骤1:application.yml文件的配置

步骤2:添加依赖类并通过注解将数据给动态加载

步骤3:配置注册Redis的JedisPoolConfig工厂类,本贴图为最基本配置

步骤4:基本参数设置,调用工厂类并设置通过方法

注意:该类就是获取jedis的连接并利用对该连接进行封装,然后通过注解@Service被加载到容器中,在其他类中以注解形式被调用

步骤5:调用实例

 封装的方法被使用:


4-----JSR303验证框架

JSR303框架提供的是一套通过注解代理高高频校验参数的合法性的框架,可以在一定程度上简化代码并减少业务入侵!并简化开发,此外JSR303还提供一套自定义的校验注解方法,用户可以根据自己的需要在自定义适合自己的注解!在开发中。在开发中为了防止过多的注解,导致代码可读性太差,我们一般使用选择将代码封装在一个工具类!

1.追加依赖:

 POM文件依赖:
        <!--集成校验模块-通过注解实现也允许自定义-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

2.注解的想使用

类使用方法1:对于参数的校验,主要是来自于前端回传回来的参数与后端回传出去,接口传递出去的数据,因此我们可以在vo类中进行设置!

类使用方法2:当框架自身提供的注解不满足我们的需求或者不满足我们的逻辑,这个时候可以选择自定义注解,如下:

步骤1:创建 @Interface接口类 。寻找框架提供注解并获取其注解接口类的统一标记语言,维护到自己的@Interface接口上

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsMobileValidator.class })//表示调用的自定义校验器
public @interface  IsMobile {
	
	boolean required() default true;//必备的字段信息,表示必传,当前默认为空

	String message() default "手机号码格式错误";//表示错误时候的信息

	Class<?>[] groups() default { };

	Class<? extends Payload>[] payload() default { };
}

步骤2:创建注解实现类


//自定义的数值校验器
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {
	//实现Constrain参数

	private boolean required = false;//是否必填

	//获取刚刚定义器里面的required是否允许为空,注解
	public void initialize(IsMobile constraintAnnotation) {
		required = constraintAnnotation.required();
	}

	public boolean isValid(String value, ConstraintValidatorContext context) {
		if(required) {
			return ValidatorUtil.isMobile(value);
		}else {//非必填,判断为空则true
			if(StringUtils.isEmpty(value)) {
				return true;
			}else {//有数据则判断规则
				return ValidatorUtil.isMobile(value);
			}
		}
	}

}

当字段回传归来,则可以在vo类里面使用该注解进行注解

步骤3:ValidUtils的内容如下:


public class ValidatorUtil {
	
	private static final Pattern mobile_pattern = Pattern.compile("1\\d{10}");//正则表达式

	//手机校验
	public static boolean isMobile(String src) {
		if(StringUtils.isEmpty(src)) {
			return false;
		}
		Matcher m = mobile_pattern.matcher(src);
		return m.matches();
	}
	
//	public static void main(String[] args) {
//			System.out.println(isMobile("18912341234"));
//			System.out.println(isMobile("1891234123"));
//	}
}

该工具类可以用于后期,各类参数校验与封装,适用于将对参数的各类校验给统一放置起来,在不同场景下使用~~~~~~~~~


猜你喜欢

转载自blog.csdn.net/qq_36505948/article/details/82145941
今日推荐