当前位置: 首页 > article >正文

springmvc跳转不经过视图解析器,controller保存数据,controller层返回json数据,拦截器,全局异常处理,文件上传含本地和阿里oss

1.跳转不经过视图解析器

return "forward:/main.jsp";//使用转发跳转到指定路径,无需经过视图解析器

return "redirect:/main.jsp";//使用重定向跳转到指定路径,无需经过视图解析器

2.controller保存数据

request   session   Model

1.
public String register(User user, HttpServletRequest request){
    System.out.println(user);
    request.setAttribute("user",user);
    return "index";
    return "forward:/main.jsp";//使用转发跳转到指定路径,无需经过视图解析器
    return "redirect:/main.jsp";//使用重定向跳转到指定路径,无需经过视图解析器
}

 

2.
@RequestMapping("/register")
public String register( HttpSession session){
    List<String> list=new ArrayList<>();
    list.add("张三");
    session.setAttribute("user",list);
    return "index";
}

 

3.
@RequestMapping("/login")
public String register(User user, Model model){
    List<String> list=new ArrayList<>();
    list.add("张三");
    model.addAttribute("user",list);
    return "index";
}

 3.controller层返回json数据

[1]  jackson依赖

<!-- jackson -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.18.1</version>
</dependency>

[2]  方法上添加@ResponseBody 把该方法返回的对象转换为json格式。等价于out.print();

4.拦截器

 拦截器只拦截controller层API接口

true表示放行,false不放行

例:1.

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session=request.getSession();
        Object userinfo = session.getAttribute("userinfo");
        if(userinfo==null){
            response.sendRedirect("/login.jsp");
            return false;//true表示放行,false不放行
        }
        return true;
    }
}

2.在springmvc配置文件里面  注册拦截器及拦截规则

<!--    注册自定义的拦截器的拦截规则-->
    <mvc:interceptors>
        <mvc:interceptor>
<!--            path拦截路径   /** 表示多层路径-->
            <mvc:mapping path="/**"/>
<!--           排除路径放行路径 -->
            <mvc:exclude-mapping path="/user/login"/>
            <mvc:exclude-mapping path="/user/logout"/>
<!--            放置自定义的拦截器类-->
            <bean class="com.ghx.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>

    </mvc:interceptors>

5.全局异常处理

全局异常处理类,要保证springmvc包扫描  可以扫描到该异常处理类

@ControllerAdvice
public class MyGlobalException {
    //发生Exception类型的异常会执行该方法,并异常对象传递给该方法的参数
    @ExceptionHandler(Exception.class)
    @ResponseBody
     public String handlerException(Exception e){
        System.out.println(e.getMessage());
         return "error";
     }
     @ExceptionHandler(ArithmeticException.class)
    public String handlerArithmeticException(Exception e){
        return "error";
     }
}

6.文件上传

1.引入文件上传依赖

<!--    文件上传依赖-->
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.5</version>
</dependency>

 若使用阿里oss还需加上

<!--在commons-fileupload基础上阿里oss-->
<dependency>
  <groupId>com.aliyun.oss</groupId>
  <artifactId>aliyun-sdk-oss</artifactId>
  <version>3.17.4</version>
</dependency>

 2.配置文件上传解析器    springmvc里面配置

  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--        最大上传大小  单位byte  5M=5*1024*1024-->
        <property name="maxUploadSize" value="5242880"/>
<!--        设置上传编码-->
        <property name="defaultEncoding" value="utf-8"/>
    </bean>

3.上传页面

文件上传的表单提交方式必须为post,而且需要设置表单提交的编码格式。enctype="multipart/form-data" 该类型表示既能上传文本又能上传文件。

<form action="/emp/insert" method="post" enctype="multipart/form-data">
    员工姓名:<input type="text" name="empName" id="empName"><br>
    岗位:<input type="text" name="empJob" id="empJob"><br>
    薪资:<input type="text" name="empSalary" id="empSalary"><br>
    头像:<input type="file" name="myfile" id="myfile"><br>
    部门:<input type="number" id="did" name="did" /><br>
    <input type="submit" value="添加">
</form>

 4.1上传本地

api

 @RequestMapping("/insert")
    public String insert(MultipartFile myfile, HttpServletRequest request,Emp emp)throws Exception{
        String update = UploadUtil.update(myfile, request);
        emp.setEmpImg(update);
        empMapper.insertSelective(emp);
        sqlSession.commit();
        return "index";
    }

 文件上传工具类

public static String update(MultipartFile myfile, HttpServletRequest request){
        try {
            //获取保存文件的路径
            String realPath=request.getSession().getServletContext().getRealPath("/images");
            System.out.println(realPath);
            //根据上面的路径创建文件对象
            File file=new File(realPath);
            //判断文件夹是否存在
            if(!file.exists()){
                file.mkdirs();
            }
            //上传的文件名
            String fileName= UUID.randomUUID().toString().replace("-","")+myfile.getOriginalFilename();
            //把上传的文件保存到指定路径下
            File file1=new File(realPath+"/"+fileName);
            myfile.transferTo(file1);
            return "/images/"+fileName;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

4.2上传到阿里oss

api

 @RequestMapping("/upload")
    public String upload(MultipartFile myfile,Emp emp){
        String s = UploadUtil.uploadOss(myfile);
        emp.setEmpImg(s);
        empMapper.insertSelective(emp);
        sqlSession.commit();
        return "index";
    }
//阿里oss
    public static String uploadOss(MultipartFile myfile) {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        DefaultCredentialProvider defaultCredentialProvider = CredentialsProviderFactory.newDefaultCredentialProvider("密钥", "密钥");
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "jyw";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        String objectName = UUID.randomUUID().toString().replace("-","")+myfile.getOriginalFilename() ;
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
        //String filePath = "E:\\qsl.jpg";
        // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
        String region = "cn-beijing";

        // 创建OSSClient实例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(defaultCredentialProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            InputStream inputStream = myfile.getInputStream();
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
//            https://jyw.oss-cn-beijing.aliyuncs.com/qsl.jpg
            String path="https://"+bucketName+"."+endpoint+"/"+objectName;
            return path;
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }

    }


http://www.kler.cn/a/440849.html

相关文章:

  • Fscan内网横向工具
  • Ansible Playbook 简介
  • 三维移动游戏
  • C++智能指针详解
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering-简洁版
  • 05、SpringMVC全注解开发
  • 音频声音太小怎么调大?调大音频声音的几种方法
  • STM32-笔记1-点亮led灯
  • sqlilabs靶场二十一关二十五关攻略
  • app的测试范围以及web和app的测试区别
  • 搭建Tomcat(二)--反射的应用
  • 详细描述一下 Elasticsearch 更新和删除文档的过程。
  • 在VScode中对R语言进行环境配置
  • 沈剑-架构师训练营
  • Mongodb 集群搭建
  • 项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%
  • k8s+rancher配置滚动发布更新时服务不可用
  • STM32--IO引脚复用
  • 留学论文Introduction辅导:论文开头introduction怎么写
  • 19. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--收支记录