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

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

相关推荐
loveLifeLoveCoding10 分钟前
Java List sort() 排序
java·开发语言
草履虫·17 分钟前
【Java集合】LinkedList
java
AngeliaXue19 分钟前
Java集合(List篇)
java·开发语言·list·集合
世俗ˊ20 分钟前
Java中ArrayList和LinkedList的比较
java·开发语言
zhouyiddd24 分钟前
Maven Helper 插件
java·maven·intellij idea
攸攸太上33 分钟前
Docker学习
java·网络·学习·docker·容器
Milo_K40 分钟前
项目文件配置
java·开发语言
程序员大金44 分钟前
基于SpringBoot+Vue+MySQL的养老院管理系统
java·vue.js·spring boot·vscode·后端·mysql·vim
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
nsa652231 小时前
Knife4j 一款基于Swagger的开源文档管理工具
java