html 页面跳转方式
可以使用html 的meta 标签实现页面的跳转。
<!--Add by oscar999-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Author" CONTENT="oscar999">
<meta http-equiv="refresh" content="0; URL=http://www.csdn.net">
<script>
</script>
</HEAD>
<BODY>
This is Test Page
//方法二js跳转
<script>
window.location="http://www.csdn.net";
</script>
//方法三 navigate
<script>
window.navigate("http://www.csdn.net");
</script>
</BODY>
</HTML>
JSP跳转方式
JSP 跳转方式大约有三种:
1. response.sendRedirect(“newurl”);
-- 此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)
--跳转后浏览器地址栏变化
--如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了
如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;
2. response.setHeader("Location","newurl");
response.setStatus(302);
response.setHeader("location","newurl");
这种使用方式要结合 setStatus(302), 302 这个状态码就是告诉浏览器要重定向了。
- 此语句前不允许有out.flush(),如果有,页面不会跳转。
- 跳转后浏览器地址栏变化
- 此语句后面的语句执行完成后才会跳转
3. <jsp:forward page="newurl" />
此语句前不允许有out.flush(),如果有,会有异常:
跳转后浏览器地址栏不变,但是只能跳到当前主机下
此语句后面的语句执行完成后才会跳转
跳转后得路径变为当前路径,图片不是绝对路径将无法显示
<!-- by oscar999 -->
<!-- This is a.jsp -->
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Before: This is a.jsp! <br>
<%
//response.sendRedirect("b.jsp");
//response.setStatus(302);
//response.setHeader("location","b.jsp");
%>
<jsp:forward page="b.jsp"/>
After: This is a.jsp!
</body>
</html>
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, 内容如下
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
也可以到: