页面跳转与重定向(之二)

前言

这一篇是接着上一篇的继续

页面跳转与重定向(之一)

在上一篇中, 介绍了在html,js 和JSP中如何跳转和重定向。

基本是在页面层级进行页面的跳转, 进入一个页面后跳入另一个页面。

这一篇将从项目和服务端来看看有可能在实际的项目中使用到的状况。

旧的地址跳转到新的地址

在系统开发过程中, 新旧系统并存是一种常见的处理方法,新旧系统有着各自独立的域名地址。 、

当新系统开发完成的时候,就需要把旧地址的域名导到新地址中了。

方法之一 就是进行DNS 修改映射了。

如果系统没有域名, 只有IP, 或是不想修改DNS 的话, 就可以在旧系统中修改主页面。最简单的就是类似:

<TITLE>New System</TITLE>
<META name="description" content="New System Forward">
<META name="keywords" content="New System">
<META name="robots" content="index,follow,all">
<meta http-equiv="refresh" content="0; URL=http://newurl">

当然也可以使用上一篇中提到的其他方式。

Tomcat 中的地址设定

Tomcat 默认安装的状况下(port:8080), 项目部署在webapps 目录下。

举例: 这里的域名myweb ,这里的项目名 myproject ,

本地的访问地址就是 :  http://IP:8080/myproject.

域名映射后地址就是: http://myweb:8080/myproject

1.  如何去除端口?

方法一: 在安装是设置成 80 端口

方法二: 如果已经安装完成, 可以修改conf\server.xml 的下面配置

修改成 80 就可以了。

这样就可以通过以下方式访问了:

http://myweb/myproject

2. 如何去除项目名称。

最方便的访问方式应该就是直接输入 域名就进入了。

http://myweb

方法一: 修改 conf\server.xml 配置

在host 中添加如下Context 的配置:

方法二: 如果不使用方法一的话, 默认状况上面的地址, 会进入 webapps\ROOT\index.html 这个文件。

所以使用以上的方法修改这个页面的跳转应该就能达到所需要的效果了。

二级域名的重定向

新系统虽然已开发完成, 但是还是想有些旧的模块功能使用旧的系统。

这样的话, 访问新系统的某些url 的时候,重定向到旧的页面地址中去。

以访问  http://myweb/old 的方式访问旧的地址(比如旧的地址就是http://www.csdn.net)

方法一:  增加 filter

步骤一: 新增 Filter 的java 文件, 文件名  UrlRewriteFilter.java, 内容如下

/*
 * @author: oscar999
 * @Date:2014-5-29
 * Copyright (c) oscar999. All rights reserved.
 */
package com.oscar999;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/** <description>
 *
 * @see
 * @see
 *
 * @version  0.1,  2014-5-29
 * @author   oscar999
 * @since    JDK1.5
 */
public class UrlRewriteFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
			ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		HttpServletResponse httpResponse = (HttpServletResponse) response;
		String requestPath = httpRequest.getRequestURI();
		if(requestPath.indexOf("/old")>0)
		{
			//request.getRequestDispatcher("/redirect.html").forward(request, response);
			httpResponse.sendRedirect("http://www.csdn.net");
			return;
		}
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

}

步骤二:  在web.xml 中 添加filter 的定义

	<filter>
	      <filter-name>UrlRewriteFilter</filter-name>
	      <filter-class>com.oscar999.UrlRewriteFilter</filter-class>
	</filter>
	<filter-mapping>
	          <filter-name>UrlRewriteFilter</filter-name>
	          <url-pattern>/old</url-pattern>
	</filter-mapping>      

说明:

1. 在Java 中,满足转向的状况, 一定要return 。 否则会报 IllegalStateException错误

2. 可以比较一下, forward 和 redirect 的使用差别 ?

1)  调用的对象不同(request , response)

2)  使用的场景不同(是否是本项目中的文件)

3)  url 的地址的变化

3. 转向的逻辑的可以通过init-param 配置在filter 的 xml 中

	   <init-param>
	       <param-name></param-name>
	        <param-value></param-value>
	    </init-param>  

在filter 的init方法 中,通过 Enumeration<?> e = filterConfig.getInitParameterNames(); 读到。

这样的话, 就可以灵活配置转向的逻辑了。

方法二:  直接使用 urlwrite 组件

其实上面的方式, 已经有共用的组件可以用了。

组件的介绍地址 :

http://tuckey.org/urlrewrite/

目前最新版的下载地址:

http://urlrewritefilter.googlecode.com/files/urlrewritefilter-4.0.3.jar

也可以到:

https://onedrive.live.com/redir?resid=5B4EDBCD9EF1AB6B!192&authkey=!AI-dKU740gOo29I&ithint=file%2c.jar

