SpringMVC框架(详解)下

简介: SpringMVC框架(详解)

三、如何实现页面重定向


在controller层的方法中,返回值为String类型,返回一个界面使用的是请求转发的方式,如果想要使用重定向跳转至其他页面,在返回值中加上redirect:,/当springmvc看到你返回的字符串中含有redirect:时,将会认为你要进行重定向跳转。


return “redirect:/login.jsp”;
    @RequestMapping("/hello05")
    public String hello05(Map map){
        System.out.println("hello05");
        int count = 1/0;
        map.put("wangdao","qq");
        return "redirect:/login.jsp";
    }


四、拦截器


4.1、创建拦截器

package com.Interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
//        拦截规则,自己根据业务需求实现
        String username = request.getParameter("username");
        if (null==username || "".equals(username)){
            response.sendRedirect("/index.jsp");
            return false;
        }
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle:handle执行完,渲染之前");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion:handle执行完,渲染之后");
    }
}


我们创建的拦截器类需要实现HandlerInterceptor接口,并且重写preHandle方法

我们如果要使用我们定义的拦截器,需要在springmvc.xml文件中注册该拦截器


<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/hello/**"/>
            <mvc:exclude-mapping path="/hello/hello04"/>
            <bean class="com.Interceptor.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>


五、文件上传


5.1、上传到本地服务器

第一步,导入文件上传的依赖


<!-- commons 文件上传jar -->
  <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.4</version>
  </dependency>
  <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
  </dependency>


第二步,创建一个页面,这里需要注意的是提交方式必须为post提交,表单类型enctype需要设置为multipart/form-data的格式,这里的input标签的name属性不可省略,需要和controller层接收的参数名相同。


<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2023/6/25
  Time: 16:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上传文件</title>
</head>
<body>
    <form action="/hello/hello03" method="post" enctype="multipart/form-data">
        <input type="text" name="username"><br>
        <input type="file" name="photo"><br>
        <input type="text" name="age"><br>
        <input type="text" name="birthday">
        <input type="submit" value="提交">
    </form>
</body>
</html>


第三步,在springMVC的配置文件中配置文件上传解析器


<!--  配置multipartResolver,用于上传文件,使用spring的CommonsMultipartResolver  -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxInMemorySize" value="5000000"></property>
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>


第四步,创建实现文件上传接口的方法,@RequestMapping表示请求的接口,


@RequestMapping("/uploadPage")
    public String uploadPage(){
        return "upload.jsp";
    }
    @RequestMapping("/upload")
    @ResponseBody // 此方法的返回值就是响应体的内容
    public String upload(String username, MultipartFile photo,HttpServletRequest request){
        String fileType = photo.getOriginalFilename();
        int index = fileType.lastIndexOf(".");
        fileType = fileType.substring(index);
        String path = request.getSession().getServletContext().getRealPath("static"+File.separator+"uploadfiles");
        long filename = System.currentTimeMillis();
        System.out.println(path);
        System.out.println(fileType);
        System.out.println(path+"\\"+filename+fileType);
        File file = new File(path+"\\"+filename+fileType);
        try {
            photo.transferTo(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传成功!";
    }


六、内容补充


@RestController 等价于 @Controller+@ResponseBody

该注解下所有的方法都是返回json数据

@RequestMapping: 作用: 把请求路径映射到响应的方法上。


@RequestParam(value = “u”):设置你接受的请求参数名。查询参数


@Param(value=“name”):设置的时mybatis中mapper映射文件中的参数


@RequestMapping(value = “/addUser”,method = RequestMethod.POST)

method:表示该接口接受的请求方式.不设置可以接受任意请求方式。

@GetMapping(“addUser”):表示只接受get提交方式的请求


@RequestBody:把请求的json数据转换为java对象。从前端到后端

@ResponseBody:把java转换为json数据 从后端转前端


相关文章
|
设计模式 负载均衡 网络协议
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
803 0
|
Java 数据库连接 数据库
springboot 集成kingbase的步骤
要在Spring Boot中集成Kingbase数据库,你可以按照以下步骤进行操作: 步骤1:添加Kingbase JDBC驱动 首先,将Kingbase JDBC驱动程序添加到Spring Boot项目的依赖项中。你可以在Maven或Gradle构建文件中添加以下依赖项(根据你使用的构建管理工具进行选择): 对于Maven: ```xml <dependency> <groupId>com.kingbase</groupId> <artifactId>kingbase-driver</artifactId> <version>{驱动版本}</version> </
2153 0
|
消息中间件 运维 数据管理
Kafka 如何基于 KRaft 实现集群最终一致性协调
Kafka 3.3.1 引入了 KRaft 元数据管理组件,替代 Zookeeper,以简化集群一致性维护,支持更大规模集群并减轻运维复杂性。在 Zookeeper 模式下,需同时运维 ZK 和 Broker,而 KRaft 模式仅需 3 个节点即可构成最小生产集群,且通信协调基于 Raft 协议,增强了一致性。KRaft 模式中,Controller 使用单线程处理请求,通过 KRaft 保持内存状态与多节点一致性。此外,Broker 根据 KRaft 记录更新元数据,实现声明式管理,提高集群协调效率。KRaft 的引入是集群协调机制的演进,采用事件驱动模型实现元数据的一致性。
863 1
Kafka 如何基于 KRaft 实现集群最终一致性协调
|
机器学习/深度学习 PyTorch 算法框架/工具
神经网络中的归一化
**神经网络中的归一化方法加速和稳定学习,避免梯度问题。通过批量归一化(Batch Normalization),每个mini-batch数据被调整至均值0、标准差1的分布,减少数据分布变化带来的不稳定性,提升模型训练速度与泛化能力。归一化也包括L1和L2正则化,如sklearn库中的Lasso和Ridge实现。批量归一化层如PyTorch中的`nn.BatchNorm2d`,调整输入数据分布并学习可变参数。**
|
jenkins Shell 持续交付
必知的技术知识:jenkins
必知的技术知识:jenkins
182 0
|
存储 JSON JavaScript
认识学习JSON
认识学习JSON
|
XML Java 数据库
你认真研究过Spring中的@EnableTransactionManagement注解吗?
你认真研究过Spring中的@EnableTransactionManagement注解吗?
1038 0
|
机器学习/深度学习 编解码 并行计算
超越YOLO5-Face | YOLO-FaceV2正式开源Trick+学术点拉满,让你欲罢不能!!!
超越YOLO5-Face | YOLO-FaceV2正式开源Trick+学术点拉满,让你欲罢不能!!!
550 0
|
人工智能 达摩院 算法
浅谈面向专业用户的工具设计:达摩院 AI Earth 地球科学云平台设计案例
作者: 达摩院设计-壳恪你了解我们的地球嘛?从眼前方寸到浩瀚星空,你是否从卫星视角看过我们的家园?随着对地观测技术的发展和数智时代的到来,我们不仅仅满足于看见地球,更想要看懂地球。原本科研工作者们需要通过ArcGIS、Envi等传统桌面软件对本地存储的卫星遥感影像进行分析处理,从而得出地球上的自然资源如何分布、我们的城市在数十年间发生了什么样的变化、生态环境的变迁会对人类造成什么样的影响,而达摩院
898 2
浅谈面向专业用户的工具设计:达摩院 AI Earth 地球科学云平台设计案例
|
云安全 弹性计算 小程序
阿里云赊呗开通、额度及还款常见问题解答FAQ
赊呗是蚂蚁集团旗下商诚融资担保有限公司为买卖双方在赊购交易中提供的担保服务。您在阿里云采购云产品时,可以使用赊呗额度先行支付,无需立即支付现金,享受先采购后付款的上云体验。
1251 0
阿里云赊呗开通、额度及还款常见问题解答FAQ