尚硅谷笔记-框架跟学笔记-SpringMvc介绍、入门案例、RequestMapping、PathVariable注解详解

跟学尚硅谷老师学习做的笔记,仅仅为了自己学习而用以便后续复习使用,谢谢

1、三层架构基本介绍

   我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器。在
JavaEE 开发中,几乎全都是基于
B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架我们的实际开发中使用的非常多,所以我们课程中的案例也都是基于三层架构设计的。三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面:

表现层:
  也就是我们常说的web层。它负责接收客户端请求,向客户端响应结 果,通常客户端使用http协议请求web 层,web 需要接收 http 请求,完成 http 响应。表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系)
业务层:
   也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业务层,但是业务层不依赖 web 层。业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制)
持久层:
  也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。
三层

MVC模型

  MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职:
Model (模型) :
  通常指的就是我们的数据模型。作用一般情况下用于封装数据。
View (视图) :
  通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。通常视图是依据模型数据创建的。
Controller (控制器) :
  是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的。它相对于前两个不是很好理解,这里举个例子:
例如:
   我们要保存一个用户的信息,该用户信息中包含了姓名,性别,年龄等等。这时候表单输入要求年龄必须是 1~100 之间的整数。姓名和性别不能为空。并且把数据填充到模型之中。此时除了 js 的校验之外,服务器端也应该有数据准确性的校验,那么校验就是控制器的该做的。当校验失败后,由控制器负责把错误页面展示给使用者。如果校验成功,也是控制器负责把数据填充到模型,并且调用业务层实现完整的业务需求。

SpringMVC 概述

 springmvc是什么

   SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 SpringFrameWork 的后续产品,已经融合在 SpringWebFlow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring的 Spring MVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用),Struts2 等。SpringMVC 已经成为目前最主流的 MVC 框架之一,并且随着 Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful 编程风格的请求。

 SpringMVC 在三层架构的位置

在这里插入图片描述

 SpringMVC 的优势

  1. 清晰的角色划分:
    前端控制器(DispatcherServlet)
    请求到处理器映射(HandlerMapping)
    处理器适配器(HandlerAdapter)
    视图解析器(ViewResolver)
    处理器或页面控制器(Controller)
    验证器( Validator)
    命令对象(Command 请求参数绑定到的对象就叫命令对象)
    表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。
  2. 分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。
  3. 由于命令对象就是一个 POJO,无需继承框架特定 API,可以使用命令对象直接作为业务对象。
  4. 和 Spring 其他框架无缝集成,是其它 Web 框架所不具备的。
  5. 可适配,通过 HandlerAdapter 可以支持任意的类作为处理器。
  6. 可定制性,HandlerMapping、ViewResolver 等能够非常简单的定制。
  7. 功能强大的数据验证、格式化、绑定机制。
  8. 利用 Spring 提供的 Mock 对象能够非常简单的进行 Web 层单元测试。
  9. 本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
  10. 强大的 JSP 标签库,使 JSP 编写更容易。
    ………………还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配 置支持等等。

 SpringMVC 和Struts2的优略分析

  1. 共同点:
    -  它们都是表现层框架,都是基于 MVC 模型编写的。
    -  它们的底层都离不开原始 ServletAPI。
    -  它们处理请求的机制都是一个核心控制器。

  2. 区别:
    -  Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter
    -  Spring MVC 是基于方法设计的,而 Struts2 是基于类,Struts2 每次执行都会创建一个动作类。所以 SpringMVC 会稍微Struts2 快些。
    -   Spring MVC 使用更加简洁,同时还支持 JSR303, 处理 ajax 的请求更方便(JSR303 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们 JavaBean 的属性上面,就可以在需要校验的时候进行校验了。)
    -  Struts2 的 OGNL 表达式使页面的开发效率相比 Spring MVC 更高些,但执行效率并没有比 JSTL 提升,尤其是struts2 的表单标签,远没有 html 执行效率高。

2、SpringMVC入门程序

2.1、idea不用骨架创建mavenweb项目

  1. 打包方式war
在这里插入图片描述
  2. 点击+号选择web
在这里插入图片描述
  3、这里注意文件路径需要在src\main\的路径下面
在这里插入图片描述
  4、构建出来的目录效果
在这里插入图片描述
     扩展这里可以设置文件夹格式
在这里插入图片描述

2.2、导入依赖

<!--版本锁定-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.2.RELEASE</spring.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

  </dependencies>

  <build>
    <finalName>springmvc_day01_01_start</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

2.3配置web.xml前端控制器

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!--配置前端控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <!--加载spring配置文件-->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--加载机制-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--拦截路径-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!--配置解决中文乱码的过滤器-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

2.4、创建spring配置文件

