栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring MVC框架

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring MVC框架

Spring MVC框架
  • 一、Spring MVC概述
    • Spring MVC优势
    • Spring MVC本质工作
  • 三、Spring MVC框架部署
    • 3.1 基于maven创建一个web工程
    • 3.2 添加SpringMVC依赖
    • 3.3 创建MVC配置文件
    • 3.4 在web.xml中配置SpringMVC的前端控制器
  • 三、SpringMVC框架使用
    • 3.1 创建控制器
      • 3.1.1 创建控制器类
      • 3.1.2 在控制器类中定义处理请求的方法
      • 3.1.3 访问
    • 3.2 静态资源配置
      • 3.2.1 public class MyDateConverter implements Converter { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); public Date convert(String s) { Date date = null; try { date = sdf.parse(s); } catch (ParseException e) { e.printStackTrace(); } return date; } } 5.2.1 配置自定义日期转换器

        放在转换器工厂,再配置给SpringMVC

            
             
            
                
                    
                        
                    
                
            
        
        六、文件上传 6.1 SpringMVC框架部署回顾
        • 基于maven创建web工程

        • 添加依赖

          • Springcontext aspects jdbc web webmvc jackson
        • 创建 SpringMVC配置文件

        • 在web.xml中配置SpringMVC的前端控制器

        • 在web.xml中配置SpringMVC的编码过滤器
          pom中添加war
          src-main下创建webapp
          webapp下创建WEB-INF
          WEB-INF下创建web.xml
          Project Structure中设置



          按模板创建 spring-servlet-xml 并配置好
          按模板创建werb.xml 并配置好

        • 配置springMVC静态资源处理策略

            
            
            
            
            
        
        6.2 文件上传

        案例说明:添加图书,同时提交图书的封面图片。

        6.2.1 前端提交文件
        • 表单提交方式必须为post
        • 表单enctype=“multipart/form-data”
            

        图书名称:

        图书作者:

        图书价格:

        图书封面:

        6.2.2 在控制器接收数据和文件

        SpringMVC处理上传文件需要借助于CommonsMultipartResolver文件解析器。

        • 需要添加文依赖 commons-io,commons-fileupload
                
                
                    commons-io
                    commons-io
                    2.4
                
        
                
                
                    commons-fileupload
                    commons-fileupload
                    1.4
                
        
        • 在Spring-servlet.xml 中配置文件解析器
            
                
                
                 
            
        
        • 控制器接收文件
          – 在处理文件上传的方法中定义一个MultiPartFile的对象
        6.3 文件下载 6.3.1 文件列表显示
        • list.jsp
        <%--
          Created by IntelliJ IDEA.
          User: zhanghc
          Date: 2021/10/30
          Time: 20:39
          To change this template use File | Settings | File Templates.
        --%>
        <%@ page contentType="text/html;charset=UTF-8" language="java" %>
        
        
            图片列表
        
        
        
        
        
        
        
        
        

        文件列表

        • BookController
            @RequestMapping("/list")
            @ResponseBody
            public String[] listImgs(HttpServletRequest request){
                // 1.从imgs目录下获取所有图片信息
                String dir = request.getServletContext().getRealPath("imgs");
                File imgDir = new File(dir);
                String[] fileNames = imgDir.list();
                return fileNames;
            }
        
        6.3.2 文件下载
        • list.jsp
        var htmlStr = ""
        
        • BookController
            @RequestMapping("/download")
            public void downloading(String fname, HttpServletRequest request, HttpServletResponse response) throws Exception {
        
                // 从imgs目录中找到当前文件
                String dir = request.getServletContext().getRealPath("imgs");
                String filePath = dir+"/"+fname;
                FileInputStream fileInputStream = new FileInputStream(filePath);
        
                response.setContentType("application/exe");
                response.addHeader("Content-Disposition","attachment;filename="+fname);
                IOUtils.copy(fileInputStream,response.getOutputStream());
            }
        
        七、统一异常处理

        在我们的应用系统运行的过程中,可能由于运行环境,用户操作,资源不足等 各方面的原因导致系统出现异常(HTTP状态、Excepton);如果系统出现了异常,这些异常将会呈现给用户,而这种异常的显示没有必要,因此我们可以在服务器进行特定的处理–当系统出现异常之后,能够呈现给用户统一的、可读的异常提示页面。

        7.1 HTTP异常状态统一处理

        HTTP Status 404

        • 创建一个用户于进行异常处理的页面:404.jsp
        • 在web.xml中进行配置
            
                404
                /404.jsp
            
        
        7.2 JAVA代码异常的统一处理 7.2.1 基于servlet-api处理
        • 创建异常提示页面:err.jsp
        • 在web.xml中进行配置
            
                java.lang.NumberFormatException
                /err.jsp
            
        
        7.2.2 基于SpringMVC处理
        • 添加异常处理类 在包utils下创建MyExceptionHandler异常处理类,类中添加注解@ControllerAdvice,类中方法添加@ExceptionHandler
        @ControllerAdvice
        public class MyExceptionHandler {
            @ExceptionHandler(NullPointerException.class)
            public String nullHandler(){
                return "/err.jsp";
        
            }
             @ExceptionHandler(NumberFormatException.class)
            public String numberHandler(){
                  return "/err.jsp";
            }
        }
        
        
        八、拦截器 8.1 什么是拦截器

        SpringMVC提供的拦截器类似于Servlet-api中的过滤器,可以对控制器的请求进行拦截,实现相关的预处理和后处理。

        • 过滤器
          – 是servlet规范的一部分,所有的web项目都可以使用
          – 过滤器在web.xml配置(可以使用注解),能够拦截所有web请求
        • 拦截器
          – 是SpringMVC框架的实现,只有在SpringMVC框架中才能使用。
          – 拦截器springMVC配置文件中进行配置,不会拦截springMVC放行的资源(jsp/html/css…)
          – 拦截器不能替代过滤器,只能用于特定的场景。
        8.2
        • 创建拦截器类,在utils下创建
        public class MyInterceptor1 implements HandlerInterceptor {
            
            //预处理方法
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                System.out.println("-------------------预处理");
                Enumeration keys = request.getParameterNames();
                while(keys.hasMoreElements()){
                    String key = keys.nextElement();
                    if("bookId".equals(key)) {
                        return true;
                    }
                }
                response.setStatus(400);
                return false;
            }
            
            // 后处理方法
            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
                modelAndView.addObject("tips","这是通过拦截器的后处理添加的数据");
                System.out.println("-------------------后处理");
            }
        }
        
        • 配置拦截器,在SpringMVC中配置拦截路径,拦截器类


          表示拦截student下所有控制器,但排查add下的控制器
            
                
                    
                    
                    
                    
                
            
        
        8.3 拦截器链

        将多个拦截器按一定的顺序构成一个执行链

        
                
                    
                    
                
                
                    
                    
                
            
        

        对应的执行链顺序如下。

        九、SSM整合 9.1 创建web项目

        基于maven完成

        • 创建maven web项目
        • pom文件中packing
        war
        
        • 完善maven工程的web项目结构
        • pom中添加web项目依赖
                
                    javax.servlet
                    jsp-api
                    2.0
                    provided
                
                
                
                
                    javax.servlet
                    javax.servlet-api
                    3.1.0
                    provided
                
        
        • 配置服务器运行环境

        9.2 部署Mybatis
        • 添加Mybatis依赖
                
                
                    mysql
                    mysql-connector-java
                    8.0.22
                
        
                
                
                    org.mybatis
                    mybatis
                    3.4.6
                
        
                
                
                    org.projectlombok
                    lombok
                    1.18.20
                    provided
                
        
        • 创建Mybatis配置文件mybatis-config.xml
        9.3 部署Spring,SpringMVC 9.3.1 添加依赖

        context,aptects,jdbc,test,web,webmvc,jackson

         	
                3.8.2
                3.8.2
                5.2.12.RELEASE
            
            
                
                
                    org.springframework
                    spring-context
                    ${spring-version}
                
                
                
                    org.springframework
                    spring-aspects
                    ${spring-version}
                
                
                
                    org.springframework
                    spring-jdbc
                    ${spring-version}
                
                
                
                    org.springframework
                    spring-test
                    ${spring-version}
                
                
                
                    org.springframework
                    spring-web
                    ${spring-version}
                
                
                
                    org.springframework
                    spring-webmvc
                    ${spring-version}
                        
                
                
                    com.fasterxml.jackson.core
                    jackson-databind
                    2.12.4
                
        
        9.3.2 创建spring配置文件,多配置文件分开配置的方式。

        – spring-context.xml 只配置注解声明,以及类的配置

        – spring-mvc.xml 进行mvc相关的配置,静态资源,拦截器

        – spring-mybatis.xml 进行spring与mybaits整合相关的配置

        9.3.3 配置springmvc前端控制器
        • web.xml中配置
            
                SpringMVC
                org.springframework.web.servlet.DispatcherServlet
                
                    contextConfigLocation
                    classpath*:spring-*.xml
                
                1
            
            
                SpringMVC
                /
            
        
        9.4 整合配置 9.4.1 导入mybatis-spring依赖
        
            org.mybatis
            mybatis-spring
            2.0.6
        
        
        
        9.4.2 配置druid连接池
        • 添加druid依赖
        
            com.alibaba
            druid
            1.1.10
        
        
        
        • 创建druid.properties属性文件,并配置
        druid.driver=com.mysql.jdbc.Driver
        druid.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf-8
        druid.username=root
        druid.password=root
        
        ## 连接池参数
        druid.pool.initSize=1
        druid.pool.minIdle=3
        druid.pool.maxActive=20
        druid.pool.timeout=30000
        

        注意:因The server time zone value****报错,加了“?serverTimezone=UTC&”

        • 在spring-mybatis.xml配置数据源
           
            
            
                
                
                
                
        
                
                
                
                
            
        
        
        9.4.3 配置SqlSessionFactory
        • 在spring-mybatis.xml配置SqlSessionFactory
            
                
                
                
                
            
        
        9.4.4 配置MapperScannerConfigurer
        • 在spring-mybatis.xml配置MapperScannerConfigurer
            
                
                
            
        
        9.5 整合配置AOP

        使用spring 提供的事务管理完成DAO操作的事务管理
        一般采用基于注解的方式

        • 将spring提供的事务管理切面类配置到spring容器spring-mybaits.xml中配置
            
            
                
            
            
        

        tx:annotation-driven需要在文件中加入命名空间引用

            xmlns:tx="http://www.springframework.org/schema/tx" 
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd">
        
        9.6 整合测试 9.6.1 完成User的查询操作
        • 创建实体类bean/User.java创建
        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        @ToString
        public class User {
            private int id;
            private String name;
            private String pwd;
        }
        
        • 创建接口 dao/UserDAO
        public interface UserDAO {
            public User queryUserByName(String name);
        }
        
        • 在mappers/UserMapper.xml
        
        
        
                
                    
                    
                     
                
        
                
                    select id,name,pwd from user where name=#{name}
                
        
        
        9.6.2 对DAO进行单元测试
        • 导入junit,spring-test依赖
        
            junit
            junit
            4.12
            test
        
        
        
        • 创建测试类
        @RunWith(SpringJUnit4ClassRunner.class)
        @ContextConfiguration({"classpath:spring-context.xml","classpath:spring-mvc.xml","classpath:spring-mybatis.xml"})
        public class UserDAOTest {
        
            @Resource
            private UserDAO userDAO;
        
            @org.junit.Test
            public void queryUserByName() {
                User user = userDAO.queryUserByName("张恒超");
                System.out.println(user);
            }
        }
        
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357971.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号