SpringMVC

本文对比了SpringMVC中的请求转发(forward)与重定向(redirect)在地址栏变化、资源访问、请求次数和数据共享等方面的差异,并介绍了MVC模式和SpringMVC的执行流程以及一个入门案例。
摘要由CSDN通过智能技术生成

forward(请求转发)和redirect(重定向)区别

forward:1、请求转发地址栏路径不变

2、请求转发只能访问当前服务器下的资源

3、请求转发是一次请求,可以使用request对象来共享数据

 @RequestMapping("/h1")
 ​
 public String h1() {
 ​
     System.out.println("user mvc controller is running ...");
 ​
     return "forward:index.jsp";
 ​
 }

redirect:1、重定向地址栏发生改变

2、重定向可以访问其他网站(服务器)的资源

3、重定向是两次请求,不能使用request对象来共享数据

 @RequestMapping("/h2")
 ​
 public String h2() {
 ​
     System.out.println("user mvc controller is running ...");
 ​
     return "redirect:https://www.baidu.com/";
 ​
 }

什么是MVC

MVC:模型/Model(dao,service) 视图/View(jsp) 控制器/Controller(Servlet),它是一种软件设计规范。它是将业务逻辑,数据,显示分离的方法来组织代码。主要作用是降低视图和业务逻辑间的双向耦合。

Model:数据模型,用于封装数据

View:页面视图,用于展示数据 eg:jsp、html

Controller:处理用户交互的调度器,用于根据用户需求处理程序逻辑 eg:Servlet、SpringMvc

三层架构

web层:数据展示

service层:业务处理

dao层:数据操作

SpringMVC简介

SpringMVC是一种基于Java实现的MVC模型的轻量级Web框架

优点

轻量级,简单易学

性能突出(相较于现有的框架技术)

高效,基于请求响应的MVC框架

灵活性强

SpringMVC执行流程

(1)当用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet;

(2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器;

(3)前端控制器调用处理器适配器HandlerAdapter去适配调用Handler;

(4)处理器适配器会根据Handler去调用真正的处理器去处理请求,并且处理对应的业务逻辑; (5)当处理器处理完业务之后,会返回一个ModelAndView对象给处理器适配器,HandlerAdapter再将该对象返回给前端控制器;这里的Model是返回的数据对象,View是逻辑上的View。

(6)前端控制器DispatcherServlet将返回的ModelAndView对象传给视图解析器ViewResolver进行解析,解析完成之后就会返回一个具体的视图View给前端控制器。(ViewResolver根据逻辑的View查找具体的View)

(7)前端控制器DispatcherServlet将具体的视图进行渲染,渲染完成之后响应给用户(浏览器显示)

入门案例

导入SpringMVC相关坐标
 <!-- servlet3.1规范的坐标 -->
 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>3.1.0</version>
     <scope>provided</scope>
 </dependency>
     
 <!--jsp坐标-->
 ​
 <dependency>
     <groupId>javax.servlet.jsp</groupId>
     <artifactId>jsp-api</artifactId>
     <version>2.1</version>
     <scope>provided</scope>
 </dependency>
 ​
 <!--spring的坐标-->
 ​
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.1.9.RELEASE</version>
 </dependency>
 ​
 <!--spring web的坐标-->
 ​
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-web</artifactId>
     <version>5.1.9.RELEASE</version>
 </dependency>
 ​
 <!--springmvc的坐标-->
 ​
 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
     <version>5.1.9.RELEASE</version>
 </dependency>
定义表现层业务处理器Controller,并配置成spring的bean(等同于Servlet)
 package com.buka.controller;
 ​
 import org.springframework.stereotype.Controller;
 ​
 @Controller
 public class UserController {
     public void save(){
         System.out.println("user mvc controller is running ...");
     }
 }
在resources包下创建一个 spring-mvc.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"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
 ​
     <!--扫描加载所有的控制类类-->
     <context:component-scan base-package="com.buka"/>
 </beans>
web.xml中配置SpringMVC核心控制器,用于将请求转发到对应的具体业务处理器Controller中(等同于Servlet配置)
 <!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd" >
 ​
 <web-app>
   <display-name>Archetype Created Web Application</display-name>
   <!--  前端控制器-->
   <servlet>
     <servlet-name>DispatcherServle</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <!--   DispatcherServlet要绑定Spring的配置文件 -->
     <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:spring-mvc.xml</param-value>
     </init-param>
   </servlet>
   <servlet-mapping>
     <servlet-name>DispatcherServle</servlet-name>
     <url-pattern>/</url-pattern>
   </servlet-mapping>
 </web-app>
设定具体Controller的访问路径(等同于Servlet在web.xml中的配置)
 
package com.buka.controller;
 ​
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 ​
 @Controller
 @RequestMapping("/save")//设定当前方法的访问映射地址
 public class UserController {
     public void save(){
         System.out.println("user mvc controller is running ...");
     }
 }
在webapp包下建一个jsp/save.jsp
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <html>
 <head>
     <title>Title</title>
 </head>
 <body>
 <h1>欢迎光临</h1>
 </body>
 </html>
设置返回页面
 package com.buka.controller;
 ​
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 ​
 @Controller
 @RequestMapping("save")//设定当前方法的访问映射地址
 //设置当前方法返回值类型为String,用于指定请求完成后跳转的页面
 public class UserController {
     @RequestMapping("h1")
     public String save(){
         System.out.println("user mvc controller is running ...");
         //设定具体跳转的页面
         return "save.jsp";
     }
 }

访问url:http://localhost:8080/MySpringMVC/save/h1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值