IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring MVC -> 正文阅读

[Java知识库]Spring MVC

MVC是什么

MVC是一种设计思想,将业务逻辑从界面中分离出来,允许单独改变而不会互相影响
在这里插入图片描述

spring mvc是什么

在这里插入图片描述
能做什么?
在这里插入图片描述

Spring mvc 请求流程分析

在这里插入图片描述

springmvc环境配置

依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.shxt</groupId>
    <artifactId>spring_mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>springmvc01 Maven Webapp</name>
    <url>http://www.example.com</url>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>4.2.4.RELEASE</spring.version>
    </properties>
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>springmvc01</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- 配置Tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <path>/springmvc</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <server>tomcat7</server>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<!--配置前端请求的前端控制器-->
<servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:servelt-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

spring.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: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/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.shxt.springmvc.controller"/>
    <mvc:default-servlet-handler/>
    <!--配置消息转换器,防止乱码发生-->
    <mvc:annotation-driven/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

在这里插入图片描述

URL地址映射配置

通过@RequestMapping设置地址
@RequestMapping

  1. 设置在方法级别-方法路径
  2. 设置在类级别-类路径
  3. 设置类级别与方法-类路径/方法路径

1.映射单个地址

@RequestMapping("u01")
public ModelAndView url01(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("msg","url01");
    modelAndView.setViewName("hello");
    return modelAndView;
}

2.映射多个地址配置

@RequestMapping(value = {"u03_01","u03_02"})
public ModelAndView url02(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("msg","url02");
    modelAndView.setViewName("hello");
    return modelAndView;
}

3.设置类路径+方法路径
如果有类路径,则访问时需要将类路径作为访问的父路径(方法路径前需要加类路径)
在这里插入图片描述

在这里插入图片描述
此时访问地址变成类路径+方法路径-url/u04
4.设置请求地址的请求方式
通过注解的method属性设置(GET|POST|PUT|DELETE)
RequestMethod.GET或RequestMethod.POST

@RequestMapping(value = "u05",method = RequestMethod.GET)
public ModelAndView url05(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("msg","url05");
    modelAndView.setViewName("hello");
    return modelAndView;
}

5.设置参数路径–了解即可
通过注解的eparams属性设置参数路径

@RequestMapping(params = "uname")
public ModelAndView url06(){
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("msg","url06");
    modelAndView.setViewName("hello");
    return modelAndView;
}

此时访问路径变成?+参数名

参数绑定

1.基本数据类型
1.传递的参数名与方法的形参名保持一致
2.如果参数未传递或参数值为null会报500异常

    @RequestMapping("p01")
public void  param01(int age,double money){
    System.out.println("age:"+age+"money"+money);
}

在这里插入图片描述
可以通过@RequestParam注解设置参数的相关信息(注解声明在形参前)
通过defaultValue属性设置参数的默认值
可以通过属性name设置参数的别名

   @RequestMapping("p02")
    public void  param02(@RequestParam (defaultValue = "18",name = "uage")int age, @RequestParam(defaultValue = "100") double money){
        System.out.println("age:"+age+"money"+money);
    }
``
2.包装类型-如果数据时基本数据类型,建议使用对应的包装类
	1.传递的参数名与方法的形参名保持一致
	2.参数未传递,默认值为null
