0
点赞
收藏
分享

微信扫一扫

springmvc持续更新

追风骚年 2022-04-27 阅读 92
javaspring

day01

现在解决一下tomcat中文乱码的问题

解决控制台乱码问题
1)    点击Help => Edit custom VM Options,在最后面添加
“-Dfile.encoding=UTF-8”
2)    点击右上角 Edit Configurations,在tomcat配置中的 VM option中添加
“-Dfile.encoding=UTF-8”
在第二步的Startup/Connection页签的Run和Debug添加一个key为JAVA_TOOL_OPTIONS, value为“-Dfile.encoding=UTF-8”
的环境变量
3)    保存后重启idea,可以发现控制台中文乱码显示正常了



1.1 SpringMVC概述

  • SpringMVC是Spring子框架,是Spring 为【展现层、展示层、表示层】提供的基于 MVC 设计理念的优秀的 Web 框架

  • Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器【请求处理器】,而无须实现任何接口。

    • SpringMVC是非侵入式

    • @Controller、@Component、@Reposity、@Service

 

 

  • 浏览器【客户端】发送请求

  • 由前端控制器【DispatcherServlet】将请求,委托给Controller【请求处理器】

  • Controller【请求处理器】调用业务逻辑层,并返回数据

  • 将数据封装到ModelAndView对象

  • 渲染视图【将View从ModelAndView中解析出来】

  • 将View对象交个DispatcherServlet,最终响应浏览器【客户端】

1.3第一步 搭建SpringMVC步骤

        1.导包


    <dependencies>
        <!--spring-webmvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.1</version>
        </dependency>

<!--        &lt;!&ndash;日志&ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>ch.qos.logback</groupId>-->
<!--            <artifactId>logback-classic</artifactId>-->
<!--            <version>1.2.11</version>-->
<!--        </dependency>-->

        <!-- 导入thymeleaf与spring5的整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

    </dependencies>

        2.

在web.xml中配置DispatcherServlet【前端控制器】

  • url设置为/

  • 设置springmvc.xml配置文件路径,从而管理springmvc容器对象

  • 设置DispatcherServlet的优先级,启动服务器创建当前DispatcherServlet

         3.

创建springmvc.xml配置文件

  • 位置:src/main/resources

  • 名称:推荐使用springmvc.xml

  • 示例代码

    • 开启组件扫描

    • 配置视图解析器

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

    <!--mvc注解驱动-->
    <mvc:annotation-driven/>

    <!--    处理静态资源过滤-->
    <mvc:default-servlet-handler/>

    <!--配置视图解析器-->
    <bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver" id="viewResolver">
        <!--配置字符集属性-->
        <property name="characterEncoding" value="UTF-8"/>
        <!--配置模板引擎属性-->
        <property name="templateEngine">
            <!--配置内部bean-->
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <!--配置模块的解析器属性-->
                <property name="templateResolver">
                    <!--配置内部bean-->
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!--配置前缀-->
                        <property name="prefix" value="/WEB-INF/views/"/>
                        <!--配置后缀-->
                        <property name="suffix" value=".html"/>
                        <!--配置字符集-->
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>


</beans>

创建Controller【请求处理器】及处理方法  跳转首页

@Controller
public class ToIndexController {

    @GetMapping("/")
    public String toindex(){
        //物理视图名=视图前缀+逻辑视图名+视图后缀
        //物理视图名=/WEB-INF/pages/index/.html
        System.out.println("跳转首页啦!!!!");
        return "index";
    }

 



@RequestMapping注解详解

该注解有以下几个子注解

@PutMapping 主要是基于RESF风格的修改功能
@DeleteMapping主要是基于RESF风格的删除功能
@PostMapping主要是基于RESF风格的增加功能
@GetMapping主要是基于RESF风格的查询功能

  1.  放在方法上可以单独使用 直接映射到方法上 这点就比servlet牛逼不知道多少倍
  2. 也可以放在类上  代表给这个类有一个大的约束url 但是注意的是不能够单独使用 需要配合方法使用
  • value属性

    • 类型:String[]