在这里插入图片描述

2.5、配置tomcat

  1、点击addconfiguration 点击左侧+号选择tomcat local 然后选择本地路径
在这里插入图片描述
  2、名字随便起一个之后选择deployment点击+号在这里插入图片描述
  3、选择start
在这里插入图片描述
  4、配置路径和端口
在这里插入图片描述

(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包,再发布;

(2)war exploded模式是直接把文件夹、jsp页面 、classes等等移到Tomcat
部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。

(3)在平时开发的时候,使用热部署的话,应该对Tomcat进行相应的设置,这样的话修改的jsp界面什么的东西才可以及时的显示出来。

2.6、编写spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 开启注解扫描 -->
    <context:component-scan base-package="com.it"/>

    <!-- 视图解析器对象 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--配置自定义类型转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="cn.it.utils.StringToDateConverter"/>
            </set>
        </property>
    </bean>


    <!-- 开启SpringMVC框架注解的支持 -->
    <mvc:annotation-driven conversion-service="conversionService"/>

</beans>

2.7、编写controller

// 控制器类
@Controller
@RequestMapping(path="/user")
public class HelloController {

    /**
     * 入门案例
     * @return
     */
    @RequestMapping(path="/hello")
    public String sayHello(){
        System.out.println("Hello StringMVC");
        return "success";
    }

    /**
     * RequestMapping注解
     * @return
     */
    @RequestMapping(value="/testRequestMapping",params = {"username=heihei"},headers = {"Accept"})
    public String testRequestMapping(){
        System.out.println("测试RequestMapping注解...");
        return "success";
    }

}

2.8、前端代码

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

    <h3>入门程序</h3>
    <%--
        <a href="hello">入门程序</a>
    --%>

    <a href="user/testRequestMapping?username=heihei">RequestMapping注解</a>

</body>
</html>

2.9、成功界面代码

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h3>入门成功</h3>

    ${ msg }

    ${sessionScope}

</body>
</html>

2.10、入门案例的执行流程

  1、服务器启动,应用被加载。读取到 web.xml 中的配置创建 spring 容器并且初始化容器中的对象。
  2、浏览器发送请求,被 DispatherServlet 捕获,该 Servlet
并不处理请求,而是把请求转发出去。转发的路径是根据请求 URL,匹配@RequestMapping 中的内容。
  3、匹配到了后,执行对应方法。该方法有一个返回值。   4、根据方法的返回值,借助
InternalResourceViewResolver 找到对应的结果视图。   5、渲染结果视图,响应浏览器。

案例执行流程

2.11、springmvc的请求响应流程

请求响应的流程

3、@RequestMapping详解(alt+7查看类结构)

@RequestMapping注解作用:为指定的类或方法设置相应URL

3.1 @RequestMapping注解位置

1)、书写在类上面
  作用:为当前类设置映射URL
  注意:不能单独使用,需要与方法上的@RequestMapping配合使用
2)、书写在方法上面
  作用:为当前方法设置映射URL
  注意:可以单独使用

3.2 @RequestMapping注解属性

 - value属性
  - 类型:String[]
  - 作用:设置URL信息

 - path属性
   - 类型:String[]
   - 作用:与value属性作用一致

举例

    //两个地址都可以请求这个方法 name 是 value 或者 path都可以
    @RequestMapping(value = {"/saveEmp","/insert"})
    public String saveEmp(){
        System.out.println("添加员工信息");
        return "target";
    }

method属性

  - 类型:RequestMethod[]

RequestMethod 是枚举类型

public enum RequestMethod {
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}

  - 作用:为当前URL【类或方法】设置请求方式【POST、DELETE、PUT、GET】

  - 注意:
   - 默认情况:所有请求方式均支持
   - 如请求方式不支持,会报如下错误
- 405【Request method ‘GET’ not supported】

举例:

    //两个地址都可以请求这个方法 name 是 value 或者 path都可以
    //method 的RequestMethod 是枚举类型 method也是数据类型 可以指定多个,不指定默认所有请求方式
    @RequestMapping(value = {"/saveEmp","/insert"},method = {RequestMethod.GET,RequestMethod.POST})
    public String saveEmp(){
        System.out.println("添加员工信息");
        return "target";
    } ```

params属性

  - 类型:String[]
  - 作用:为当前URL设置请求参数
  - 注意:如设置指定请求参数,但URL中未携带指定参数,会报如下错误
    400【Parameter conditions “lastName” not met for actual request parameters:】

举例:

    //params 字符串数组类型  params = "lastName=lisi"代表请求必须携带lastName的key并且值为lisi
    //params = "lastName" 代表请求必须携带lastName的key
    @RequestMapping(value = {"/saveEmp","/insert"},method = {RequestMethod.GET,RequestMethod.POST},
                    params = "lastName")
    public String saveEmp(){
        System.out.println("添加员工信息");
        return "target";
    } ```

