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

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

相关推荐
江-小北18 分钟前
10万字86道Java多线程经典面试题(2025修订版)
java·java面试题·java并发面试题·java多线程面试题
Hygge-star19 分钟前
【算法】定长滑动窗口5.20
java·数据结构·算法·学习方法·代码规范
鸠。31 分钟前
苍穹外卖04 新增菜品&&菜品分页查询&删除菜品&修改菜品
java
xxjiaz1 小时前
移除链表元素--LeetCode
java·算法·leetcode·链表
洛_尘2 小时前
Java EE进阶1:导读
java·java-ee
老马啸西风2 小时前
工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎,支持现实世界的流程自动化需求
java·开源·自动化·activiti·workflow·flowable·bpm
不会写代码的女程序猿2 小时前
基于Spring Boot+Layui构建企业级电子招投标系统实战指南
java·企业招投标系统源码·招投标系统
asom222 小时前
Java 05正则表达式
java·正则表达式
qq_2518364573 小时前
基于springboot3 VUE3 火车订票系统前后端分离项目适合新手学习的项目包含 智能客服 换乘算法
java·开发语言·spring boot·后端·学习
oioihoii3 小时前
C++23:修正常量迭代器、哨兵和范围
java·开发语言·c++23