    • 作用:为方法或类映射URL

  • path属性

    • 类型:String[]

    • 作用:与value属性作用一致

  • method属性

    • 类型:RequestMethod[]

      public enum RequestMethod {
         GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
      }
    • 作用:设置当前URL的请求方式【GET、POST、DELETE、PUT】

    • 注意:如请求方式不被支持,会报错:405

      Request method 'GET' not supported

     

  • params

    • 类型:String[]

    • 作用:为当前URL设置请求参数

    • 注意:如未携带指定参数,会报错

      Parameter conditions "stuName" not met for actual request parameters:

  • headers

    • 类型:String[]

    • 作用:为当前URL设置请求头

    • 注意:如未携带指定请求头,会报错:404



第三章 SpringMVC中REST风格的CRUD

3.1 REST概述

  • 简称为 REST 或 RESTful

  • REST风格的URL将HTTP协议中的四种请求方式GET、POST、PUT、DELETE分别对应四种基本操作:

    • GET 用来获取资源

    • POST 用来新建资源

    • PUT 用来更新资源

    • DELETE 用来删除资源。

3.2 REST风格与传统风格对比

  • 传统风格

    功能URL请求方式
    增加/saveEmpPOST
    删除/deleteEmp?id=1001GET
    修改/updateEmpPOST
    查询/getEmpById?id=1001GET
  • REST风格

    功能URL请求方式
    增加/empPOST
    删除/emp/1001DELETE
    修改/empPUT
    查询/emp/1001GET
  • 总结:REST风格CRUD优势

    • 提高网站排名

    • 便于第三方平台对接

代码测试 

测试之前完成一件事 就是浏览器无法发送put和delete请求 得需要我们的配置

配置一个拦截器

    <!--    配置拦截器 测试delete和put请求-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

编写html代码 测试crud 简单的测试 不包含myabtis

<!DOCTYPE html>
<!--添加thymeleaf-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>CRUD</title>
</head>
<body>
<a th:href="@{/get}"> 测试get请求</a>
<br>
<br>
<br>

测试post请求
<form method="post" th:action="@{/post}">
    姓名:<input type="text" name="name">
    年龄:<input type="text" name="age">
    <input type="submit" value="提交">
</form>
<br>
<br>
<br>

测试delete请求 删除携带id
<form method="post" th:action="@{/delete/1001}">
    <input type="hidden" name="_method" value="delete">
    <input type="submit" value="提交">
</form>
<br>
<br>
<br>
测试put请求 修改携带id
<form method="post" th:action="@{/put/1001}">
    <input type="hidden" name="_method" value="put">
    <input type="submit" value="提交">
</form>



</body>
</html>

分别对应的controller控制器 为


/**
 * @ClassName RequsetMapping扩展
 * @Author Dongyu Zhou
 * @Date 2022/4/27 18:34
 * @Version 1.0
 */
@Controller
public class RequsetMapping扩展 {
    /**
     * get请求
     * @return
     */
    @GetMapping("/get")
    public String get(){
        System.out.println("get请求 ....");
        return "success";
    }

    /**
     * post请求
     * @return
     */
    @PostMapping("/post")
    //如果入参和请求参数名字一样 可以自动映射
    public String post(@RequestParam("name") String name, @RequestParam("age")Integer age){
        System.out.println("name = " + name);
        System.out.println("post ....");
        return "success";
    }

    /**
     * delete请求
     * @return
     */
    @DeleteMapping("/delete/{Empid}")
    public String delete(@PathVariable("Empid")Integer id){
        System.out.println("id = " + id);
        System.out.println("delete ....");
        return "success";
    }

    /**
     *
     * @return
     */
    @PutMapping("/put/{EmpId}")
    public String put(@PathVariable("EmpId") Integer id){
        System.out.println("id = " + id);
        System.out.println("put ....");
        return "success";
    }


 

第四章 SpringMVC处理请求数据

4.1 自动入参

  • 概述:请求参数名与请求参数名与入参参数名一致

  • 注意:如请求参数名与入参参数名不一致,会将null值注入【所以建议使用包装类型作为入参的类型】

