Spring框架学习(6)页面转发、重定向

前言

记录学习过程

直接页面转发

不经过控制器类的处理方法直接转发到页面,可以通过使用< mvc:view-controller >元素来实现。在SpringMVC配置文件springmvc.xml中:

    <!--不经过控制器类的处理方法直接转发到页面-->
    <!--如果当前请求为“/success”时,则转发到“/success.jsp”-->
    <mvc:view-controller path="/success" view-name="success"/>

运行Web,输入地址http://localhost:8080/success
在这里插入图片描述
运行成功
注意:springmvc.xml文件需要配置< mvc:annotation-driven/>
配置了mvc:annotation-driven/后,Spring就知道了我们启用注解驱动,然后Spring通过context:component-scan/标签的配置,会自动为我们将扫描到的@Component,@Controller,@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求

定义视图

通过BeanNameViewResolver类可以实现用户自定义的视图
(1)创建一个类MyView,实现View接口

package com.springmvc.view;

import org.springframework.web.servlet.View;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;


@Component
public class MyView implements View {

    @Override
    public String getContentType() {
        return "text/html";
    }


    @Override
    public void render(Map<String, ?> arg0, HttpServletRequest requset, HttpServletResponse response)
    throws Exception
    {
    	//自定义页面内容
        response.getWriter().println("hello,this is myView");
    }
}

注意!!!!!这个View接口是Spring框架的。。。第一次以为是自己写的接口,没想到是自带的,坑了我半天

(2)在控制器中添加方法

    @RequestMapping("/beanNameViewResolver")
    public String beanNameViewResolver(){
        System.out.println("MyView");
        return "myView";
    }

(3)在springmvc.xml配置视图解析器,使用视图名称实现视图解析

    <context:component-scan base-package="com.springmvc.view"/>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="10"/>
    </bean>

如果配置文件前面没有context:component-scan,加上这个配置自动扫描的包
(4)index.jsp设置超链接,测试 成功

 <a href="/springmvc/beanNameViewResolver">BeanNameViewResolver</a>

在这里插入图片描述

页面重定向

前面的例子中,控制器类的方法返回的字符串默认通过转发的方式跳转到目标页面
如果返回的字符串中带redirect前缀,会采用重定向的方式跳转到目标页面
例:
(1)HelloController控制器类添加方法

    @RequestMapping("/redirect")
    public String redirect(){
        return "redirect:/success.jsp";
    }

(2)index.jsp添加超链接

<a href="/springmvc/redirect">redirect success.jsp</a>

(3)测试成功
注意:WEB-INF目录下的文件受保护,无法直接访问,如果直接重定向该目录下的文件会404
WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问

重定向与转发

forward(转发):

是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址.

redirect(重定向):

是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

转发是服务器行为,重定向是客户端行为

转发与重定向的理解

发布了49 篇原创文章 · 获赞 0 · 访问量 1256

猜你喜欢

转载自blog.csdn.net/key_768/article/details/103973224