转发和重定向

转发和重定向

在Servlet中实现页面的跳转有两种方式:转发和重定向.

定义:

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。由浏览器端进行的页面跳转。

二、举例说明:

重定向是网页制作中的一个知识。假设你现在所处的位置是一个论坛的登录页面,你填写了帐号,密码,点击登陆,如果你的帐号密码正确,就自动跳转到论坛的首页,不正确就返回登录页;
这里的自动跳转,就是重定向的意思。或者可以说,重定向就是,在网页上设置一个约束条件,条件满足,就自动转入到其它网页、网址。

三、网页定向

我们在网站建设中,时常会遇到需要网页重定向的情况:

1.网站调整(如改变网页目录结构);
2.网页被移到一个新地址;
3.网页扩展名改变(如应用需要把.php改成.Html或.shtml)。

这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。

自己的认识

就是我去问浏览器 ,谁可以告诉我问题的答案 浏览器返回给我一个url地址
就是说你去问她它可以告诉你 ,这就是重定向;(由路由器来进行跳转)

如何进行重定向

在这里插入图片描述

重定向的特点

地址栏:显示新的地址
请求次数:2次
请求域中的数据会丢失,因为是2次请求
在SpringMVC 中

import javax.servlet.http.HttpSession;

@Controller
public class ModelTest1 {
    @RequestMapping("/m1/hello")
   public  String test(HttpServletRequest request, HttpServletResponse response){
       HttpSession session = request.getSession();
       System.out.println(session.getId());
       return "redirect:/index.jsp";
   }
}

在之前的servlet中:

//重定向:注意路径问题,如果不带/r会报404
    resp.sendRedirect("/r/success.jsp");

会话域 请求域 上下文域

java中的域对象

1.什么是域对象

域对象主要用在web应用中,负责存储数据,通俗的讲就是这个对象本身可以存储一定范围内的所有数据,通过它就能获取和存储数据,
可以理解为万能的一个属性,只要调用它就可以获得这个范围(域)内的想要的数据,也可以修改删除数据,当然也可以给这个域添加数据

2.域对象分类

根据 作用域的不同主要分为:

PageContext域 (当前页面有效)
HttpServletRequest域(当前请求有效 转发可以实现不同页面)
session域(在开浏览器和关浏览器)
ServletContext域(服务器存的)
从上到下作用域依次增大,可以理解为类似修饰符private 、protected 、默认、public 的等级

3.域对象通用方法

getAttribute(String name) 获取对应的数据
getAttributeNames()获取所有的key
removeAttribute(String name) 移除对应的数据
SetAttribute(String name, Object object) 设置数据

4.具体域对象

ServletContext域
Session域对象
HttpServletRequest请求域对象
PageContext域对象
在这里插入图片描述

作用域----会话域

获取session代码:

HttpSession session=request.getSession();

在jsp页面中可以直接使用session,而不必使用request.getSession()得到

会话:一个浏览器和服务器之间发生的一系列的请求和响应的过程

SessionID来标识同一个会话的请求

用Session对象来保存该会话的状态信息

服务器决定与某个客户端开启一个会话,创建一个Session对象通过Cookie或者URL参数形式将SessionID传给客户端

如果客户端在一定时间内没有操作,服务器会自动终止会话,即删除Session对象

Session作用范围:

该次会话一直有效(一定时间内:一般为默认30分钟)

有效时间可修改:通过Tomcatweb.xml标签修改

或配置文件web-xml添加30

一次修改有效时间

注:前者为整个tomcat有效时间都做了修改,后者为当前所在项目有效时间做了改变

SessionID原理概述:

浏览器发送一次请求到服务器,服务器首先判断,该请求是否携带一个SessionID值
如果这次请求没有携带一个SessionID值,服务器就知道了,这是第一次来访问该服务器
浏览器与该服务器开始建立会话
服务器会在相应请求的同时,将产生一个SessionID,作为该次会话的标识
再把这个SessionID发给浏览器,浏览器就拥有一个SessionID了
当再次访问该服务器时,浏览器会携带那个SessionID,被传到服务器
服务器首先判断该请求是否携带一个SessionID值,此时有了,代表这不是一个新的会话的请求
如果浏览器两个请求之间的时间太长,超出服务器等待的时间,服务器会删除这个session对象
删除后,再次发送到该服务器,因为服务器里没有这个session对象了,就不能判断请求是否携带SessionID值
也就是说判断不出来,就认为这是一个新的会话开始,又会产生一个SessionID,作为这次新会话的标识
又把这个SessionID发给浏览器,浏览器就拥有一个新的SessionID了
在会话开始时,服务器会自动分配一个空间(session对象),SessionID就在session对象里

过滤器Filter:(转载)

filter翻译为过滤器。在web项目中,经常需要在正式处理请求前,做一些特殊的处理或常用的例程,于是就发明了这个filter。

作用:
过滤非法文字和信息。
设置统一字符编码。
对用户进行登录验证 。
改变图片文件格式。
对相应内容做压缩处理。
对XML的输出使用XSLT来进行转换。
步骤:

第一步:通过在web.xml中的元素和元素来配置filter,以决定用户请求的URL应被哪些filter类来处理一次。

<!--web.xml配置过滤器-->
  <filter>
        <filter-name>FirstFilter</filter-name>
        <!--配置FirstFilter过滤器类-->
        <filter-class>com.yy.servlet.web.filter.FirstFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FirstFilter</filter-name>
        <!--(代表整个web项目都要过滤,如果指定某个url就只过滤这个url)-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
步骤二:编写filter的Servlet类。

我们的filter类需要实现父接口javax.servlet.Filter。
实现父接口的各个方法。包括init(),doFilter(),destroy(),这3个方法。
init()方法和destroy()方法分别用来初始化和销毁时调用。
init()方法在 Filter 生命周期中仅执行一次。服务器启动时就会执行。
destory()方法在Filter的生命周期中仅执行一次,即Web容器卸载Filter对象之前调用它。主要做释放资源的操作。
对doFilter(req,resp,chain)方法操作。
chain.doFilter(request,response)。
**注意:**chain参数则通过调用自己的doFilter方法来将请求向下传递,如果没有调用doFilter()方法,则相当于阻止了本次请求。

'
/*这个是FirstFilter过滤器类*/
package com.yy.servlet.web.filter;
 
import java.io.IOException;
 
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
 
public class FirstFilter implements javax.servlet.Filter{
 
    public void destroy() {
        // TODO Auto-generated method stub
 
    }
 
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain filter) throws IOException, ServletException {
        /*如果没有调用doFilter()方法,则相当于阻止了本次请求。*/
        filter.doFilter(request, response);
 
        System.out.println("filter is ok");
    }
 
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
 
    }
 
}

转发

1.请求转发
1.概述:让服务器跳转到另一个资源上
2.方法
1.request.getRequestDispatcher(“跳转资源路径”).forward(request, response);
是服务器进行转发 而不是浏览器转发 所以 浏览器的地址是不会变的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值