前言
这一篇是接着上一篇的继续
页面跳转与重定向(之中的一个)
在上一篇中。 介绍了在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 端口
方法二: 假设已经安装完毕。 能够改动confserver.xml 的以下配置
这样就能够通过以下方式訪问了:
http://myweb/myproject
2. 怎样去除项目名称。
最方便的訪问方式应该就是直接输入 域名就进入了。
http://myweb
方法一: 改动 confserver.xml 配置
在host 中加入例如以下Context 的配置:
方法二: 假设不用法一的话, 默认状况上面的地址, 会进入 webappsROOTindex.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
下载
有了方法一的介绍。 这个组件的使用就非常easy了。
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 中放入一个旧项目同名的项目,里面没什么内容,专门用来做重定向。