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

news/2024/12/23 21:49:27/

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.

java">public class MyInterceptor implements HandlerInterceptor {@Overridepublic 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包扫描  可以扫描到该异常处理类

java">@ControllerAdvice
public class MyGlobalException {//发生Exception类型的异常会执行该方法,并异常对象传递给该方法的参数@ExceptionHandler(Exception.class)@ResponseBodypublic 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

java"> @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";}

 文件上传工具类

java">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

java"> @RequestMapping("/upload")public String upload(MultipartFile myfile,Emp emp){String s = UploadUtil.uploadOss(myfile);emp.setEmpImg(s);empMapper.insertSelective(emp);sqlSession.commit();return "index";}
java">//阿里osspublic 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.jpgString path="https://"+bucketName+"."+endpoint+"/"+objectName;return path;} catch (Exception e) {throw new RuntimeException(e);} finally {if (ossClient != null) {ossClient.shutdown();}}}


http://www.ppmy.cn/news/1557567.html

相关文章

JavaSE 总复习:夯实基础,迈向进阶之路

我的个人主页 一、数据类型与变量 二、控制语句 三、数组 四、面向对象编程&#xff08;OOP&#xff09; 五、异常处理 六、常用类库 七、输入输出流 八、总结 在 Java 编程的学习旅程中&#xff0c;JavaSE&#xff08;Java 标准版&#xff09;是基石般的存在。它涵盖…

软件工程复习重点(第一章 软件工程概述)

1.什么是软件&#xff1f;软件有什么特点&#xff1f; 软件分类&#xff1f; 计算机软件--计算机系统中的程序、数据及其文档的统称。 软件&#xff1d;程序数据文档 表现形式&#xff1a;逻辑实体、抽象性 生产方式&#xff1a;与硬件不同、无明显的制造过程、定制 维护机制&a…

【WiFi】WiFi6 5G 802.11ax 最大速率对应表

5GHz 频段 1x1 MIMO 速率 20MHz 信道宽度 MCS 0: 8.6 MbpsMCS 1: 17.2 MbpsMCS 2: 25.8 MbpsMCS 3: 34.4 MbpsMCS 4: 51.6 MbpsMCS 5: 68.8 MbpsMCS 6: 77.4 MbpsMCS 7: 86.0 MbpsMCS 8: 103.2 MbpsMCS 9: 114.7 MbpsMCS 10: 129.0 MbpsMCS 11: 143.4 Mbps 40MHz 信道宽度 …

STM32 HAL库之串口接收不定长字符

背景 在项目开发过程中&#xff0c;经常会使用MCU的串口与外界进行通信&#xff0c;例如两个单片机之间TTL电平型串口通信&#xff0c;单片机与成熟电路模块之间的串口通信等等.... 如何高效的使用串口是开发人员必须关注的问题。 STM32的HAL库为我们提供了三种串口通信机制&am…

大数据新视界 -- Hive 数据仓库:架构深度剖析与核心组件详解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Mono里运行C#脚本1

前面已经知道怎么样把C#的源码通过MCS编译器生成exe的文件,然后我们还把 exe的文件进行反汇编查看,知道我们需要处理的目标,就是这些汇编的代码。接着下来,我们就将要来探究mono是怎么样去运行这些代码的。 一般来说,要运行这些代码,要经历几个阶段:建立垃圾回收内存…

linux上vlc安装

方式一&#xff1a;linux可以连外网的 直接使用命令 sudo snap install vlc方式二&#xff1a;linux连不上外网的 我是在虚拟机中下载的&#xff0c;不太好连接外网&#xff0c;可以直接在Ubuntu Software 中进行搜索下载

深度学习:数据集:训练集、验证集和测试集

深度学习&#xff1a;数据集&#xff1a;训练集、验证集和测试集 在深度学习领域中&#xff0c;合理地划分数据集是确保模型有效学习并能够泛化到新数据上的关键环节。通常&#xff0c;一个完整的数据集会被分为三个部分&#xff1a;训练集&#xff08;Training Set&#xff0…