0
点赞
收藏
分享

微信扫一扫

前端项目开发流程

guanguans 2023-09-21 阅读 10

目录

一、JSR303

1.1 什么是JSR303

1.2 为什么要使用JSR303

1.3 常用注解

1.4 快速入门

1.4.1 导入依赖

1.4.2 配置校验规则

1.4.3 入门案例

二、拦截器

2.1 什么是拦截器

2.1.1 定义

2.1.2 作用领域 

2.2 过滤器

2.2.1 定义

2.2.2 作用领域

2.3 拦截器与过滤器的区别

2.4 应用场景

2.5 快速入门

2.5.1 入门案例

2.5.2 拦截器工作原理 

2.6 拦截器链

2.7 用户登录权限控制


一、JSR303

1.1 什么是JSR303

JSR303的定义:

1.2 为什么要使用JSR303

JSR303是Java Validation API的规范,它提供了一种简单易用的验证框架,帮助我们在实体类属性上进行验证,对于确保数据的正确性和完整性非常有用。 使用JSR303可以带来以下好处:

1.3 常用注解

JSR303是Java中的Bean Validation规范,其中定义了许多注解用于对JavaBean中的属性进行验证。以下是常用的JSR303注解及其解释:

以上是常用的JSR303注解及其解释,开发者可以根据实际情况选择需要的注解。

@Validated与@Valid区别 ::

1.4 快速入门

1.4.1 导入依赖

<!-- JSR303 -->
<hibernate.validator.version>6.0.7.Final</hibernate.validator.version>

<!-- JSR303 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
</dependency>

1.4.2 配置校验规则

校验属性是否为空:

 @NotNull(message = "歌曲编号不能为空")
private Integer mid;
@NotBlank(message = "歌曲名称不能为空")
private String mname;
@NotBlank(message = "歌曲专辑不能为空")
private String mtype;
@NotBlank(message = "歌曲歌词不能为空")
private String minfo;
@NotBlank(message = "歌曲图片不能为空")
private String mpic = "暂无图片";

1.4.3 入门案例

在MusicController类中添加以下方法:

 //    给数据添加服务端校验
@RequestMapping("/valiAdd")
public String valiAdd(@Validated Music music, BindingResult result, HttpServletRequest req){
// 如果服务端验证不通过,有错误
if(result.hasErrors()){
// 服务端验证了实体类的多个属性,多个属性都没有验证通过
List<FieldError> fieldErrors = result.getFieldErrors();
Map<String,Object> map = new HashMap<>();
for (FieldError fieldError : fieldErrors) {
// 将多个属性的验证失败信息输送到控制台
System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
map.put(fieldError.getField(),fieldError.getDefaultMessage());
}
req.setAttribute("errorMap",map);
}else {
this.musicBiz.insertSelective(music);
return "redirect:list";
}
return "mic/edit";
}

在服务端中进行校验,校验的模型的属性中出现错误,则将错误信息的属性进行遍历添加到map集合中并保存起来回显到前端,需要注意的是,注解@validated保存的是校验时的参数,最终校验的结果保存在BindingResult中.

1.4.4 结果测试

在没有进行后端效验前应该会报空指针异常。

但是在进行后端效验之后,就会将我们的错误信息反馈到前端的展示界面,如下:

控制台效果:

 

二、Java三大器之拦截器

2.1 什么是拦截器

2.1.1 定义

2.1.2 作用领域 

2.2 Java三大器之过滤器

2.2.1 定义

2.2.2 作用领域

2.3 拦截器与过滤器的区别

图解如下:

拦截器和过滤器都是在Java Web开发中对请求进行拦截处理的一种工具,但是它们有以下区别:

总的来说,过滤器更加通用,可以实现一些基本的请求过滤和处理操作,而拦截器则更加灵活,可以根据业务需求实现更加复杂的操作。在实际应用中,需要根据具体的需求选择使用过滤器还是拦截器。 

2.4 应用场景

 2.5 拦截器工作原理 

2.6 用户登录权限控制

基本拦截器配置(在Java目录下新建一个interceptor包,创建拦截器类):

OneInterceptor:

package com.Kissship.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OneInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("【OneInterceptor】:preHandle...");

return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("【OneInterceptor】:postHandle...");

}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("【OneInterceptor】:afterCompletion...");
}
}

TwoInterceptor:

package com.Kissship.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TwoInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("【TwoInterceptor】:preHandle...");

return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("【TwoInterceptor】:postHandle...");

}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("【TwoInterceptor】:afterCompletion...");
}
}

然后在Spring-mvc.xml中配置多拦截器,添加代码如下:

 <!--!    用户权限的请求拦截-->
<mvc:interceptors>
<bean class="com.Kissship.interceptor.LoginInterceptor"></bean>
</mvc:interceptors>

<mvc:interceptors>
<!--2) 多拦截器(拦截器链)-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.Kissship.interceptor.OneInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/mic/**"/>
<bean class="com.Kissship.interceptor.TwoInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>

然后接下来创建一个名为LoginInterceptor的拦截器,如下:

package com.Kissship.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("【implements】:preHandle...");
StringBuffer url = request.getRequestURL();
if (url.indexOf("/login") > 0 || url.indexOf("/logout") > 0){
// 如果是 登录、退出 中的一种
return true;
}
// 代表不是登录,也不是退出
// 除了登录、退出,其他操作都需要判断是否 session 登录成功过
String mname = (String) request.getSession().getAttribute("mname");
if (mname == null || "".equals(mname)){
response.sendRedirect("/page/login");
return false;
}
return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

}
}

接着创建一个新的jsp页面用来充当登录界面进行效果测试,login.jsp代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登入</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/login" method="post" enctype="multipart/form-data">
<label>用户名称:</label><br/>
<input type="text" name="mname"/><br/>
<input type="submit" value="登入"/>
</form>
</body>
</html>

最后进行测试,效果如下:


最后SpringMVC之JSR303和拦截器就到这里,祝大家在敲代码的路上一路通畅!

感谢大家的观看 !

举报

相关推荐

0 条评论