```java
    @RequestMapping("p03")
public void  param03(Integer age, Double money){
    System.out.println("age:"+age+"money"+money);
}

3.字符串类型
1.传递的参数名与方法的形参名保持一致
2.可以接收null值

    @RequestMapping("p04")
public void  param04(String msg){
    System.out.println("msg"+msg);
}

在这里插入图片描述
4.数组类型
传递参数格式:ids=&ids=2&ids=3

@RequestMapping("p05")
public void  param05(String[] ids){
    for(String id : ids){
        System.out.println(id);
    }
}

5.java bean 类型
参数名与javaBean对线中的属性字段名保持一致

@RequestMapping("p06")
public void  param06(User user){
System.out.println(user);
}
public class User {
    private Integer userId;
    private  String  username;}
    GET SET.....方法

7.list类型
User 实体需要定义对应list属性(对于集合的参数绑定,一般需要使用javabean对象进行包装)
private List list = new ArrayList();

 @RequestMapping("p07")
public void  param07(User user){
    System.out.println(user);
}

在这里插入图片描述

请求转发和重定向

重定向
SpringMvc内部默认采用请求转发形式
请求转发-地址栏不发生改变,以Forward:开头
重定向-地址栏改变,以redirect:开头
请求转发跳转JSP页面
默认采用请求转发,会去视图解析器中设定的路径下查找指定的视图(在WEB-INF/)下寻找text.jsp文件
在这里插入图片描述

请求转发跳转JSP页面

使用forward:页面名转发,此时会从项目的根路径(webapp目录)下查找指定页面
如果传递参数,在页面中可以通过${param.参数名}获取对应的参数值

    @RequestMapping("view02")
    public ModelAndView view02(){
        ModelAndView modelAndView =  new ModelAndView();
        modelAndView.addObject("msg","请求转发1");
        modelAndView.setViewName("forward:view.jsp");
        //modelAndView.setViewName("forward:view.jsp?uname=zhangsan");
        return modelAndView;
    }
}

在这里插入图片描述
第二种方法
返回视图名字符串
默认会从视图解析器设置的路径下查找,(WEB-INF/jsp目录)
常用对象可以设置到方法的形参中,直接使用

    @RequestMapping("view05")
    public String view05(HttpServletRequest request){
        request.setAttribute("msg","请求转发5");
        return "text";
}

也可以使用forward
在这里插入图片描述

请求转发跳转控制器
使用forward:路径转发,此时会从项目的根路径下查找指定控制器

@RequestMapping("view04")
public ModelAndView view04(){
    ModelAndView modelAndView =  new ModelAndView();
    modelAndView.addObject("msg","请求转发1");
    modelAndView.setViewName("forward:hello");
    return modelAndView;}

请求转发跳转控制器

    @RequestMapping("view05")
    public String view05(HttpServletRequest request){
        request.setAttribute("msg","请求转发5");
        return "forward:hello";
}

重定向

重定向到JSP页面
默认从项目的根目录下查找资源

 @RequestMapping("view09")
    public ModelAndView view09(){
        ModelAndView modelAndView =  new ModelAndView();
        modelAndView.addObject("msg","重定向1");//请求域的值在重定向中获取不到,但是可以传递参数
        modelAndView.setViewName("redirect:view.jsp");
        return modelAndView;
    }

如果要传递中文则无法获取,需要使用RedirectAttributes对象设置
在这里插入图片描述
返回页面字符串

@RequestMapping("view11")
public String view11(){
    return "redirect:view.jsp";
}

重定向到控制器

@RequestMapping("view10")
public ModelAndView view10(){
    ModelAndView modelAndView =  new ModelAndView();
    modelAndView.addObject("msg","重定向");//请求域的值在重定向中获取不到,但是可以传递参数
    modelAndView.setViewName("redirect:hello");
    return modelAndView;
}

返回页面字符串

@RequestMapping("view12")
public String view12(){
    return "redirect:hello";
}

设置请求域
1.使用ModelAndView
addObject(“名称”,“值”)

    @RequestMapping("data01")
public ModelAndView data01(){
    //得到对象,并设置视图名
    ModelAndView modelAndView = new ModelAndView("data");
    //设置请求域(数据模型)
    modelAndView.addObject("msg","设置请求域");
    return modelAndView;
}

2.使用HttpServletRequest
setAttribute(“名称”,“值”)

@RequestMapping("data02")
public String data02(HttpServletRequest request){
   request.setAttribute("msg","通过HttpServletRequest对象设置请求域");
return "data";
    }

3.使用Model

@RequestMapping("data03")
public String data03(Model model){
    model.addAttribute("msg","通过Model对象设置请求域");
    return "data";
}

4.使用ModelMap

@RequestMapping("data04")
public String data04(ModelMap modelmap){
    modelmap.addAttribute("msg","通过HttpServletRequest对象设置请求域");
    return "data";
}

5.使用Map

@RequestMapping("data05")
public String data05(Map map){
    map.put("msg","通过HttpServletRequest对象设置请求域");
    return "data";
}

JSON数据开发

依赖
在这里插入图片描述
处理器
在这里插入图片描述
@ ResponseBody
默认控制器中方法的返回值时会去找对应的视图页面,如果想要返回数据,需要将返回的结果转换成字符串响应(转换成JSON字符串)
在这里插入图片描述

@RequestBody
要求传递的参数是一个JOSN格式的字符串!!!

拦截器实现

在这里插入图片描述

/*拦截器的实现
* 1实现接口
* */
public class MyInterceptor implements HandlerInterceptor {
    /*在目标方法(Hander)执行前执行
    * 如果返回true表示执行目标方法
    * 如果返回false表示组织目标方法执行*/
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("MyInterceptor-->preHandle方法....在目标方法执行前执行");
        return false;
    }
    /*在目标方法执行后,视图生成前执行
    * */
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor-->postHandle方法....在目标方法执行后,视图生成前执行");

    }
/*在目标方法执行后,视图生成后执行*/
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("MyInterceptor-->afterCompletion方法....在目标方法执行后,视图生成后执行");

    }
}
<!--拦截器设置-->
    <!--方法一:设置拦截器-->
<!--    <mvc:interceptors>-->
<!--        &lt;!&ndash;在mvc:interceptors标签中直接定义bean标签-->
<!--            bean标签的class执行拦截器的类路径,表示拦截所有请求-->
<!--            &ndash;&gt;-->
<!--        <bean class="com.shxt.springmvc.interceptor.MyInterceptor"/>-->
<!--    </mvc:interceptors>-->
    <!--拦截器配置二:设置拦截器推荐使用
    在标签下定义子标签,设置具体拦截器
    <mvc:mapping path=""表示需要被拦截的路径,可以使用通配符,可以配置多个“/**”表示拦截所有请求-->
    <mvc:interceptors>
        <mvc:interceptor>
<!--设置需要拦截的资源-->
            <mvc:mapping path="/**"/>
<!--设置需要放行的资源-->
            <mvc:exclude-mapping path="/url/*"/>
            <bean class="com.shxt.springmvc.interceptor.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors

拦截器第二种实现
继承HandlerInterceptorAdapter
重写Prehandle方法

public class MyInterceptor02 extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }
}

配置拦截器在这里插入图片描述

如果多个拦截器同时生效,则先配置的先执行
先配置的拦截器种对应的preHandle先执行
先配置的Posthandle,afterCompletion后执行

非法访问拦截

在这里插入图片描述
拦截器继承HandlerInterceptorAdapter
如果未登录session为空

在这里插入图片描述

文件上传

上传表单(二进制表单)
1.表单的提交方式 method=post
2。表单的类型
普通表单-enctype=" "
二进制表单
3.设置文件域的name属性值
配置:在这里插入图片描述
在这里插入图片描述
RESTFUL URL设计风格
在这里插入图片描述
在这里插入图片描述
异常抛出
在这里插入图片描述
2.实现HandlerExceptionResolver接口

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-13 11:38:35  更:2022-05-13 11:40:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:46:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码