【狂神】SpringMVC笔记(一)之详细版

这篇具有很好参考价值的文章主要介绍了【狂神】SpringMVC笔记(一)之详细版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Restful 风格

概念:

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

实现方式:

使用@PathVariable

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

在url相同的情况下,会根据请求方式的不同来执行不同的方法。

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful使用RestFull风格的好处:简洁、高效、安全

2、接受请求参数及数据回显

2.1、请求参数

方式一:这里的@RequestParam("username")意思是,将前端用username="xxx"的值传到name变量里。

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

 方式二:当接受的对象是一个对象时,那我们在前端传入的变量名应与实体类中的名字保持一致,否则就为null

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

 2.2、数据回显

也有三种方式,分别是Model,ModelMap,ModelAandView

这个是第三种的。

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

 tips:【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

3、乱码问题

我以为我的配置是最优的,结果... 果然,人就是不能乱飘。

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

先建个包,再建个类,专门用于存放过滤器的代码,用以解决乱码的问题。代码如下:

package com.zhang.Filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;

public class GenericEncodingFilter implements Filter {
    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException, IOException {
        //处理response的字符编码
        HttpServletResponse myResponse=(HttpServletResponse) response;
        myResponse.setContentType("text/html;charset=UTF-8");

        // 转型为与协议相关对象
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        // 对request包装增强
        HttpServletRequest myrequest = new MyRequest(httpServletRequest);
        chain.doFilter(myrequest, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

}

//自定义request对象,HttpServletRequest的包装类
class MyRequest extends HttpServletRequestWrapper {

    private HttpServletRequest request;
    //是否编码的标记
    private boolean hasEncode;
    //定义一个可以传入HttpServletRequest对象的构造函数,以便对其进行装饰
    public MyRequest(HttpServletRequest request) {
        super(request);// super必须写
        this.request = request;
    }

    // 对需要增强方法 进行覆盖
    @Override
    public Map getParameterMap() {
        // 先获得请求方式
        String method = request.getMethod();
        if (method.equalsIgnoreCase("post")) {
            // post请求
            try {
                // 处理post乱码
                request.setCharacterEncoding("utf-8");
                return request.getParameterMap();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        } else if (method.equalsIgnoreCase("get")) {
            // get请求
            Map<String, String[]> parameterMap = request.getParameterMap();
            if (!hasEncode) { // 确保get手动编码逻辑只运行一次
                for (String parameterName : parameterMap.keySet()) {
                    String[] values = parameterMap.get(parameterName);
                    if (values != null) {
                        for (int i = 0; i < values.length; i++) {
                            try {
                                // 处理get乱码
                                values[i] = new String(values[i]
                                        .getBytes("ISO-8859-1"), "utf-8");
                            } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
                hasEncode = true;
            }
            return parameterMap;
        }
        return super.getParameterMap();
    }

    //取一个值
    @Override
    public String getParameter(String name) {
        Map<String, String[]> parameterMap = getParameterMap();
        String[] values = parameterMap.get(name);
        if (values == null) {
            return null;
        }
        return values[0]; // 取回参数的第一个值
    }

    //取所有值
    @Override
    public String[] getParameterValues(String name) {
        Map<String, String[]> parameterMap = getParameterMap();
        String[] values = parameterMap.get(name);
        return values;
    }
}

然后再在web.xml中进行相关配置

<filter>
        <filter-name>encoding</filter-name>
        <filter-class>com.zhang.Filter.GenericEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

4、JSON

4.1、概念:

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

 在前端页面json和js对象的相互转换:

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

 4、JSON

这里需要注意的是@RestController 注解会自动将返回值转换为JSON或XML格式的响应。

4.1、注解RestController和Controller的区别如下:

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

 注意@RestController=Controller+ResponseBody,二者可以组合起来搭配使用。用RestController注解返回的就只是一个JSON风格的字符串。

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

 4.2、一个小案例

我的jdk版本是1.8。

1.建立一个实体类User。

package com.zhang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data  //需要导入lomb的相关依赖
@AllArgsConstructor //有参构造
@NoArgsConstructor  //无参构造
public class User {
    private String name;
    private int age;
    private String sex;
}

2.导入pom.xml的相关依赖。

<!--依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.4</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <!--资源过滤-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

3.在springmvc-servlet.xml中导入相关的解决json乱码的问题。

 <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.zhang.controller"/>
    <!-- 让Spring MVC不处理静态资源 例如:.html  .js  .css等,让他们不用走视图解析器了,影响效率-->
    <mvc:default-servlet-handler />
    <!--
    支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入。
     -->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/" />
        <!-- 后缀 -->
        <property name="suffix" value=".jsp" />
    </bean>
    <!--解决json乱码的问题-->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

4.在web.xml中导入相关依赖。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--1.注册servlet-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--通过初始化参数指定SpringMVC配置文件的位置,进行关联-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!-- 启动顺序,数字越小,启动越早 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--所有请求都会被springmvc拦截 -->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>com.zhang.Filter.GenericEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

5.建立一个controller类进行测试就可以了

import com.zhang.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @RequestMapping("/json1")
    public String json1() throws JsonProcessingException {
        ObjectMapper mapper=new ObjectMapper();
        User user=new User("章鱼卷",1,"女");
        String str=mapper.writeValueAsString(user);
        return str;
    }
}

6.EEROR 记得lib下要导入相关的jar包呀,不然会报500的错的

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

 5、ssm整合:Mybatis层

【狂神】SpringMVC笔记(一)之详细版,springMVC,笔记,restful

学习就是苦中作乐,加油呀!我还有4天就开学了,呜呜呜,好快!文章来源地址https://www.toymoban.com/news/detail-696100.html

到了这里,关于【狂神】SpringMVC笔记(一)之详细版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringMVC RESTful案例

    1、准备工作 和传统 CRUD 一样,实现对员工信息的增删改查。 搭建环境 准备实体类 准备dao模拟数据 2、功能清单 功能 URL 地址 请求方式 访问首页√ / GET 查询全部数据√ /employee GET 删除√ /employee/2 DELETE 跳转到添加数据页面√ /toAdd GET 执行保存√ /employee POST 跳转到更新数据页

    2024年02月01日
    浏览(25)
  • 【SpringMVC】| RESTful架构风格、RESTful案例(CRUD)

    目录    RESTful架构风格 1. RESTful简介 2. RESTful的实现 3. HiddenHttpMethodFilter RESTful案例(CRUD) 1. 准备工作 2. 功能清单 列表功能(显示数据)  删除数据(难点) 添加数据  更新数据 图书推荐:用ChatGPT与VBA一键搞定Excel REST: Re presentational S tate T ransfer, 表现层资源状态转移

    2024年02月08日
    浏览(36)
  • SpringMVC-Restful风格

    rest: 表现层(视图view及控制层controller)资源状态转移 具体说就是http协议里面,四个表示操作方式的动词: GET POST PUT DELETE 它们分别对应四种基本操作: GET 用来表示获取资源, POST用来新建资源, PUT用来更新资源,DELETE 用来删除资源. REST风格提倡URL地址使用统一的风格设计,从前到后各

    2024年01月16日
    浏览(34)
  • 7、SpringMVC之RESTful概述

    创建名为spring_mvc_rest的新module,过程参考5.2节和6.6节 RESTful 也称为REST(英文:Representational State Transfer)即表现层状态传递,它是一种软件架构风格或设计风格; REST 是 Roy Fielding 博士( HTTP 规范的主要编写者之一)在其2000年的博士论文中提出来的; 其作用是,降低开发的复

    2024年02月08日
    浏览(28)
  • 8、SpringMVC之RESTful案例

    阅读本文前,需要先阅读SpringMVC之RESTful概述 在原来的环境中,只扫描控制层组件,现在多了持久层组件,所以要调整扫描包的范围 功能 URL 地址 请求方式 访问首页 / GET 查询全部数据 /employee GET 跳转到添加数据页面 /to/add GET 执行保存 /employee POST 跳转到修改数据页面 /to/upd

    2024年02月08日
    浏览(26)
  • DAY04_SpringMVC—SpringMVC简介&PostMan和ApiFox工具使用&SpringMVC请求与响应&REST风格

    问题导入 SpringMVC框架有什么优点? 1.1 SpringMVC概述 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 优点 使用简单,开发便捷(相比于Servlet) 灵活性强 问题导入 在Controller中如何定义访问路径,如何响应数据? 2.0 回顾Servlet技术开发web程序流程 创建web工程(Maven结构) 设置

    2024年02月13日
    浏览(37)
  • 【SpringMVC篇】讲解RESTful相关知识

    🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 RESTful架构风格近年来备受关注,它倡导一种简洁统一的接口设计理念,使接口更加直观易用。那么如何使用Spring MVC来开发RESTful接口呢?本文将为大家详

    2024年02月06日
    浏览(34)
  • SpringMVC-RESTful架构风格

    目录 RESTful架构风格 1、RESTful概述 2、RESTful的六大原则 3、RESTful的实现 4、HiddenHttpMethodFilter RESTful风格的CRUD 1、环境搭建 2、功能需求 3、功能:访问首页 4、功能:查询所有数据 5、功能:删除一条数据 6、功能:添加一条数据 SpringMVC处理静态资源 1、tomcat自己的web.xml 2、关于

    2024年02月01日
    浏览(63)
  • SpringMVC第八阶段:Restful风格

    Restful 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 REST(英文:Representational State Transfer,简称REST)描述了一个架构样

    2024年02月08日
    浏览(29)
  • 【SpringMVC】RESTful风格CRUD实现

    目录 一、REST简介 1.1 什么是REST? 1.2 REST风格的优点 1.3 请求方式   二、构建项目 ⭐思路分析 2.1 环境准备 2.1.1 导入相关pom依赖 2.1.2 jdbc.properties:配置文件 2.1.3 配置代码生成器 generatorConfig.xml 2.1.4 spring与mybatis整合的配置文件 spring-mybatis.xml   2.1.5 spring-context.xml 上下文配

    2024年02月09日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包