java 中关于二级域名的重写

今天在论坛里看到一兄弟在问二级域名URL的问题,以前我登录其它网站时也会看到这种情况,但一直没有仔细想过这问题,今天在Toilet的时候顺便想了一下,具体还没有实现,等我有时间的时候再试试看,我想应该没有什么问题吧。
1.在IE输入
http://www.bandguoduo.com/blog/user=kkcheng 后IE自动转成 http://kkcheng.bandguoduo.com
这个可以通过URLRewrite应该可以实现,具体我就不说了,可以去网上搜一下。
2.在IE中输入
http://kkcheng.bandguoduo.com 后IE地址栏不变 但实现访问的是http://www.xxx.bandguoduo/blog/user=kkcheng ,这个就要通过一个Filter去处理了,根据输入的URL在Filter中重装去拼装URL让它forward到实际的资源。

正好以后可以在自己的项目中用到,准备自己做个网站玩玩! 这里我代码就省了,因为没有时间,上班太忙了...如果兄弟们有更好的实现方法请指点!


[color=blue]以下为在网上找到的URLRewrite的相关资料:[/color]

1:什么是UrlRewrite
UrlRewrite 是将静态页面转换为动态页面的一种技术.例如:您网站页面是http://www.yourdomain.com/news/docread.aspx?id=123。使用UrlRewrite转换后可以以http://www.yourdomain.com/news/123.html来访问.这样完成了网站伪静态的功能。其实,UrlRewrite技术就是一个过滤器。它将会过虑用户的所有请求,符合规则的便对其进行重定向。
2:UrlRewrite技术的优点
(1)、便于搜素引擎收录
由于某些搜索引擎不能支持动态页面的抓取,大量的信息就不能被潜在的用户搜索到。用UrlRewrite技术你可以把http://server/news.asp?id=111变成http://server/news/111.htm这样他们就会被搜索引擎收录了。
(2)、隐藏技术实现,提高网站的安全性
每个页面都挂着鲜明的.asp/.jsp这种开发语言的标记,可以一眼让人看出你的网站使用什么语言做的。而且在改变网站的语言的时候,你需要改动大量的链接。而且,一个页面修改了扩展名,他的pagerank也会随之消失,从头开始。我们可以用UrlRewrite技术隐藏我们的实现细节,这样修改移植都很方便,而且完全不损失pagerank。
(3)、美化URL
对于追求完美主义的网站设计师,即使是网页的地址也要看起来简洁明快。形如 http://server/news.asp?channel=3&id=111 的网页地址,肯定是上不了完美主义者的法眼的,用UrlRewrite技术,你可以把他变成http://server/news/3/111.htm 。
3、UrlRewrite技术的实现
(1)将UrlRewrite的jar包(urlrewrite-2.6.0.jar)拷贝到项目工程lib目录下。
(2)在工程web.xml文件中加入过滤器代码。如下:

rewriteFilter
org.tuckey.web.filters.urlrewrite.UrlR ewriteFilter


rewriteFilter
/*

(3)在工程WEB-INF目录下新建urlrewrite.xml文件,代码如下:

"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">


^/servlet/([a-z]+)/([a-z]+)\.html$
/servlet/Guide?module=$1&submodu le=$2


^/urlRewrite/([a-z]+)\.html$
$1.jsp?module=$1


其中:
里的内容为地址栏里显示的地址。
里的内容为真实的地址。
例如上面的例子:
地址栏里显示的地址为:
http://localhost:8080/Test/servlet/parm1/parm2.htm l
实际地址为:
http://localhost:8080/Test/servlet/Guide?module=pa rm1&submodule=parm2
地址栏里显示的地址为:
http://localhost:8080/Test/ urlRewrite /parm.html
实际地址为:
http://localhost:8080/Test/ urlRewrite/ parm.jsp
注1:页面中不能加目录,例如(urlRewrite)除非根目录下有urlRewrite目录,即:parm.jsp页面在urlRewrite目录下才可。

注2:urlRewrite技术主要是用正则表达式实现的匹配转换的,所以,要想了解学习urlRewrite技术需要了解一下java的正则表达式。

相当于 的逆向


实例:

1. servlet:

package com.show;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowServlet extends HttpServlet {

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String s = request.getParameter("s");
String n = request.getParameter("n");
request.setAttribute("suc", s);
request.setAttribute("name", n);
request.getRequestDispatcher("suc.jsp").forward(request, response);
}

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}


2. urlrewrite.xml


"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">


/show_(.*)_(.*)
/show?s=$1&n=$2


show\?s=(.*)&n=(.*)
show_$1_$2




3. web.xml


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

UrlRewriteFilter

org.tuckey.web.filters.urlrewrite.UrlRewriteFilter


logLevel
WARN



UrlRewriteFilter
/*


ShowServlet
com.show.ShowServlet



ShowServlet
/show



index.jsp




4. index.jsp

<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>



My JSP 'index.jsp' starting page



aaaa
">bbbb




5. suc.jsp

<%@ page language="java" pageEncoding="GBK"%>



My JSP 'suc.jsp' starting page



<%=request.getAttribute("suc") %>
<%=request.getAttribute("name") %>




注意:4. index.jsp 中的:">bbbb 标签里的属性href必须写成 不然

2. urlrewrite.xml 中的配置项会不认的。


参考资料2:
使用UrlRewrite Filter对url进行美化转换处理
1.下载
http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.4-src.zip
http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.4.zip
相关联接:http://tuckey.org/urlrewrite/

2.解压得到urlrewrite-2.4.jar和urlrewrite.xml.

3.创建一个测试用的webapp.
先建立一个Servlet,来输出request.getQueryString().
并将这个servlet映射为/*
4.引入urlrewrite-2.4.jar,
编辑web.xml,加入


UrlRewriteFilter
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter

logLevel
DEBUG



UrlRewriteFilter
/*


5.在WEB-INF目录下创建urlrewrite.xml,然后定义一些url重写规则。
然后就可以在webapp中使用url重写了。
例如:

"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">



/view/([0-9]+).html
/test.jsp?str=$1



6.有一个特殊的url,/rewrite-status是用来显示urlrewrite的状态信息的。

UrlRewrite Filter确实简单实用且功能强大,不错。
Tomcat自带的Example里也有url重写的例子,不过功能比较弱。

参考http://tuckey.org/urlrewrite/
http://tuckey.org/urlrewrite/manual/guide.html
http://tuckey.org/urlrewrite/manual/index.html

你可能感兴趣的:(java 中关于二级域名的重写)