- 浏览: 159140 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
一凡蹈客:
really good
百万级访问网站前期的技术准备 -
lllt:
这种效果实际上不需要任何js的
加载图片时由模糊变清楚原理---类似QQ空间的相册的效果 -
JavaStudyEye:
如何在三个月内获得三年的工作经验------实际的很 -
JavaStudyEye:
...
如何在三个月内获得三年的工作经验------实际的很 -
filish108:
如何在三个月内获得三年的工作经验------实际的很
通过Filter实现二级域名和URLRewrite
文章分类:Java编程
需求1.1:
一级域名: http://www.iteye.com/
二级域名: http://firefly.iteye.com/
这里firefly其实会Mapping到用户ID,根据用户ID来展示不用用户的Blog,javaeye是通过Ruby实现的, 那Java如何实现这个Mapping呢?
需求1.2:
我们查看具体的哪一篇文章是通过 http://firefly.iteye.com/blog/785171 来访问的,这个URL是如何传参数的呢?
思路2:
A. 通过过滤器获得二级域名.(eg. firefly)
B. 对URL进行重写Rewrite.
实现3:
3.1 创建一个URLFilter过滤器,对所有的请求进行过滤
package com.firefly.web;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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 com.firefly.web.URLRewriter.URLMapping;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
/**
* Servlet Filter implementation class URLFilter
*/
public class URLFilter implements Filter {
List <urlmapping>urlPatternList;
public URLFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
/**
* 初始化
*/
String configPath=fConfig.getInitParameter("configPath");
String realConfigPath=fConfig.getServletContext().getRealPath(configPath);
FileInputStream input;
byte buff[]=null;
try {
input = new FileInputStream(realConfigPath);
buff=new byte[input.available()];
input.read(buff);
input.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 通过开源XStream来解析XML,并转化成Java对象
*/
XStream xstream = new XStream(new DomDriver());
xstream.alias("url", URLMapping.class);
xstream.alias("URLList", ArrayList.class);
urlPatternList=(List)xstream.fromXML(new String(buff));
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
/**
* 获得服务器名称,如:firefly.iteye.com/
*/
String serverName=request.getServerName();
int endIndex=serverName.indexOf(".");
/**
* 获得二级域名
* 二级域名一般是一个ID, 如:firefly
*/
String secondDomainName=serverName.substring(0, endIndex);
request.setAttribute("userID", secondDomainName);
if(secondDomainName.equalsIgnoreCase("www")){
httpServletRequest.getRequestDispatcher( "/index.html")
.forward(request, response);
return;
}else{
String realPath=this.getRealPath(httpServletRequest.getRequestURI());
httpServletRequest.getRequestDispatcher("/"+realPath)
.forward(request, response);
return;
}
}
/**
* 将URI转换成真正的请求URL
* e.g firefly.iteye.com/blog/785171 ->
* firefly.iteye.com/dispatcher.do?action=displayBlog&blogId=785171
* @param URI
* @return
*/
private String getRealPath(String URI){
for(URLMapping url:urlPatternList){
Pattern pattern=Pattern.compile(url.getPattern());
Matcher matcher=pattern.matcher(URI);
if(matcher.find()){
String reqPara=url.getReqParameter();
for(int i=1;i
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>parseDomain</display-name><filter><description></description><display-name>URLFilter</display-name><filter-name>URLFilter</filter-name><filter-class>com.firefly.web.URLFilter</filter-class><init-param><param-name>configPath</param-name><param-value>/WEB-INF/URLRewriter.xml</param-value></init-param></filter><filter-mapping><filter-name>URLFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list></web-app>
3.4 在/WEB-INF下创建URLRewriter.xml
<?xml version="1.0" encoding="utf-8" ?><urllist><url><pattern>/order/(\d*)/(\d*)</pattern><reqparameter>dispatcher.do?action=order&productId=${1}&number=${2}</reqparameter></url><url><pattern>/blog/(\d*)</pattern><reqparameter>dispatcher.do?action=displayBlog&blogId=${1}</reqparameter></url></urllist>
附言: 如果要在本地测试二级域名,需要在hosts文件中配置如下参数(C:\WINDOWS\system32\drivers\etc\hosts)
127.0.0.1 firefly.iteye.com
http://firefly.iteye.com/blog/821715</urlmapping>
发表评论
-
Linux系统中memcache和memcached安装方法
2011-08-23 02:29 1075Memcache 是一 ... -
apache不解析php文档?提示需要下载
2011-08-22 06:25 1225作者:陆文举 http://blog.luwenju.c ... -
Linux上全源码安装Apache、MySQL、PH
2011-08-21 20:11 1239Linux上全源码安装Apache、MySQL、PHP、W ... -
安装PHP常见错误解决error
2011-08-21 19:48 1297PHP的安装虽然有时候很简单,可是如果应用一多,我们安装起 ... -
php需要学的真多,一个php牛人的需要的经历
2011-02-11 18:12 1375php需要学的真多。因为触级的太多。一个php牛人的需要的 ... -
Firebug基本知识推广
2010-11-25 19:33 653... -
将 WordPress 文章同步发送到 Twitter,新浪微博,搜狐微博,QQ微博,嘀咕,开心,人人
2010-11-21 00:54 3397这两天没事,Forece 又开始折腾了,想把自己用 Word ... -
Smarty foreach详解
2010-11-11 09:44 1098Smar ... -
30分钟速通,PHP模板引擎Smarty
2010-11-09 20:10 162130分钟速通,PHP模板引擎Smarty 分类: ... -
PHP5面向对象学习教程(7月十五写的)
2010-10-14 07:31 759PHP5面向对象教程.CHM (41.83 KB) 下 ... -
PHP中 __FILE__ 和 dirname(__FILE__) 使用
2010-10-14 06:58 1234__FILE__ 返回网站根目录 ... -
建立host 文件桌面快捷方式
2010-09-27 19:10 1250A) 关于建立 host 文件记事本打开的快捷方式: ... -
Apache httpd.conf详解
2010-09-25 13:57 1122Apache服务器的设置文件 ... -
memcache在telnet下的使用说明
2010-09-15 19:35 1436memcached Telnet Interf ... -
smarty整理总结
2010-09-13 18:19 7911.smarty的配置 首先,使用smarty第 ... -
从源码安装apache2,遇到错误:cannot install `libaprutil-1.la' LAMP 2010-07-23 20:57:15 阅读3
2010-09-08 10:59 920从源码安装apache2,遇到错误:cannot ins ... -
Tortoise SVN 客户端 基本用法
2010-09-07 20:07 954Tortoise SVN 客户端 基 ... -
phpMyAdmin安装配置方法全过程,及问题解决
2010-01-28 10:24 1238今天调试PHP数据库Mysql ... -
找出占用你端口的罪魁祸首
2010-01-03 14:52 949做开发的同学经常会碰到一个恼人的问题,那就是启动服务器时会抛出 ... -
PHP常见面试题目深入解答分析
2009-12-28 23:39 1308很久没有更新了,继续上一篇文.再来讨论几道常见的试题.查看 ...
相关推荐
实现二级域名或多级域名的重写,主要通过配置UrlRewrite规则来完成。以下是一个基本的示例: ```xml <rewrite> <match url="^blog/(.*)" /> <action type="Redirect" url=...
Nginx 中 rewrite 实现二级域名、三级域名、泛域名...Nginx 中的 rewrite 模块可以实现二级域名、三级域名、泛域名、路径的重写,并且可以使用 rewrite flags、正则表达式匹配、全局变量等来实现复杂的 URL 重写逻辑。
在IT行业中,URL重定向和动态加载二级域名是两种关键的技术,它们对于构建现代Web应用程序至关重要。下面将详细解释这两个概念及其应用场景。 首先,我们来理解URL重定向(URLRewriter)。URL重定向是一种网络技术...
UrlRewrite是一个强大的URL管理工具,常用于ASP.NET应用程序中,它允许开发者通过自定义规则对网站的URL进行重写和转换。这个技术的核心在于提供更友好的、搜索引擎优化(SEO)的URL,同时也可以帮助解决网站迁移或...
**四、整合应用:在IIS上实现二级域名的伪静态和URL重写** 1. 首先,在IIS服务器上配置好主站点,确保动态内容正常运行。 2. 在域名控制面板中,设置泛解析,将`*`指向主站点的IP地址。 3. 安装并配置IIS的URL ...
标题“urlrewrite2伪静态与使用文档(IIS)”涉及到的是在IIS(Internet Information Services)服务器环境中,使用urlrewrite2模块实现URL重写和伪静态功能的技术内容。URL重写是Web开发中的一项关键技术,它允许...
总结来说,`URLrewrite`是一个强大且灵活的URL管理工具,它通过XML配置文件实现了对URL的重写和重定向,简化了复杂的URL结构,提高了Web应用的可维护性和用户体验。通过深入理解和熟练掌握`URLrewrite`,开发者可以...
URLRewrite是一款强大的URL管理工具,尤其在Java Web应用中广泛使用,它可以帮助开发者实现URL的重写和转换,以达到优化URL、隐藏真实路径、提高SEO效果等目的。在本篇文章中,我们将深入探讨URLRewrite的核心概念和...
UrlRewrite是一个强大的URL重写工具,常用于Java Web应用中...通过UrlRewrite组件,我们可以轻松地实现URL重写和伪静态,从而提升网站的用户体验和SEO效果。理解并熟练运用这些知识,对于开发高质量的Web应用至关重要。
这个模块允许管理员和开发者通过自定义规则来重写和管理网站的URL,从而提高网站的SEO优化、实现友好的URL结构以及解决各种URL相关的路由问题。在本篇文章中,我们将深入探讨IIS URL Rewrite的相关知识点。 一、URL...
2. 配置web.xml:在`web.xml`中添加`Filter`和`Filter-Mapping`,以启动`urlrewrite`过滤器。 3. 编写urlrewrite.xml:这是URL重写的核心配置文件,定义了各种URL重写规则。 4. 测试与调试:运行项目,通过浏览器...
URLRewrite配置和使用 URLRewrite是一种URL重写技术,它可以满足搜索引擎的要求,隐藏技术实现,...通过配置urlrewrite.xml文件和使用outbound-rule,我们可以轻松地重写我们的URL,提高网站的用户体验和可维护性。
简单来说,二级域名重写指的是通过特定的技术手段,将一个二级域名的请求重定向或改写为另一个URL地址的过程。这种技术在实际应用中非常常见,特别是在网站管理和SEO优化方面,能够帮助网站更好地管理其子站点,并...
总结来说,UrlRewrite作为一款强大的URL重写工具,为企业和开发者提供了便利,使得在IIS环境下实现URL优化变得更加简单。通过理解其工作原理和配置方法,我们可以灵活地调整网站的URL结构,以适应不断变化的业务需求...
1. **规则引擎**:IIS URL重写2提供了一套强大的规则引擎,允许管理员通过定义正则表达式和条件来匹配和转换URL。这些规则可以基于HTTP请求的各种属性,如URL、查询字符串、请求方法等。 2. **易用性**:通过图形化...
URL重写(UrlRewrite)是一种网络服务器功能,它允许开发者通过规则来转换客户端请求的URL,从而达到美化URL、增加安全性以及提高搜索引擎优化(SEO)的效果。在实际应用中,通过将复杂的查询参数或路径转化为更加...
URLRewrite组件是ASP.NET开发中的强大工具,通过灵活的规则定义,可以实现URL的优化和管理。理解其工作原理和配置方式,对于提升网站性能、用户体验和SEO优化都具有重要意义。在实际应用中,结合CSS和其他前端技术,...
总之,URL Rewrite Filter是Java Web开发中一个强大且灵活的工具,通过合理的配置,可以帮助我们构建更加优雅和实用的URL结构,提高用户体验和搜索引擎的友好性。在URF-Demo项目中深入研究,你将能够更好地掌握其...
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-...
在IT行业中,URL重写是一种常见的技术,它允许开发者通过改变URL的结构来实现不同的功能,比如美化URL、实现SEO优化、隐藏真实路径等。在这个"**urlrewrite_demo**"项目中,我们将深入探讨如何使用Java来实现URL重写...