目录
服务端验证
①、导入pom依赖
- <dependency>
- <groupId>org.hibernategroupId>
- <artifactId>hibernate-validatorartifactId>
- <version>6.0.7.Finalversion>
- dependency>
②、给实体类加入注解
- package com.mgy.ssm.model;
-
- import javax.validation.constraints.NotBlank;
- import javax.validation.constraints.NotNull;
-
- /**
- * @NotNull :作用于基本数据类型
- * @NotEmpty 作用于集合
- * @NotBlank 作用于字符串
- */
- public class Clazz {
- @NotNull(message = "cid不能为空")
- protected Integer cid;
- @NotBlank(message = "班级名称不能为空")
- protected String cname;
- @NotBlank(message = "教员老师不能为空")
- protected String cteacher;
-
- protected String pic;
-
- public Clazz(Integer cid, String cname, String cteacher, String pic) {
- this.cid = cid;
- this.cname = cname;
- this.cteacher = cteacher;
- this.pic = pic;
- }
-
- public Clazz() {
- super();
- }
-
- public Integer getCid() {
- return cid;
- }
-
- public void setCid(Integer cid) {
- this.cid = cid;
- }
-
- public String getCname() {
- return cname;
- }
-
- public void setCname(String cname) {
- this.cname = cname;
- }
-
- public String getCteacher() {
- return cteacher;
- }
-
- public void setCteacher(String cteacher) {
- this.cteacher = cteacher;
- }
-
- public String getPic() {
- return pic;
- }
-
- public void setPic(String pic) {
- this.pic = pic;
- }
- }
③、将以下方法加入到ClazzController类中
- /**
- * @Valid 是与实体类中 的服务端校验 注解佩环使用的
- * BindingResult 存放了所有微博 校验的错信息
- * @param clazz
- * @param bindingResult
- * @return
- */
- @RequestMapping("/valiAdd")
- public String valiAdd(@Valid Clazz clazz, BindingResult bindingResult,HttpServletRequest req){
- if(bindingResult.hasErrors()){
- Map msg=new HashMap();
- // 违背规则
- List
fieldErrors =bindingResult.getFieldErrors(); - for (FieldError fieldError:fieldErrors) {
- // cid: cid 不能为空
- System.out.println(fieldError.getField()+":"+fieldError.getDefaultMessage());
- // msg.put(cid,cid不能·为空);
- msg.put(fieldError.getField(),fieldError.getDefaultMessage());
- }
- req.setAttribute("msg",msg);
- // 如何出现了错误,应该将提示与显示在 表单提交元素后方
- return "clzEdit";
- }
- else{
- this.clazzBiz.insertSelective(clazz);
- }
- return "redirect:/clz/list";
- }
④、页面修改
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-
-
博客的编辑界面 - <%--
- --%>
-
-
- id:${msg.cid}
- cname:${msg.cname}
- cteacher:${msg.cteacher}
-
效果:


步骤总结:
1.1 pom依赖导入
1.2 在待校验的数据库列段对应的实体类属性打上校验标签 非空校验
1.3 在controller层,方法上添加@valid注解配合前面的校验标签;
添加bindingResult,此对象包含了所有 校验未通过的错误信息
1.4 可以将所有的错误信息以map集合的方式保持,并且传递到前台页面
依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例
只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,比如:在过滤器中修改字符编码;
在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。
过滤器(filter):
1) filter属于Servlet技术,只要是web工程都可以使用
2) filter主要对所有请求过滤
3) filter的执行时机早于Interceptor拦截器(interceptor)
1) interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用
2) interceptor通常对处理器Controller进行拦截
3) interceptor只能拦截dispatcherServlet处理的请求
1)日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。
2)权限检查:如登录检测,进入处理器检测是否登录,如果没有直接返回到登录页面;
3)性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4)通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个Controller中的处理方法都需要的,我们就可以使用拦截器实现。
步骤:
1、实现HandlerInterceptor接口 对应实现三个方法
2、完成springmvc.xml中的配置
拦截器链的配置:
- <mvc:interceptors>
- <mvc:interceptor>
- <mvc:mapping path="/**/"/>
- <bean class="com.mgy.ssm.intercept.OneHadlerInterceptor">bean>
- mvc:interceptor>
- <mvc:interceptor>
- <mvc:mapping path="/clz/**/"/>
- <bean class="com.mgy.ssm.intercept.TwoHadlerInterceptor">bean>
- mvc:interceptor>
- mvc:interceptors>
OneHadlerIntercerptor类
- package com.mgy.ssm.controller;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- import javax.servlet.http.HttpServletRequest;
-
- /**
- * @author 云鹤衫
- * @site www.yunheshan.com
- * @company xxx公司
- * @create 2022-08-20 0:52
- */
- @Controller
- public class LoginController {
- @RequestMapping("/login")
- public String login(HttpServletRequest req){
- // 登录成功 需要 保存 用户信息
- String uname=req.getParameter("uname");
- if("zhangsan".equals(uname)){
- req.getSession().setAttribute("uname",uname);
- }
- return "redirect:/clz/list";
- }
- @RequestMapping("/logout")
- public String logout(HttpServletRequest req){
- req.getSession().invalidate();
- return "index";
- }
- }
springmvc的配置:
- <mvc:interceptors>
- <mvc:interceptor>
- <mvc:mapping path="/**/"/>
- <bean class="com.mgy.ssm.intercept.OneHadlerInterceptor">bean>
- mvc:interceptor>
- mvc:interceptors>
效果:
![]()

