• JSR303和拦截器


    目录

    1.JSR303

    导入pom依赖:

    后端:

    前端:

    2.拦截器

    OneHandlerInterceptor:

    HelloController:

    springmvc-servlet的配置:

                   拦截器链

    TwoHandlerInterceptor:

    springmvc-servlet的配置

    3.登录权限控制 

    前端:

    后端:


    1.JSR303

    导入pom依赖:

          org.hibernate

          hibernate-validator

          6.0.7.Final

        

    后端:

    clazz实体类:

    1. package com.xbb.ssm.model;
    2. import javax.validation.constraints.NotBlank;
    3. import javax.validation.constraints.NotNull;
    4. /**
    5. * @NotNull :作用于基本数据类型
    6. * @NotEmpty 作用于集合
    7. * @NotBlank 作用于字符串
    8. */
    9. public class Clazz {
    10. @NotNull(message = "班级编号不能为空")
    11. // @Size(max = 100,min = 10,message = "大小必须在10至100之间")
    12. protected Integer cid;
    13. @NotBlank(message = "班级名不能为空")
    14. protected String cname;
    15. @NotBlank(message = "班级教员老师不能为空")
    16. protected String cteacher;
    17. protected String pic;
    18. public Clazz(Integer cid, String cname, String cteacher, String pic) {
    19. this.cid = cid;
    20. this.cname = cname;
    21. this.cteacher = cteacher;
    22. this.pic = pic;
    23. }
    24. public Clazz() {
    25. super();
    26. }

    控制层ClazzController:

    1. // 给数据添加服务端校验
    2. @RequestMapping("/valiAdd")
    3. public String valiAdd(@Validated Clazz clazz, BindingResult result,HttpServletRequest req){
    4. // 如果服务端验证不通过,有错误
    5. if(result.hasErrors()){
    6. // 服务端验证了实体类的多个属性,多个属性都没有验证通过
    7. List fieldErrors = result.getFieldErrors();
    8. Map map = new HashMap<>();
    9. for (FieldError fieldError : fieldErrors) {
    10. // 将多个属性的验证失败信息输送到控制台
    11. System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
    12. map.put(fieldError.getField(),fieldError.getDefaultMessage());
    13. }
    14. req.setAttribute("errorMap",map);
    15. }else {
    16. this.clazzBiz.insertSelective(clazz);
    17. return "redirect:/clz/list";
    18. }
    19. return "clzEdit";
    20. }

    前端:

    clzEdit.jsp:

    1. <%--
      "${pageContext.request.contextPath }/clz/${empty b ? 'add' : 'edit'}" method="post">--%>
    2. "${pageContext.request.contextPath }/clz/${empty b ? 'valiAdd' : 'edit'}" method="post">
    3. id:"text" name="cid" value="${b.cid }">"color: red;">${errorMap.cid}
    4. cname:"text" name="cname" value="${b.cname }">"color: red;">${errorMap.cname}
    5. cteacher:"text" name="cteacher" value="${b.cteacher }">"color: red;">${errorMap.cteacher}
    6. "submit">

    效果展示:

    2.拦截器

    什么是拦截器?

    SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

    OneHandlerInterceptor:

    1. package com.xbb.ssm.intercept;
    2. import org.springframework.web.servlet.HandlerInterceptor;
    3. import org.springframework.web.servlet.ModelAndView;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. public class OneHandlerInterceptor implements HandlerInterceptor {
    7. @Override
    8. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    9. // 预处理
    10. System.out.println("[OneHandlerInterceptor] . preHandle");
    11. return true;
    12. }
    13. @Override
    14. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    15. // 后处理
    16. System.out.println("[OneHandlerInterceptor] . postHandle...");
    17. }
    18. @Override
    19. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    20. // 完成后执行
    21. System.out.println("[OneHandlerInterceptor] . afterCompletion...");
    22. }
    23. }

    HelloController:

    1. package com.xbb.ssm.web;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. /**
    5. * @author 冰冰
    6. * @create 2022-08-19 19:21
    7. */
    8. @Controller
    9. public class HelloController {
    10. @RequestMapping("hello")
    11. public String hello(){
    12. System.out.println("进入业务方法...");
    13. return "index";
    14. }
    15. }

    springmvc-servlet的配置:

    1. "com.xnx.ssm.intercept.OneHandlerInterceptor">

    运行效果:

    拦截器链

    TwoHandlerInterceptor:

    1. package com.xbb.ssm.intercept;
    2. import org.springframework.web.servlet.HandlerInterceptor;
    3. import org.springframework.web.servlet.ModelAndView;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. /**
    7. * @author 冰冰
    8. * @create 2022-08-19 18:32
    9. */
    10. public class TwoHandlerInterceptor implements HandlerInterceptor {
    11. @Override
    12. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    13. // 预处理
    14. System.out.println("[TwoHandlerInterceptor] . preHandle");
    15. return true;
    16. }
    17. @Override
    18. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    19. // 后处理
    20. System.out.println("[TwoHandlerInterceptor] . postHandle...");
    21. }
    22. @Override
    23. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    24. // 完成后执行
    25. System.out.println("[TwoHandlerInterceptor] . afterCompletion...");
    26. }
    27. }

    springmvc-servlet的配置

    1. <mvc:interceptors>
    2. <mvc:interceptor>
    3. <mvc:mapping path="/**"/>
    4. <bean class="com.xbb.ssm.intercept.OneHandlerInterceptor">bean>
    5. mvc:interceptor>
    6. <mvc:interceptor>
    7. <mvc:mapping path="/clz/**"/>
    8. <bean class="com.xbb.ssm.intercept.TwoHandlerInterceptor">bean>
    9. mvc:interceptor>
    10. mvc:interceptors>

    效果

    3.登录权限控制 

    前端:

    login.jsp:

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: Administrator
    4. Date: 2022/8/19
    5. Time: 19:55
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Titletitle>
    12. head>
    13. <body>
    14. 登录界面
    15. body>
    16. html>

    后端:

    LoginController:

    1. package com.xbb.ssm.web;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import javax.servlet.http.HttpServletRequest;
    5. /**
    6. * @author 冰冰
    7. * @create 2022-08-19 19:52
    8. */
    9. @Controller
    10. public class LoginController {
    11. @RequestMapping("/login")
    12. public String login(HttpServletRequest request){
    13. // 登录成功需要保存用户信息
    14. String uname = request.getParameter("uname");
    15. if("zhangsan".equals(uname)){
    16. request.getSession().setAttribute("uname",uname);
    17. }
    18. return "index";
    19. }
    20. @RequestMapping("/loginout")
    21. public String loginout(HttpServletRequest request){
    22. request.getSession().invalidate();
    23. return "index";
    24. }
    25. }

    效果

  • 相关阅读:
    GAMES101 作业0 环境配置 PC下简单配置i
    同一个线程池执行不同类型的任务
    【持续集成_03课_Linux部署Sonar+Gogs+Jenkins】
    Matlab:合并来自各自变量的日期和时间
    2024-06-08 Unity 编辑器开发之编辑器拓展9 —— EditorUtility
    mybatis批量插入
    函数的基本概念
    java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署
    学会Linux,看完这篇就行了!
    【torch高级】一种新型的概率学语言pyro(01/2)
  • 原文地址:https://blog.csdn.net/m0_68211831/article/details/126431281