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

SpringMvc框架 汇总

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

SpringMvc框架 汇总

一、快速入门 1.什么是MVC架构

MVC是一种软件架构的思想,讲软件按照模型、视图、控制器来划分

        M:Model,模型层,指工程中的JavaBean,作用是处理数据

        JavaBean分为两类:

        ①一类称为实体类Bean:专门存储业务数据的,如Student

        ②一类称为业务处理Bean:指service或Dao对象,专门用于处理业务逻辑或数据访问

        V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据

        C:Controller,指工程中的Servlet,作用是接收请求和响应浏览器

MVC的工作流程:

        用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求的处理结果找到相应的View视图,渲染数据后最终相应给浏览器

2.什么是SpringMVC

        springmvc是spring框架的一种分支。SpringMVC 是类似于 Struts2 的一个 MVC 框架,在实际开发中,接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示,但是上手难度却比 Struts2 简单多了。而且由于 Struts2 所暴露出来的安全问题,SpringMVC 已经成为了大多数企业优先选择的框架。

3.为什么使用SpringMVC

 4.快速入门SpringMVC

(1)创建一个web工程

 (2)引入SpringMVC的依赖


    org.springframework
    spring-webmvc
    5.2.9.RELEASE

(3)创建控制层

@Controller
public class HelloController {
    @RequestMapping("/hello01")//根据请求路径映射响应的方法
    public String hello(){
        System.out.println("-----hello01-----");
        return "hello01";//默认把返回的字符串作为响应的网页帮你进行转发
    }
}

(4)配置SpringMVC的配置文件



    
    
    
    

(5)引入前端控制器web.xml



    
    
        springmvc01
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc01.xml
        
    
    

二、 SpringMVC的深入 1.把控制层的数据渲染到页面

request, 同一个请求内有效。 ---->EL表达式 获取相应范围的对象数据。

session: 同一个会话有效。

@Controller
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping("/index")
    public String hello(Model model){
        //model对象可以理解为request对象,在该对象中保存的数据,作用域在同一个请求有效
        User user = new User("任小粟",1,"121013",22,new Date());
        model.addAttribute("user",user);
        return "index";
    }
    @RequestMapping("index01")
    public String hello01(HttpServletRequest request){
        User user = new User("杨小槿",1,"151",22,new Date());
        request.setAttribute("user2",user);
        return "index";
    }
    //上面两种方法的作用是一样的  都是保存在request的范围
    @RequestMapping("index02")
    public String hello02(HttpSession session){
        User user = new User("颜六元",1,"qiShi",21,new Date());
        session.setAttribute("user3",user);
        return "index";
    }
}
2.返回Json数据

(1)引入jackson依赖

    
      com.fasterxml.jackson.core
      jackson-databind
      2.12.4
    

(2)控制层直接返回对应的对象类型    @ResponseBody——>把java对象转换为json对象

@Controller
@RequestMapping("hello01")
public class HelloController01 {
    @RequestMapping("json01")//控制层接口路径
    @ResponseBody//把java对象转换为json字符串
    public User json01(){
        User user = new User("李家茗",1,"121",22,new Date());
        //int a = 10/0;
        return user;
    }
    @RequestMapping("json02")
    @ResponseBody//把java对象转换为json字符串
    public List json02(){
        User user1 = new User("任小粟",1,"121",21,new Date());
        User user2 = new User("杨小槿",0,"121",20,new Date());
        User user3 = new User("颜六元",1,"121",19,new Date());
        List list = new ArrayList();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        return list;
    }
}

(3)测试

 若日期类型只能显示毫秒数,就在实体类中加入如下代码

//把java转换为json格式时的样式
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
 3.定义全局异常处理

一旦后台出现异常时,网页会显示很丑的异常信息。 为了可以显示好看,我们定义一个统一的异常处理类。

异常的结构:

​ Throwable: 异常的根类。

​ Error: 错误。这个错误程序员无法解决。

​ Exception:异常。

​ 编译异常:

​ 运行时异常: RuntimeException: 只会在运行的时候出现。

注意: 一定要让springmvc扫描到该异常处理类。

 (1)自定义一个全局异常处理类

@ControllerAdvice//该类为异常处理类
public class MyHandler {
    //注意一定要让springmvc扫描到该异常处理类
    //ExceptionHandler异常发生时执行的方法
    @ExceptionHandler(value = ArithmeticException.class)//如果不使用value 默认处理Throwable异常
    public String handlerException(){
        System.out.println("=-=-=-=-=-=-=--=-=");
        return "error";
    }
}

(2)异常处理的流程

4.拦截器  

(1)自定义一个拦截器类

public class MyInterceptor implements HandlerInterceptor {
    //拦截器方法 如果该方法返回true则是放行 如果返回false则是拦截
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("=======拦截器=======");
        return true;
    }
}

(2)把自定义的拦截器声明到springmvc容器中。---springmvc.xml

    
        
            
            
            
            
            
            
            
        
    

(3)拦截器流程

 补充:  本人springmvc03和04为拦截器的一个小案例

    
        
        
    

用来方便文件路径的使用

三、 文件上传

文件上传的条件:

        1.表单中。
        2.表单的提交方式method必须是post.
        3.表单上传的编码必须是二进制。enctype="multipart/form-data"
        4.input的类型必须file类型。而且该输入框必须有name属性。