headers属性
  - 类型:String[]
  - 作用:为当前URL设置请求头信息
  - 注意:如设置指定请求头,但URL中未携带请求头,会报如下错误
   404:请求资源未找到

示例:

    //headers 指定请求头 User-Agent 可以指定浏览器 此处限制谷歌
    @RequestMapping(value = {"/saveEmp","/insert"},
            headers = "User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0
Safari/537.36")
    public String saveEmp(){
        System.out.println("添加员工信息");
        return "target";
    } ```

3.3 @RequestMapping支持Ant 风格的路径

 -常用通配符

  a) ?:匹配一个字符

   b) *:匹配任意字符

   c) **:匹配多层路径

示例:

    //value = /saveEmp/?    请求路径可以为/saveEmp/2   /saveEmp/w  但是只能一个字符 不能多个字符
    //value = /saveEmp/*    请求路径可以为/saveEmp/231231   /saveEmp/eqweqw  可以为多个字符但是不能携带 / 路径标识
    //value = /saveEmp/**   请求路径可以为/saveEmp/2312/32131  /saveEmp/2312/32131/231  可以为多个字符也可以多层目录
    @RequestMapping(value = "/saveEmp/?")
    public String saveEmp(){
        System.out.println("添加员工信息");
        return "target";
    } ```

4、@PathVariable 注解

4.1 @PathVariable注解位置

@Target(ElementType.PARAMETER)

 - 位置:书写在参数前面

4.2 @PathVariable注解作用

 - 获取URL中占位符参数

 - 占位符语法:{}

示例代码:

    //@PathVariable 路径占位符 {id}代表占位
    @RequestMapping(value = "/saveEmp/{id}")
    public String saveEmp(@PathVariable("id")Integer id){
        System.out.println("添加员工信息");
        return "target";
    } ```

4.3 @PathVariable注解属性

 - value属性
   - 类型:String
   - 作用:设置占位符中的参数名
 - name属性
   - 类型:String
   - 作用:与name属性的作用一致
 - required属性
   - 类型:boolean
   - 作用:设置当前参数是否必须入参【默认值:true】
   - true:表示当前参数必须入参,如未入参会报如下错误
     - Missing URI template variable ‘empId’ for method parameter of type Integer
   - false:表示当前参数不必须入参,如未入参,会装配null值

5、REST【RESTful】风格CRUD

概述:
REST风格的URL将HTTP协议中的四种请求方式GET、POST、PUT、DELETE分别对应四种操作:GET用来获取资源、POST用来新建资源、PUT用来更新资源、DELETE用来删除资源。

5.1 REST的CRUD与传统风格CRUD对比

传统风格CRUD

功能URL请求方式
/insertEmpPOST
/deleteEmp?empId=1001GET
/updateEmpPOST
/selectEmp?empId=1001GET

REST风格CRUD

功能URL请求方式
/empPOST
/emp/1001DELETE
/empPUT
/emp/1001GET

5.2 REST风格CRUD优势

  • 提高网站排名
    • 排名方式
      • 竞价排名
      • 技术排名
  • 便于第三方平台对接

5.3 实现PUT&DELETE提交方式步骤

  • 注册过滤器HiddenHttpMethodFilter
  • 设置表单的提交方式为POST
  • 设置参数:_method=PUT或_method=DELETE

5.4 源码解析HiddenHttpMethodFilter

public static final String DEFAULT_METHOD_PARAM = "_method";

private String methodParam = DEFAULT_METHOD_PARAM;

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
      throws ServletException, IOException {

   HttpServletRequest requestToUse = request;

   if ("POST".equals(request.getMethod()) && request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) == null) {
      String paramValue = request.getParameter(this.methodParam);
      if (StringUtils.hasLength(paramValue)) {
         String method = paramValue.toUpperCase(Locale.ENGLISH);
         if (ALLOWED_METHODS.contains(method)) {
            requestToUse = new HttpMethodRequestWrapper(request, method);
         }
      }
   }

   filterChain.doFilter(requestToUse, response);
}
/**
	 * Simple {@link HttpServletRequest} wrapper that returns the supplied method for
	 * {@link HttpServletRequest#getMethod()}.
	 */
	private static class HttpMethodRequestWrapper extends HttpServletRequestWrapper {

		private final String method;

		public HttpMethodRequestWrapper(HttpServletRequest request, String method) {
			super(request);
			this.method = method;
		}

		@Override
		public String getMethod() {
			return this.method;
		}
	}

6、SpringMVC处理请求数据

使用Servlet处理请求数据

  1. 请求参数
    • String param = request.getParameter();
  2. 请求头
    • request.getHeader();
  3. Cookie
    • request.getCookies();

6.1 处理请求参数

  • 默认情况:可以将请求参数名,与入参参数名一致的参数,自动入参【自动类型转换】

  • SpringMVC支持POJO入参

    • 要求:请求参数名与POJO的属性名保持一致(大小写也需要一致,否则封装成null 如果有的属性数量不一致也会封装成null)

    • 示例代码

<form th:action="@{/saveEmp}" method="POST">
    id:<input type="text" name="id"><br>
    LastName:<input type="text" name="lastName"><br>
    Email:<input type="text" name="email"><br>
    Salary:<input type="text" name="salary"><br>
    <input type="submit" value="添加员工信息">
</form>
/**
 * 获取请求参数POJO
 * @return
 */
@RequestMapping(value = "/saveEmp",method = RequestMethod.POST)
public String saveEmp(Employee employee){
    System.out.println("employee = " + employee);
    return  SUCCESS;
}

6.2@RequestParam注解

  • 作用:如请求参数与入参参数名不一致时,可以使用@RequestParam注解设置入参参数名

  • 属性

    • value
      • 类型:String
      • 作用:设置需要入参的参数名
    • name
      • 类型:String
      • 作用:与value属性作用一致
    • required
      • 类型:Boolean
      • 作用:设置当前参数,是否必须入参
        • true【默认值】:表示当前参数必须入参,如未入参会报如下错误
          • 400【Required String parameter ‘sName’ is not present】
        • false:表示当前参数不必须入参,如未入参,装配null值
    • defaultValue
      • 类型:String
      • 作用:当装配数值为null时,指定当前defaultValue默认值

    示例代码

/**
 * 获取请求参数
 * @return
 */
@RequestMapping("/requestParam1")
public String requestParam1(@RequestParam(value = "sName",required = false,
                                        defaultValue = "zhangsan")
                                        String stuName,
                            Integer stuAge){
    System.out.println("stuName = " + stuName);
    System.out.println("stuAge = " + stuAge);
    return SUCCESS;
}

6.2 处理请头

  • 语法@RequestHeader注解

  • 属性

    • value
      • 类型:String
      • 作用:设置需要获取请求头名称
    • name
      • 类型:String
      • 作用:与value属性作用一致
    • required
      • 类型:boolean
      • 作用:【默认值true】
        • true:设置当前请求头是否为必须入参,如未入参会报如下错误
          • 400【Required String parameter ‘sName’ is not present】
        • false:表示当前参数不必须入参,如未入参,装配null值
    • defaultValue
      • 类型:String
      • 作用:当装配数值为null时,指定当前defaultValue默认值
  • 示例代码

<a th:href="@{/testGetHeader}">测试获取请求头</a>
/**
 * 获取请求头
 * @return
 */
@RequestMapping(value = "/testGetHeader")
public String testGetHeader(@RequestHeader("Accept-Language")String al,
                            @RequestHeader("Referer") String ref){
    System.out.println("al = " + al);
    System.out.println("ref = " + ref);
    return SUCCESS;
}

6.3 处理Cookie信息

  • 语法:@CookieValue获取Cookie数值

  • 属性

    • value
      • 类型:String
      • 作用:设置需要获取Cookie名称
    • name
      • 类型:String
      • 作用:与value属性作用一致
    • required
      • 类型:boolean
      • 作用:【默认值true】
        • true:设置当前Cookie是否为必须入参,如未入参会报如下错误
          • 400【Required String parameter ‘sName’ is not present】
        • false:表示当前Cookie不必须入参,如未入参,装配null值
    • defaultValue
      • 类型:String
      • 作用:当装配数值为null时,指定当前defaultValue默认值
  • 示例代码

<a th:href="@{/setCookie}">设置Cookie信息</a><br>
<a th:href="@{/getCookie}">获取Cookie信息</a><br>
/**
     * 设置Cookie
     * @return
     */
    @RequestMapping("/setCookie")
    public String setCookie(HttpSession session){
//        Cookie cookie = new Cookie();
        System.out.println("session.getId() = " + session.getId());
        return SUCCESS;
    }

    /**
     * 获取Cookie
     * @return
     */
    @RequestMapping("/getCookie")
    public String getCookie(@CookieValue("JSESSIONID")String cookieValue){
        System.out.println("cookieValue = " + cookieValue);
        return SUCCESS;
    }

6.4 使用原生Servlet-API

  • 将原生Servlet相关对象,入参即可
@RequestMapping("/useRequestObject")
public String useRequestObject(HttpServletRequest request){}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值