Spring-Mvc(day1)

一、SpringMVC概述

1、SpringMVC是一个基于MVC模式的WEB层框架,主要解决参数接收、文件上传&下载、表单验证

2、SpringMVC是建立在Spring基础上的。所以使用SpringMVC必须先保证你的项目拥有Spring的运行环境;

3、SpringMVC的功能就是之前servlet的功能

二、环境搭建

1、搭建Spring环境

2、配置tomcat服务器

3.导入SpringMVC依赖

xml 复制代码
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>5.2.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.4.RELEASE</version>
</dependency>

4.SpringMVC配置文件 spring-mvc.xml

ini 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/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
">
</beans>

5.在web.xml中配置核心控制器DispatcherServlet

  • 注意:需要优先加载并读取配置文件spring-mvc.xml
xml 复制代码
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
<!--    读取核心配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.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>

6.编写controller,页面测试,配置Controller的Bean(不重要)

  • Controller类(实现Controller接口并覆handleRequest方法)
ini 复制代码
String name = request.getParameter("name");
System.out.println(name);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","hello,海绵宝宝");
modelAndView.setViewName("/WEB-INF/hello.jsp");
return modelAndView;
  • 在WEB-INF下建hello.jsp页面,使用EL表达式取Request域里的值
  • spring-mvc.xml配置Bean

name:由核心分发器转到后台接口的URL

calss: controller的路径

ini 复制代码
<bean name="/hello" class="cn.lifei._01hello.controller.HelloController"></bean>

启动Tomcat

访问hello能到hello页面表示成功搭建

三、前端控制器url-pattern配置(主流用第三种)

Spring的前端控制器拦截匹配规则,可以自己定义

sql 复制代码
<url-pattern>...</url-pattern>

1、*.xxx(后缀匹配)

拦截固定结尾的uri ,如*.json、 *.html

不会导致静态资源的拦截,只有以.xxx结尾的请求才会经过DispatcherServlet处理;

2、/*

会拦截所有url,一般只用在过滤器上

3、/ (重要,主要的配置方式)

javascript 复制代码
<url-pattern>/</url-pattern>

会拦截js、css、.css、.htm等后缀型url

也是拦截所有,包括静态资源,不会拦截*.jsp,如果想要访问静态资源需要在spring-mvc.xml里开启静态资源访问权限

arduino 复制代码
- 放行静态资源
<mvc:default-servlet-handler/>

四、业务处理控制器的三种实现(主流用第三种)

1、 实现Controller接口;

实现接口COntroller并在spring-mvc.xml里配置(配置方法和环境搭建里的一样)

2、 实现HttpRequestHandler接口;

方法和上面一样,只是实现接口不同

3、 普通类(pojo)+注解 @RequestMapping;

建一个普通类,打类上@Controller注解,在类和方法上打出注解@RequestMapping,括号内是uri访问路径(和配置bean的name一样)

csharp 复制代码
@RequestMapping("/insert")
public void test01  () {
    System.out.println("新增请求");

}

注意:

  • 使用@Controller注解需要配置扫描相应的包及其子包下的所有类
ini 复制代码
<context:component-scan base-package="cn.lifei"></context:component-scan>
  • 要使用@RequestMapping注解(请求映射支持),就需要配置映射
kotlin 复制代码
<mvc:annotation-driven/>

五、控制器常用操作

控制器接收到请求后需要做:接收参数->跳转页面->绑定数据。这儿主要说前两个。

1、接受请求参数

1.1、处理中文参数乱码

参数接收首先要考虑乱码问题,之前是获取请求参数之前设置编码格式,如下:

vbscript 复制代码
request.setCharacterEncoding("utf-8");

但这样的方式需要在每个控制器都要处理乱码,不够简便,因此引入过滤器进行优化

  • 过滤器Filter

过滤器可以实现web容器在对某资源的访问前进行截获并进行相关的处理,因此可以在这个过程中对字符进行设置编码格式

在web.xml中配置字符编码过滤器并设置字符编码

xml 复制代码
<filter>
  <filter-name>characterEncoding</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>characterEncoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

以下为强制指定字符编码,一般不配置,太过暴力,会导致就算再Request或者response设置字符编码也会执行强制的字符

xml 复制代码
<init-param>
	<param-name>forceEncoding</param-name>
	<param-value>true</param-value>
</init-param>
1.2、参数接收方式(主要第三种和第四种)
  • 通过HttpServletRequest接收
csharp 复制代码
//使用HttpServletRequest接收(不建议使用)
/**
 * http://localhost/test01?name=admin&age=24
 */
@RequestMapping("/test01")
public void test01(HttpServletRequest request){
    System.out.println(request.getParameter("name"));
    System.out.println(request.getParameter("age"));
}
  • 通过参数接收
csharp 复制代码
/**
 * http://localhost/test01?name=admin&age=24
 */
@RequestMapping("/test02")
public void test02(String name,Integer age){
    System.out.println(name);
    System.out.println(age);
}
  • 通过对象接收
sql 复制代码
创建一个User类

@RequestMapping("/test03")
public void test03(User user){
    System.out.println(user);
}
  • URL地址提取数据
less 复制代码
/**
 * 接收url中参数的请求,接收用户请求参数值 
 * http://localhost/params05/delete/100/tom
 * 	注:这种方式为RESTful风格,参数不易过多
 */
@RequestMapping("/test04/{id}/{name}")
public void test04(@PathVariable("id") Long id,@PathVariable("name")String name){
    System.out.println(id);
    System.out.println(name);
}

2、视图解析器

SpringMvc提供了InternalResourceViewResolver,用于统一管理响应视图的匹配

这里主要为写视图路径能更简便,使用之后,响应的数据会交给视图解析器进行解析,然后转向响应的页面,以下是xml中的配置

ini 复制代码
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/" />
    <property name="suffix" value=".jsp" />
</bean>

3、向页面传值

通过传统的HttpServletRequest传递;

vbscript 复制代码
@RequestMapping("/test01")
public void test01(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  request.setAttribute("msg","test01");
  request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request,response);
}

通过ModelAndView对象传递;

typescript 复制代码
@RequestMapping("/test02")
public ModelAndView test02(){

    return new ModelAndView("hello","msg","test02");
}

通过Model对象传递;

typescript 复制代码
    @RequestMapping("/test03")
    public String test03(Model model){
        model.addAttribute("msg","test03");
//        return "forward:/WEB-INF/hello.jsp";
        return "hello";
    }

4、跳转方式

请求转发forward

重定向redirect

注意:请求转发和重定向的时候,是不会经过视图解析器,需要配置全路径

相关推荐
m0_748245171 小时前
Web第一次作业
java
小码的头发丝、1 小时前
Java进阶学习笔记|面向对象
java·笔记·学习
m0_548514771 小时前
前端Pako.js 压缩解压库 与 Java 的 zlib 压缩与解压 的互通实现
java·前端·javascript
坊钰1 小时前
【Java 数据结构】移除链表元素
java·开发语言·数据结构·学习·链表
chenziang11 小时前
leetcode hot100 LRU缓存
java·开发语言
会说法语的猪1 小时前
springboot实现图片上传、下载功能
java·spring boot·后端
码农老起1 小时前
IntelliJ IDEA 基本使用教程及Spring Boot项目搭建实战
java·ide·intellij-idea
m0_748239832 小时前
基于web的音乐网站(Java+SpringBoot+Mysql)
java·前端·spring boot
时雨h2 小时前
RuoYi-ue前端分离版部署流程
java·开发语言·前端