今天在论坛里看到一兄弟在问二级域名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到实际的资源。
正好以后可以在自己的项目中用到,准备自己做个网站玩玩! 这里我代码就省了,因为没有时间,上班太忙了...如果兄弟们有更好的实现方法请指点!
以下为在网上找到的URLRewrite的相关资料:
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文件中加入过滤器代码。如下:
<filter>
<filter-name>rewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlR ewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>rewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(3)在工程WEB-INF目录下新建urlrewrite.xml文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">
<urlrewrite>
<rule>
<from>^/servlet/([a-z]+)/([a-z]+)\.html$</from>
<to type="forward">/servlet/Guide?module=$1&submodu le=$2</to>
</rule>
<rule>
<from>^/urlRewrite/([a-z]+)\.html$</from>
<to type="forward">$1.jsp?module=$1</to>
</rule>
</urlrewrite>
其中:
<from></from>里的内容为地址栏里显示的地址。
<to></to>里的内容为真实的地址。
例如上面的例子:
地址栏里显示的地址为:
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的正则表达式。
<outbound-rule> 相当于 </rule>的逆向
实例:
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
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite use-query-string="true">
<rule>
<from>/show_(.*)_(.*)</from>
<to>/show?s=$1&n=$2</to>
</rule>
<outbound-rule>
<from>show\?s=(.*)&n=(.*)</from>
<to>show_$1_$2</to>
</outbound-rule>
</urlrewrite>
3. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
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">
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ShowServlet</servlet-name>
<servlet-class>com.show.ShowServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowServlet</servlet-name>
<url-pattern>/show</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
4. index.jsp
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<a href="show_chill_Yang">aaaa</a>
<a href="<c:url value="show?s=chill&n=Yang"></c:url>">bbbb</a>
</body>
</html>
5. suc.jsp
<%@ page language="java" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'suc.jsp' starting page</title>
</head>
<body>
<%=request.getAttribute("suc") %>
<%=request.getAttribute("name") %>
</body>
</html>
注意:4. index.jsp 中的:<a href="<c:url value="show?s=chill&n=Yang"></c:url>">bbbb</a> 标签里的属性href必须写成<c:url> 不然
2. urlrewrite.xml 中的配置项<outbound-rule></outbound-rule>会不认的。
参考资料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,加入
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>DEBUG</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.在WEB-INF目录下创建urlrewrite.xml,然后定义一些url重写规则。
然后就可以在webapp中使用url重写了。
例如:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<!-- https://urlrewrite.dev.java.net/manual/3.0 -->
<urlrewrite>
<rule>
<from>/view/([0-9]+).html</from>
<to type="forward">/test.jsp?str=$1</to>
</rule>
</urlrewrite>
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
分享到:
相关推荐
在 doFilter 方法中,首先从请求中获取域名和请求路径,然后判断是否是三级域名,如果是三级域名,则获取域名和路径,否则,使用默认的域名和路径。最后,使用 HttpServletRequest 的 setAttribute 方法将域名和路径...
以上是关于动态二级域名配置的基本知识,结合提供的资源和文档,用户可以学习并实践如何在Apache和Tomcat环境中设置和管理二级域名。通过这种方式,可以有效地分配和管理不同的Web服务,提升网站的组织结构和用户...
4. **URL重写**:为了实现友好的二级域名访问,系统可能利用了URL重写技术。例如,通过Apache的mod_rewrite模块,可以将请求的URL转换为服务器可识别的内部路径,从而隐藏实际的目录结构和文件名。 5. **用户权限**...
在互联网应用中,动态二级域名的配置可以为用户提供更灵活、个性化的访问体验。本教程将详细解释如何通过Apache和Tomcat来实现这一功能。 首先,我们需要准备Apache服务器和Tomcat应用服务器。确保已正确安装这两个...
计算机二级等级考试试题涵盖多个IT基础知识领域,包括数据库管理、编程语言、操作系统、网络和软件应用等。以下是根据题目内容解析的部分知识点: 1. Access查询类型:Access支持选择查询、交叉表查询、参数查询、...
描述部分强调了文档内容是关于Java的面试和笔试题目的集合。这样的描述意味着文档将会提供一系列问题及其解答或提示,旨在帮助读者准备Java相关的技术面试。 #### 标签:“Java面试笔试机试题大汇总” 标签再次...
- **对象**:是现实世界中事物的具体体现,在Java中,每个对象都有自己的状态和行为。 - **类**:是对一组具有相同属性和行为的对象的抽象描述,它是Java编程的基本单位之一。 #### 三、定义类与创建对象 1. **...
- Java EE:用于开发企业级应用,如Web应用和服务端应用。 - Java ME:主要用于嵌入式系统和移动设备的应用开发。 - **JVM的含义及作用**: - JVM全称为Java Virtual Machine,即Java虚拟机,是执行Java字节码的...
在计算机二级等级考试中,涉及的知识点广泛,涵盖了操作系统、编程语言、网络、数据库、软件应用等多个领域。以下是对部分题目及其知识点的详细解析: 1. 插入菜单中的“日期和时间”命令,是Word中常用的功能,...
1. 关于运算符:在Java或C++等编程语言中,运算符`?`(条件运算符)具有三个操作数,它是一个三元运算符,语法为`condition ? expr1 : expr2`,根据条件的真假来决定执行哪个表达式。 2. C语言中的取模运算符 `%`:...
以上知识点涵盖了数据库管理、编程语言(如Java和C)、Web技术、数据库设计、操作系统、软件工程等多个方面,这些都是计算机二级考试中常见的考点。学习和理解这些知识点对于准备此类考试至关重要。
计算机二级等级考试主要涵盖数据库系统、网络通信、编程语言、数据结构、操作系统等多个方面的知识。以下是对题目中涉及的知识点的详细解释: 1. 数据库系统三级模式结构:数据库系统通常包括模式(逻辑视图)、外...
以上内容详细介绍了计算机二级考试中涉及的一些核心概念和编程实践,涵盖了事件处理、面向对象、数据库操作、网络通信、操作系统、文本编辑器的使用以及编程语言的基础知识。这些知识点对于准备计算机二级考试的考生...
在计算机二级等级考试中,涉及的知识点广泛且深入,涵盖了编程基础、操作系统、数据库、网络、软件工程等多个领域。以下是一些重点知识点的详细解析: 1. 二维数组的创建:在Java等语言中,创建二维数组时,需要...
这些题目涵盖了计算机基础知识的多个方面,包括网络、操作系统、编程...以上知识点是根据提供的题目内容进行的详细解析,涵盖了许多计算机基础知识,对于准备计算机二级等级考试的考生来说,这些都是重要的复习内容。
### 计算机二级等级考试知识点解析 #### 1. 绘图程序中的方法重定义 - **知识点**: 在Java中进行图形界面编程时,为了能够在`JPanel`上绘制图形,通常需要创建一个`JPanel`的子类,并在这个子类中重写绘图方法。...
2. **抽象方法**:在JAVA中,抽象方法是指在抽象类中声明但没有具体实现的方法。它通常用于定义接口行为或规范,子类必须重写这些抽象方法以提供具体的实现逻辑。 3. **事件**:在JAVA中,事件是指用户或其他程序...
这些题目涵盖了计算机二级等级考试中的多个知识点,主要包括编程基础、数据结构、数据库、操作系统、网络和网页设计等方面。以下是这些知识点的详细解释: 1. 表达式解析:题目中的选项涉及到C语言的表达式求值规则...
3. **Java 创建线程**:Java 中创建线程有两种主要方式,一是继承 `Thread` 类并重写 `run()` 方法,二是实现 `Runnable` 接口并提供 `run()` 实现。`Sleep()` 和 `wait()` 是线程控制的方法,`sleep()` 使当前线程...