  • 示例代码

    @GetMapping("/doDefaultParam")
    public String doDefaultParam(String stuName,Integer stuAge){
        System.out.println("stuName = " + stuName);
        System.out.println("stuAge = " + stuAge);
        return SUCESS;
    }

4.2 @RequestParam注解

  • 作用:将指定参数名设置请求方法入参参数中

  • 属性

    • value:设置需要入参的参数名

    • name:与value左右一致

    • required:设置当前标识的参数是否必须入参

      • true【默认值】:表示当前标识的参数必须入参,如未入参会报错

        Required Integer parameter 'sAge' is not present

      • false:表示当前标识的参数不必须入参,如未入参会将null值注入

    • defaultValue:设置当前入参参数默认值【参数值为null时显示】

  • 示例代码

    @GetMapping("/doDefaultParam")
    public String doDefaultParam(String stuName,
                                 @RequestParam(value = "sAge",
                                         required = false,
                                        defaultValue = "16") Integer stuAge){
        System.out.println("stuName = " + stuName);
        System.out.println("stuAge = " + stuAge);
        return SUCESS;
    }

4.3 POJO入参

  • 概述:入参时,参数名与POJO中属性一致时,SpringMVC支持POJO入参

  • 示例代码

    <h3>添加员工信息</h3>
    <form th:action="@{/saveEmp}" method="post">
        LastName:<input type="text" name="lastName"><br>
        Email:<input type="text" name="email"><br>
        Salary:<input type="text" name="salary"><br>
        DeptName:<input type="text" name="dept.deptName"><br>
        <input type="submit" value="添加员工信息">
    </form>
    public class Employee {
        private Integer id;         //员工id
        private String lastName;    //员工姓名
        private String email;       //员工邮箱
        private Double salary;      //员工薪资
    ​
        private Dept dept;
        //.....
    }
    @PostMapping("/saveEmp")
    public String saveEmp(Employee employee){
        System.out.println("employee = " + employee);
        return SUCESS;
    }

4.4 获取请求头信息【@RequestHeader】

  • 作用:获取请求头信息

  • 属性

    • value:设置请求头名称

    • name:作用与value作用一致

    • required:设置当前请求头是否必须入参

      • true【默认值】:表示当前请求头必须入参,如未入参,会报错

      • false:表示当前请求头不必须入参,如未入参,不会报错【null】

    • defaultValue:设置当前请求头默认数值【请求头信息为null时,显示】

  • 示例代码

    /**
     * 测试获取请求头
     */
    @GetMapping("/getRequestHeader")
    public String getRequestHeader(@RequestHeader("User-Agent") String userAggent,
                                   @RequestHeader("Referer") String referer ){
        System.out.println("userAggent = " + userAggent);
        System.out.println("referer = " + referer);
        return SUCCESS;
    }

4.5 获取Cookie数值【@CookieValue】

  • 作用:通过Cookie的key获取Cookie的Value

  • 属性

    • value:设置Cookie的key

    • name:作用与value作用一致

    • required:设置当前Cookie是否必须入参

      • true【默认值】:表示当前Cookie必须入参,如未入参,会报错

      • false:表示当前Cookie不必须入参,如未入参,不会报错【null】

    • defaultValue:设置当前Cookie默认数值【Cookie信息为null时,显示】

  • 示例代码

    @GetMapping("/getCookieValue")
    public String setCookieValue(@CookieValue("stuName") String stuName){
        System.out.println("==>getCookie,stuName = " + stuName);
        return SUCCESS;
    }

4.6 SpringMVC中使用Servlet原生对象

  • 如需使用Servlet原生API怎么办?

    • 直接将原生对象入参即可

  • 示例代码

    @GetMapping("/testServletAPI")
    public String testServletAPI(HttpServletRequest request,
                                 HttpServletResponse response,
                                 HttpSession session){
        System.out.println("request = " + request);
        System.out.println("response = " + response);
        System.out.println("session = " + session);
        return SUCCESS;
    }
举报

相关推荐

0 条评论