①文件上传的依赖
    
      commons-fileupload
      commons-fileupload
      1.4
    
②配置文件上传解析器
    
        
        
        
        
    
1.普通本地上传

        前端网页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    普通本地上传


头像:
姓名:
性别:

        controller代码

@Controller
public class UploadController {
    @RequestMapping("/upload")//springmvc把上传文件封装到MultipartFile类中
                              //myfile必须和表单中name名称一致
    public String upload01(MultipartFile myfile, HttpServletRequest request, User user){
        //1.获取文件在服务器下的路径
        //request.getSession().getServletContext().getRealPath("/upload");
        HttpSession session = request.getSession();//获取session对象
        ServletContext servletContext = session.getServletContext();//获取应用程序对象
        String path = servletContext.getRealPath("/upload");//获取工程下upload文件夹的真实路径
        //System.out.println(user);
        //2.根据该路径创建文件对象
        File file = new File(path);
        if (!file.exists()){//指定路径的文件不存在
            file.mkdirs();//创建该文件
        }
        //3.获取上传的文件名
        String filename = myfile.getOriginalFilename();
        filename = new Date().getTime() + filename;//防止重名  时间戳+文件名
        //获取后缀myfile.get
        //System.out.println(filename);
        //4.把上传的文件保存到目标目录
        File file1 = new File(path+"/"+filename);
        try {
            myfile.transferTo(file1);//把上传的文件保存到file1目录中
        } catch (IOException e) {
            e.printStackTrace();
        }
        //文件上传的路径保存到request对象中
        String headImg = "http://localhost:8080/springmvc05/upload/"+filename;
        request.setAttribute("imgsrc",headImg);
        user.setHeadImg(headImg);
        System.out.println(user);
        return "success";
    }
}
2.Ajax本地上传

        前端代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Ajax本地上传
    


头像:
姓名:
性别:

        controller代码

@Controller
public class UploadController02 {
    @RequestMapping("/upload02")
    @ResponseBody
    public Map upload02(MultipartFile myfile, HttpServletRequest request, User user) {
        HashMap map = new HashMap();
        //1.获取保存的真实路径
        String path = request.getSession().getServletContext().getRealPath("/upload");
        //2.根据真实路径封装文件File对象
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
        //3.获取文件名称
        String filename = myfile.getOriginalFilename();
        filename = new Date().getTime() + filename;//防止重名  时间戳+文件名
        //4.文件存放在真实的路径下
        File file1 = new File(path + "/" + filename);
        try {
            myfile.transferTo(file1);
            map.put("code",2000);
            map.put("msg","上传成功");
            map.put("imgSrc","http://localhost:8080/springmvc05/upload/"+filename);
            return map;
        } catch (IOException e) {
            e.printStackTrace();
        }
        map.put("code",5000);
        map.put("msg","上传失败");
        return map;
    }
}
3.本地上传到oss服务器

        需要登录阿里云官网

         前端代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    普通本地上传阿里云


头像:
姓名:
性别:

        controller代码

@Controller
public class UploadController03 {
    @RequestMapping("/upload03")
    public String upload03(MultipartFile myfile, HttpServletRequest request, User user){
        try {
            // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            String endpoint = "oss-cn-shanghai.aliyuncs.com";
            // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            String accessKeyId = "LTAI5tFPbxt9pniqFZd9Xehi";
            String accessKeySecret = "PazX2aRYccA6nhnYlhHu11MxRzrnvp";

            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

            // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = myfile.getInputStream();
            //获取上传的文件名
            String filename = myfile.getOriginalFilename();
            filename = new Date().getTime() + filename;//防止重名  时间戳+文件名
            // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
            ossClient.putObject("qy145-ljm", filename, inputStream);

            // 关闭OSSClient。
            ossClient.shutdown();
            //https://qy145-ljm.oss-cn-shanghai.aliyuncs.com/1638880123077c.png
            String url="https://qy145-ljm."+endpoint+"/"+filename;
            request.setAttribute("imgsrc",url);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }
}
4.Ajax上传到oss服务器

        前端代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Ajax上传阿里云
    


头像:
姓名:
性别:

        controller代码

@Controller
public class UploadController04 {
    @RequestMapping("/upload04")
    @ResponseBody
    public Map upload04(MultipartFile myfile, HttpServletRequest request, User user){
        Map map = new HashMap();
        try {
            // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            String endpoint = "oss-cn-shanghai.aliyuncs.com";
            // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            String accessKeyId = "LTAI5tFPbxt9pniqFZd9Xehi";
            String accessKeySecret = "PazX2aRYccA6nhnYlhHu11MxRzrnvp";

            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

            // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = myfile.getInputStream();
            //获取上传的文件名
            String filename = myfile.getOriginalFilename();
            filename = new Date().getTime() + filename;//防止重名  时间戳+文件名
            // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
            ossClient.putObject("qy145-ljm", filename, inputStream);

            // 关闭OSSClient。
            ossClient.shutdown();
            //https://qy145-ljm.oss-cn-shanghai.aliyuncs.com/1638880123077c.png
            String url="https://qy145-ljm."+endpoint+"/"+filename;
            map.put("code",2000);
            map.put("msg","上传成功");
            map.put("imgSrc",url);
            return map;
        } catch (IOException e) {
            e.printStackTrace();
        }
        map.put("code",5000);
        map.put("msg","上传失败");
        return map;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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