下载

有了方法一的介绍, 这个组件的使用就很容易了。

1. 下载jar , 放入项目路径中

2. 配置 web.xml

<filter>
	         <filter-name>UrlRewriteFilter</filter-name>
	         <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
	</filter>
	<filter-mapping>
	          <filter-name>UrlRewriteFilter</filter-name>
	          <url-pattern>/*</url-pattern>
	</filter-mapping>

3. 在web.xml 的同路径下,添加 urlrewrite.xml 文件, 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<urlrewrite>
    <rule>
        <from>/old</from>
        <to type="redirect">http://www.csdn.net</to>
    </rule>
</urlrewrite>

这里可以配置很多的转向逻辑,不过有上下层级关系时,也就是既有二级域名又有三级域名的话, 配置起来会有一些问题。

不难理解三级在二级的基础上又换了一次, 导致url 会不对。

另外, 如果项目使用的是 http://myweb/myproject 这种通过项目名访问的话,

映射旧的地址可以在 tomcat/webapps 中放入一个旧项目同名的项目,里面没什么内容,专门用来做重定向。

页面跳转与重定向(之二)

时间: 2024-10-12 15:56:26

页面跳转与重定向(之二)的相关文章

页面跳转与重定向

前言 html ,js 可以实现页面跳转. jsp , asp, php 也有各自页面跳转与重定向的方式. 下文针对js 和jsp 的页面跳转实现方式进行一个总结. html 页面跳转方式 可以使用html 的meta 标签实现页面的跳转. <!--Add by oscar999--> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD>

Flask实战第5天:页面跳转和重定向

GET和POST请求 在网络请求中有许多请求方式,比如GET, POST, DELETE, PUT等,最常用的就是GET和POST GET 只会在服务器上获取资源,不会更改服务器的状态,这种请求方式推荐使用GET GET请求把参数放到url中,通过'?xx=xxx'的形式传递 POST 给服务器提交一些数据或者文件,一般POST请求是会对服务器的状态产生影响 POST请求把参数放到Form Data中 在flask的route中默认使用的是get方法,用method参数来指定某个url能够使用的

页面跳转和重定向

1 from flask import Flask 2 #导入重定向和反转模块 3 from flask import redirect,url_for 4 5 app = Flask(__name__) 6 7 @app.route('/') 8 def index(): 9 login_url = url_for('login') 10 return redirect(login_url) 11 return '这是首页' 12 13 @app.route('/login/') 14 def

解决iframe重定向让父级页面跳转

原文:http://www.jb51.net/article/40583.htm 有内嵌iframe的页面,当session过期时,点击连接重定向后的跳转会在iframe中跳转,在登录页面中加入下面的代码,就会在最外层页面跳转 原文:http://www.cnblogs.com/JemBai/archive/2011/10/09/2203429.html <script language="JavaScript"> if (window != top) top.locati

MVC页面重定向&#39;页面跳转

MVC页面重定向,主要有以下几种形式: 1.Response.Redirect();方法 [csharp] view plain copy using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcDemo.Controllers { [HandleError] public class HomeController

iOS页面间跳转的性能优化(二)

续言 在页面间跳转的性能优化(一)中介绍了一些基础知识,讲述了情形一与情形二的优化方式及原理,但有许多人对情形二最后两种处理方式的原理表示不理解,不清楚处理过程,接下来会详细分步地讲述这两种方式的原理,如果你还没看过页面间跳转的性能优化(一),请先阅读. 点击下载Demo,或https://github.com/IOSDelpan/SmoothTransitionDemo. 页面间的跳转大致分为几个任务:1.生成将即显示的页面视图:2.生成我们所需要的UI元素:3.生成页面跳转的动画:而这几个任

页面跳转方法(success和error)和重定向

页面跳转 在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面.系统的\Think\Controller类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交. 使用方法很简单,举例如下: $User = M('User'); //实例化User对象 $result = $User->add($data); if($result){ //设置成功后跳转页面的地址,默认的返回页面是$_SERVER['H

TP 页面跳转success 和 error 以及重定向功能

TP 系统的\Think\Controller类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交. $User = M('User'); //实例化User对象 $result = $User->add($data); if($result){ //设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER'] $this->success('新增成功', 'User/list'); } else { //错误页面的默认跳转页

jQuery Mobile学习之grid、等待显示的ajax效果、页面跳转、页面跳转传递参数等(二)

Index.cshtml <!-- Start of second page --> <section data-role="page" id="bar"> <header data-role="header"> <h1>Bar</h1> </header> <!-- /header --> <div role="main" class=