目录
表单验证(客户端验证)
JSR303是做服务端 参数校验
NotNull:针对的是基本数据类型
NotBlank:作用域字符串
NotEmpty:作用于集合
1.1导入pom依赖
1.2在待校验的数据库列段对应的实体类属性打上校验标签,非空校验
1.3在controller层
方法添加@valid注解配合前面的校验标签
添加bindingResult,此对象包含了所有校验未通过的错误信息
1.4可以将所有的错误信息一pom集合的方式保存,并且传递到前台页面展示
导入jar包依赖
- <!--做服务端参数校验 JSR303的jar包依赖-->
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-validator</artifactId>
- <version>6.0.7.Final</version>
- </dependency>
clzEdit.jsp
- <%--<form action="${pageContext.request.contextPath }/clz/${empty b ? 'add' : 'edit'}" method="post">--%>
- <form action="${pageContext.request.contextPath }/clz/${empty b ? 'valiAdd' : 'edit'}" method="post">
- cid:<input type="text" name="cid" value="${b.cid }"><span style="color: blue">${msg.cid}</span><br>
- cname:<input type="text" name="cname" value="${b.cname }"><span style="color: blue">${msg.cname}</span><br>
- cteacher:<input type="text" name="cteacher" value="${b.cteacher }"><span style="color: blue">${msg.cteacher}</span><br>
- <input type="submit">
- </form>
HelloController.java
- package com.zhoujuan.ssm.controller;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- /**
- * @author zhuojuan
- * @site www.zhoujuan.com
- * @company 玉渊工作室
- * @create 2022-08-19 17:07
- */
- @Controller
- public class HelloController {
- @RequestMapping("hello")
- public String hello(){
- System.out.println("进入业务方法。。。。。");
- return "index" ;
- }
- }
Clazz.java
- /**
- * @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;
ClzzController.java
- /**
- * @Valid 是与实体类中服务端校验 注解配合使用的
- * BindingResult 存放了所有违背校验的错误信息
- * @param clazz
- * @param bindingResult
- * @return
- */
- @RequestMapping("/valiAdd")
- public String valiAdd(@Valid Clazz clazz, BindingResult bindingResult,HttpServletRequest request){
- if(bindingResult.hasErrors()){
- Map msg = new HashMap();
- // 违背了规则
- List<FieldError> fieldErrors =bindingResult.getFieldErrors();
- for(FieldError fieldError : fieldErrors){
- // cid : cid不能为空
- System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
- msg.put(fieldError.getField(),fieldError.getDefaultMessage());
- }
- request.setAttribute("msg",msg);
- // 如果出现了错误,应该将提示显示在 表单提交元素后方
- return "clzEdit";
- }else {
- this.classBiz.insertSelective(clazz);
- }
- return "redirect:/clz/list";
- }
SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
过滤器(filter):
1) filter属于Servlet技术,只要是web工程都可以使用
2) filter主要对所有请求过滤
3) filter的执行时机早于Interceptor拦截器(interceptor)
1) interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用
2) interceptor通常对处理器Controller进行拦截
3) interceptor只能拦截dispatcherServlet处理的请求
3.1实现HandlerInterleptor接口,对应实现三个方法
3.2完成SpringMVC_xml配置
HandlerInterleptor.java
- package com.zhoujuan.ssm.controller;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- /**
- * @author zhuojuan
- * @site www.zhoujuan.com
- * @company 玉渊工作室
- * @create 2022-08-19 17:07
- */
- @Controller
- public class HelloController {
- @RequestMapping("hello")
- public String hello(){
- System.out.println("进入业务方法。。。。。");
- return "index" ;
- }
- }
springmvc_xml配置
-
-
- <mvc:interceptors>
- <mvc:interceptor>
- <mvc:mapping path="/**"/>
- <bean class="com.zhoujuan.ssm.intercept.OnehandlerInterceptor">bean>
- mvc:interceptor>
- <mvc:interceptor>
- <mvc:mapping path="/clz/**"/>
- <bean class="com.zhoujuan.ssm.intercept.TowhandlerInterceptor">bean>
- mvc:interceptor>
- mvc:interceptors>
- beans>
OnehandlerInterceptor.java
- package com.zhoujuan.ssm.intercept;
-
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- /**
- * @author zhuojuan
- * @site www.zhoujuan.com
- * @company 玉渊工作室
- * @create 2022-08-19 16:51
- */
- public class OnehandlerInterceptor implements HandlerInterceptor {
-
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- // 预处理
- System.out.println("[OnehandlerInterceptor] . preHandle");
-
- // 如果login/logout 这个请求 就直接放行
- String url = request.getRequestURL().toString();
- if(url.indexOf("/login") > 0 || url.indexOf("/logout") > 0){
- return true;
- }
-
- // 对于请求业务方法,只有登录过也就是存在session数据,才能访问
- String uname =(String) request.getSession().getAttribute("uname");
- if (uname == null || "".equals(uname)){
- response.sendRedirect("/login.jsp");
- return false;
- }
- return true;
- }
-
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
- // 后处理
- System.out.println("[OnehandlerInterceptor] . preHandle");
- }
-
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
- // 完成后执行
- System.out.println("[OnehandlerInterceptor] . preHandle");
- }
-
-
- }
TowhandlerInterceptor .java
- package com.zhoujuan.ssm.intercept;
-
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- /**
- * @author zhuojuan
- * @site www.zhoujuan.com
- * @company 玉渊工作室
- * @create 2022-08-19 16:51
- */
- public class TowhandlerInterceptor implements HandlerInterceptor {
-
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- // 预处理
- System.out.println("[OnehandlerInterceptor] . preHandle");
- return true;
- }
-
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
- // 后处理
- System.out.println("[OnehandlerInterceptor] . preHandle");
- }
-
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
- // 完成后执行
- System.out.println("[OnehandlerInterceptor] . preHandle");
- }
-
-
- }
LoginContoller.java
- package com.zhoujuan.ssm.controller;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- import javax.servlet.http.HttpServletRequest;
-
- /**
- * @author zhuojuan
- * @site www.zhoujuan.com
- * @company 玉渊工作室
- * @create 2022-08-19 17:58
- */
- @Controller
- public class LoginContorller {
- @RequestMapping("/login")
- public String login(HttpServletRequest request){
- // 登录成功 需要 保存 用户信息
- String uname= request.getParameter("uname");
- if("zhangsan".equals(uname)){
- request.getSession().setAttribute("uname",uname);
- }
- return "index";
- }
-
- @RequestMapping("/logout")
- public String logout(HttpServletRequest request){
- request.getSession().invalidate();
- return "index";
- }
- }
跳转登录界面index.jsp
- <%--
- Created by IntelliJ IDEA.
- User: zjjt
- Date: 2022-8-19
- Time: 18:31
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- 登录界面
- </body>
- </html>
OnehandlerInterceptor.java
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- // 预处理
- System.out.println("[OnehandlerInterceptor] . preHandle");
-
- // 如果login/logout 这个请求 就直接放行
- String url = request.getRequestURL().toString();
- if(url.indexOf("/login") > 0 || url.indexOf("/logout") > 0){
- return true;
- }
-
- // 对于请求业务方法,只有登录过也就是存在session数据,才能访问
- String uname =(String) request.getSession().getAttribute("uname");
- if (uname == null || "".equals(uname)){
- response.sendRedirect("/login.jsp");
- return false;
- }
- return true;
- }