SpringMVC

1.SpringMVC是什么

        SpringMVC是Spring框架提供的构建Web应用程序的全功能MVC模块。它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程风格的请求。

        SpringMVC的工作流程:               

        (1)用户发送请求至前端控制器DispatcherServlet

        (2)DispatcherServlet收到请求调用HandlerMapping处理器映射器

        (3)处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

        (4)DispatcherServlet调用HandlerAdapter处理器适配器

        (5)HandlerAdapter经过适配调用具体的Handler处理器(Controller,也叫后端控制器)。Controller执行完成返回ModelAndView。

        (6)HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。

        (7)DispatcherServlet将ModelAndView传给ViewReslover视图解析器

        (8)ViewReslover解析后返回具体View视图

        (9)DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

        (10)DispatcherServlet响应用户。

2.搭建SpringMVC项目

xml方式

        配置pom文件

        

        在resources文件夹下创建SpringMVC核心文件spring-mvc.xml,并添加注解扫描

        

        web.xml中配置SpringMVC核心控制器DispathcerServlet

               

        在项目中,新建“hello.jsp”页面

        

        创建控制器Controller

        

        

配置Tomcat

        启动Tomcat

注解方式

        添加servlet依赖

        

        在config包下创建配置类SpringMvcConfig替换spring-mvc.xml

        

        在config包下创建配置类ServletContainersInitConfig替换web.xml

        

        重新启动并测试

3.SpringMVC框架特点

        1.Spring框架的一部分,无缝集成Spring框架

        2.分离了控制器、模型对象、分派器以及处理程序对象的角色,更容易定制

        3.支持注解驱动、数据验证等功能

        4.高度可配置,支持多种视图技术,而不仅仅局限于JSP

        5.采用松耦合可插入组件结构,比其他MVC框架更具备扩展灵活性

4.常用注解

在Spring MVC 中使用 @RequestMapping 将请求与处理方法一一对应 ,@RequestMapping负责将不同请求映射到对应的控制器方法中

        在@RequestMapping指定的URL中可以含有变量参数,使用@PathVariable指定形参接收url中的参数值,@RequestMapping中也可以设置多个映射URL地址:

        

        @RequestMapping注解也可以使用组合注解来限制方法接收请求的类型。

        

5.实现SpringMVC多种类型数据响应

实现页面跳转

        xml方式: 

        注解方式:  

        返回ModelAndView对象

                修改hello.jsp页面                 

                编写控制器中处理请求的方法

回写数据

        直接返回字符串         

        返回对象或集合

                导入json相关依赖

                

                开启mvc的注解驱动

                        xml方式:spring核心配置文件中加以下配置(<mvc:annotation-driven/>)

                        注解方式:spring配置类上加以下注解@EnableWebMvc

                在entity下面创建实体类:

                

                编写控制器中处理请求的方法:

                

6.SpringMVC文件上传下载

        跨服务器上传文件

                前端(file.jsp)代码: 通过AJAX发送请求:

<script type="text/javascript" src="${pageContext.request.contextPath}/statics/js/jquery-3.6.0.min.js"></script>
    <script type="text/javascript">
        function ajaxUpload(){
            //获取表单数据,并添加到FormData中
            let myfile=$("#myfile")[0].files[0];
            let description=$("#description").val();
            let formData=new FormData();
            formData.append("myfile",myfile);
            formData.append("description",description);
            //发送AJAX请求
            $.ajax({
                //定义请求地址
                url:"${pageContext.request.contextPath}/doAjaxUpload",
                //定义请求类型
                type:"post",
                //定义请求参数(使用js对象)
                data:formData,
                //告诉jQuery不要去处理发送的数据,我们已经通过FormData处理了
                processData:false,
                contentType: false,
                //定义服务器响应的数据格式为json
                dataType:"json",
                //成功响应的结果,data就是服务器返回的json对象
                success:function(data){
                    alert(data.msg);
                    if(data.flag===1){
                        $("#img").attr("src","${pageContext.request.contextPath}/uploadfiles/"+data.content);
                    }
                }
            });
        }
    </script>

                        后端控制器代码:

@RequestMapping("/doAjaxUpload")
    @ResponseBody
    public MsgResult doAjaxUpload(MultipartFile myfile,
                                  String description,
                                  HttpServletRequest request){
        //文件上传到服务器的位置(/uploadfiles)
        String realPath = request.getServletContext().getRealPath("uploadfiles");
        System.out.println(realPath);
        //为上传到服务器的文件取名,使用UUID防止文件名重复
        String filename=UUID.randomUUID().toString()+"-"+myfile.getOriginalFilename();
        File targetFile=new File(realPath,filename);
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }
        MsgResult result=new MsgResult();
        try{
            myfile.transferTo(targetFile);
            result.setFlag(1);
            result.setMsg("文件上传成功");
            result.setContent(filename);
        }catch(Exception ex){
            result.setFlag(1);
            result.setMsg("文件上传失败");
        }
        return result;
    }

7.SpringMVC 日志记录、拦截器及统一异常处理

LogBack日志框架

        日志记录器(Logger)配置:logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义附加器 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %msg%n</pattern>
</encoder>
</appender>
<!-- 根记录器 -->
<root level="debug">
<appender-ref ref="STDOUT" />
</root>

<!-- controller记录器 -->
<logger name="controller" level="info" additivity="false">
<appender-ref ref="STDOUT" />
</logger>

<!-- controller.TestController记录器 -->
<logger name="controller.TestController" level="error" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
</configuration>

        Java代码获取日志记录器(Logger)

SpringMVC拦截器

        拦截器概述:Spring MVC的拦截器(Interceptor)与Java Servlet的过滤器(Filter)类似,主要用于拦截用户的请求并做相应的处理。

        定义拦截器可以通过两种方式: 通过实现HandlerInterceptor接口 、通过实现WebRequestInterceptor接口

//HandlerInterceptor接口里面有三个方法
public class TestInterceptor implements HandlerInterceptor{

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle方法在控制器的处理请求方法前执行");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
System.out.println("postHandle方法在控制器的处理请求方法调用之后,解析视图之前执行");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion方法在控制器的处理请求方法执行完成之后执行,即渲染视图结束之后执行");
}
}

        在SpringMVC的配置文件中进行配置:        

 8.SpringMVC优点

        灵活性和可扩展性强

        MVC 设计模式

        强大的请求处理机制

        丰富的视图技术支持

        高度整合性

        安全性和可靠性高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值