- 浏览: 44517 次
- 性别:
- 来自: 广东茂名
最新评论
-
long3ok:
怎么样访问测试jsp页面
java dwr -
千之夜:
很实用。容易理解
java dwr -
herofighter2008:
垃圾贴,解释的什么玩意嘛
java dwr -
likj_sh:
好东西啊,貌似没人顶
java dwr -
wangchangjun:
哥们,你换个浏览器就搞不定 了,每个浏览器的session机制 ...
J2EE 用监听器实现同一用户只能有一个在线
引用
"URL重写,其实就是把带一大堆参数的url,变成一个看上去很规矩的url。
使用Url重写能给你网站带来哪些好处呢?
第一:有利于搜索引擎的抓取,因为现在大部分的搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态的页面。而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面,有利于搜索引擎的抓取
第二:让用户更容易理解,很少有用户去关心你网站的页面的地址,但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美
第三:隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术,给一些想攻击你网站的爱好者提供方便
第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。这样就提高了网站的移植性。
它虽然有这么多的优点,但是也有一点缺点的,因为它是通过过滤器原理来实现的,就意味着又多了一道访问,会多少影响点访问速度的,但这个可以忽略不计"
————以上一段文字内容摘自网络"
好了,接下来就是实际着手了。首先是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>WARN</param-value> </init-param> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <!-- 拦截所有url --> <url-pattern>/*</url-pattern> </filter-mapping>
在WEB-INF下新建一个urlrewrite.xml文件,配置urlrewrite.xml如下:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "\\urlrewrite3.2.dtd"> <urlrewrite> <rule> <!--过滤所有html伪地址(以下配置可以无参数,最多带一个参数,参数可以是中文)--> <from>/([a-zA-Z_0-9]+)/*([a-zA-Z_0-9\u4E00-\u9FA5]*).html</from> <!--实际url如果是jsp,那就配置.jsp,如果是servlet则配置servl的url,如果是action则配置成.do--> <to type="forward">/$1.jsp?parameter_1=$2</to> </rule> </urlrewrite>
接下来可以先导包,jar包在下面的附件里面有。将其解压,将得到的urlrewrite-3.2.0.jar文件拷贝到WEB-INF目录下的lib文件夹中,为了消除urlrewrite.xml配置中的警告,可顺便将urlrewrite3.2.dtd拷贝到WEB-INF目录下的lib文件夹中。
接下来是过滤器的实现类:
package org.tuckey.web.filters.urlrewrite; import org.tuckey.web.filters.urlrewrite.utils.Log; import org.tuckey.web.filters.urlrewrite.utils.ModRewriteConfLoader; import org.tuckey.web.filters.urlrewrite.utils.NumberUtils; import org.tuckey.web.filters.urlrewrite.utils.ServerNameMatcher; import org.tuckey.web.filters.urlrewrite.utils.StringUtils; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URL; import java.util.Date; import java.util.Properties; public class UrlRewriteFilter implements Filter { private static Log log = Log.getLog(UrlRewriteFilter.class); public static final String VERSION = "3.2.0"; public static final String DEFAULT_WEB_CONF_PATH = "/WEB-INF/urlrewrite.xml"; private UrlRewriter urlRewriter = null; private boolean confReloadCheckEnabled = false; private int confReloadCheckInterval = 0; private boolean allowConfSwapViaHttp = false; private long confLastLoad = 0; private Conf confLastLoaded = null; private long confReloadLastCheck = 30; private boolean confLoadedFromFile = true; private String confPath; private boolean confReloadInProgress = false; private boolean statusEnabled = true; private String statusPath = "/rewrite-status"; private boolean modRewriteStyleConf = false; public static final String DEFAULT_MOD_REWRITE_STYLE_CONF_PATH = "/WEB-INF/.htaccess"; private ServerNameMatcher statusServerNameMatcher; private static final String DEFAULT_STATUS_ENABLED_ON_HOSTS = "localhost, local, 127.0.0.1"; private ServletContext context = null; public void init(final FilterConfig filterConfig) throws ServletException { log.debug("filter init called"); if (filterConfig == null) { log.error("unable to init filter as filter config is null"); return; } log.debug("init: calling destroy just in case we are being re-inited uncleanly"); destroyActual(); context = filterConfig.getServletContext(); if (context == null) { log.error("unable to init as servlet context is null"); return; } Log.setConfiguration(filterConfig); String confReloadCheckIntervalStr = filterConfig.getInitParameter("confReloadCheckInterval"); String confPathStr = filterConfig.getInitParameter("confPath"); String statusPathConf = filterConfig.getInitParameter("statusPath"); String statusEnabledConf = filterConfig.getInitParameter("statusEnabled"); String statusEnabledOnHosts = filterConfig.getInitParameter("statusEnabledOnHosts"); String allowConfSwapViaHttpStr = filterConfig.getInitParameter("allowConfSwapViaHttp"); if (!StringUtils.isBlank(allowConfSwapViaHttpStr)) { allowConfSwapViaHttp = "true".equalsIgnoreCase(allowConfSwapViaHttpStr); } if (!StringUtils.isBlank(confReloadCheckIntervalStr)) { confReloadCheckInterval = 1000 * NumberUtils.stringToInt(confReloadCheckIntervalStr); if (confReloadCheckInterval < 0) { confReloadCheckEnabled = false; log.info("conf reload check disabled"); } else if (confReloadCheckInterval == 0) { confReloadCheckEnabled = true; log.info("conf reload check performed each request"); } else { confReloadCheckEnabled = true; log.info("conf reload check set to " + confReloadCheckInterval / 1000 + "s"); } } else { confReloadCheckEnabled = false; } String modRewriteConf = filterConfig.getInitParameter("modRewriteConf"); if (!StringUtils.isBlank(modRewriteConf)) { modRewriteStyleConf = "true".equals(StringUtils.trim(modRewriteConf).toLowerCase()); } if (!StringUtils.isBlank(confPathStr)) { confPath = StringUtils.trim(confPathStr); } else { confPath = modRewriteStyleConf ? DEFAULT_MOD_REWRITE_STYLE_CONF_PATH : DEFAULT_WEB_CONF_PATH; } log.debug("confPath set to " + confPath); // status enabled (default true) if (statusEnabledConf != null && !"".equals(statusEnabledConf)) { log.debug("statusEnabledConf set to " + statusEnabledConf); statusEnabled = "true".equals(statusEnabledConf.toLowerCase()); } if (statusEnabled) { // status path (default /rewrite-status) if (statusPathConf != null && !"".equals(statusPathConf)) { statusPath = statusPathConf.trim(); log.info("status display enabled, path set to " + statusPath); } } else { log.info("status display disabled"); } if (StringUtils.isBlank(statusEnabledOnHosts)) { statusEnabledOnHosts = DEFAULT_STATUS_ENABLED_ON_HOSTS; } else { log.debug("statusEnabledOnHosts set to " + statusEnabledOnHosts); } statusServerNameMatcher = new ServerNameMatcher(statusEnabledOnHosts); // now load conf from snippet in web.xml if modRewriteStyleConf is set String modRewriteConfText = filterConfig.getInitParameter("modRewriteConfText"); if (!StringUtils.isBlank(modRewriteConfText)) { ModRewriteConfLoader loader = new ModRewriteConfLoader(); Conf conf = new Conf(); loader.process(modRewriteConfText, conf); conf.initialise(); checkConf(conf); confLoadedFromFile = false; } else { loadUrlRewriter(filterConfig); } } protected void loadUrlRewriter(FilterConfig filterConfig) throws ServletException { loadUrlRewriterLocal(); } private void loadUrlRewriterLocal() { InputStream inputStream = context.getResourceAsStream(confPath); URL confUrl = null; try { confUrl = context.getResource(confPath); } catch (MalformedURLException e) { log.debug(e); } String confUrlStr = null; if (confUrl != null) { confUrlStr = confUrl.toString(); } if (inputStream == null) { log.error("unable to find urlrewrite conf file at " + confPath); // set the writer back to null if (urlRewriter != null) { log.error("unloading existing conf"); urlRewriter = null; } } else { Conf conf = new Conf(context, inputStream, confPath, confUrlStr, modRewriteStyleConf); checkConf(conf); } } protected void checkConf(Conf conf) { checkConfLocal(conf); } private void checkConfLocal(Conf conf) { if (log.isDebugEnabled()) { if (conf.getRules() != null) { log.debug("inited with " + conf.getRules().size() + " rules"); } log.debug("conf is " + (conf.isOk() ? "ok" : "NOT ok")); } confLastLoaded = conf; if (conf.isOk() && conf.isEngineEnabled()) { urlRewriter = new UrlRewriter(conf); log.info("loaded (conf ok)"); } else { if (!conf.isOk()) { log.error("Conf failed to load"); } if (!conf.isEngineEnabled()) { log.error("Engine explicitly disabled in conf"); // not really an error but we want ot to show in logs } if (urlRewriter != null) { log.error("unloading existing conf"); urlRewriter = null; } } } public void destroy() { log.info("destroy called"); destroyActual(); } public void destroyActual() { destroyUrlRewriter(); context = null; confLastLoad = 0; confPath = DEFAULT_WEB_CONF_PATH; confReloadCheckEnabled = false; confReloadCheckInterval = 0; confReloadInProgress = false; } protected void destroyUrlRewriter() { if (urlRewriter != null) { urlRewriter.destroy(); urlRewriter = null; } } public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { UrlRewriter urlRewriter = getUrlRewriter(request, response, chain); final HttpServletRequest hsRequest = (HttpServletRequest) request; final HttpServletResponse hsResponse = (HttpServletResponse) response; UrlRewriteWrappedResponse urlRewriteWrappedResponse = new UrlRewriteWrappedResponse(hsResponse, hsRequest, urlRewriter); // check for status request if (statusEnabled && statusServerNameMatcher.isMatch(request.getServerName())) { String uri = hsRequest.getRequestURI(); if (log.isDebugEnabled()) { log.debug("checking for status path on " + uri); } String contextPath = hsRequest.getContextPath(); if (uri != null && uri.startsWith(contextPath + statusPath)) { showStatus(hsRequest, urlRewriteWrappedResponse); return; } } boolean requestRewritten = false; if (urlRewriter != null) { // process the request requestRewritten = urlRewriter.processRequest(hsRequest, urlRewriteWrappedResponse, chain); } else { if (log.isDebugEnabled()) { log.debug("urlRewriter engine not loaded ignoring request (could be a conf file problem)"); } } // if no rewrite has taken place continue as normal if (!requestRewritten) { chain.doFilter(hsRequest, urlRewriteWrappedResponse); } } protected UrlRewriter getUrlRewriter(ServletRequest request, ServletResponse response, FilterChain chain) { // check to see if the conf needs reloading if (isTimeToReloadConf()) { reloadConf(); } return urlRewriter; } public boolean isTimeToReloadConf() { if (!confLoadedFromFile) return false; long now = System.currentTimeMillis(); return confReloadCheckEnabled && !confReloadInProgress && (now - confReloadCheckInterval) > confReloadLastCheck; } public void reloadConf() { long now = System.currentTimeMillis(); confReloadInProgress = true; confReloadLastCheck = now; log.debug("starting conf reload check"); long confFileCurrentTime = getConfFileLastModified(); if (confLastLoad < confFileCurrentTime) { // reload conf confLastLoad = System.currentTimeMillis(); log.info("conf file modified since last load, reloading"); loadUrlRewriterLocal(); } else { log.debug("conf is not modified"); } confReloadInProgress = false; } private long getConfFileLastModified() { File confFile = new File(context.getRealPath(confPath)); return confFile.lastModified(); } private void showStatus(final HttpServletRequest request, final ServletResponse response) throws IOException { log.debug("showing status"); if ( allowConfSwapViaHttp ) { String newConfPath = request.getParameter("conf"); if ( !StringUtils.isBlank(newConfPath)) { confPath = newConfPath; loadUrlRewriterLocal(); } } Status status = new Status(confLastLoaded, this); status.displayStatusInContainer(request); response.setContentType("text/html; charset=UTF-8"); response.setContentLength(status.getBuffer().length()); final PrintWriter out = response.getWriter(); out.write(status.getBuffer().toString()); out.close(); } public boolean isConfReloadCheckEnabled() { return confReloadCheckEnabled; } public int getConfReloadCheckInterval() { return confReloadCheckInterval / 1000; } public Date getConfReloadLastCheck() { return new Date(confReloadLastCheck); } public boolean isStatusEnabled() { return statusEnabled; } public String getStatusPath() { return statusPath; } public boolean isLoaded() { return urlRewriter != null; } public static String getFullVersionString() { Properties props = new Properties(); String buildNumberStr = ""; try { InputStream is = UrlRewriteFilter.class.getResourceAsStream("build.number.properties"); if ( is != null ) { props.load(is); String buildNumber = (String) props.get("build.number"); if (!StringUtils.isBlank(buildNumber)){ buildNumberStr = " build " + props.get("build.number"); } } } catch (IOException e) { log.error(e); } return VERSION + buildNumberStr; } }
新建两个测试jsp文件:
1.test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Urlrewrite Test</title> </head> <body> Hello!<br>This is test.jsp page ,<br>but my url is test.html <br> </body> </html>
2.page.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Urlrewrite Page</title> </head> <body> <% String param = request.getParameter("parameter_1"); %> The parameter message : ${param} </body> </html>
如果想访问test.jsp,在浏览器中输入:
http://localhost:Tomcat端口/项目名/test.html 即可。
如果想访问page.jsp,在浏览器中输入:
http://localhost:Tomcat端口/项目名/page/fanzhongyun.html 即可。
其中,/page/后面的字符串"fanzhongyun"是要传递的参数
- urlrewrite-3.2.0.jar.rar (176.7 KB)
- 描述: 目前比较新版本的urlrewrite的jar包
- 下载次数: 98
- urlrewrite3.2.dtd.rar (85 Bytes)
- 下载次数: 77
发表评论
-
解决JBoss只能通过localhost(127.0.0.1)而不能通过IP访问远程EJB对象
2012-03-16 03:05 5930刚开始测试访问远程EJ ... -
J2EE 用监听器实现同一用户只能有一个在线
2011-10-30 12:12 4395这里我们讨论的是已登 ... -
java Filter过滤器
2011-10-30 00:44 3046过滤器是能够对目标资源的请求和响应进行截取的。 举个例子来说 ... -
java 注册/登录 验证码的实现
2011-10-29 11:51 8401现在的很多网站,在注册或登录或发表评论或下载文件等等的时候都 ... -
java ajax
2011-10-29 11:12 1679引用 首先还是来说一下什么是AJAX吧,简单点来说,A ... -
java dwr
2011-10-29 03:32 6289DWR(Direct Web Remoting)是一个用于改 ... -
java des算法
2011-10-28 19:06 4119引用 DES算法是一种双向可逆的加密算法,既可以用来加密信息 ... -
java MD5算法
2011-10-28 18:54 2013引用 MD5算法称作是散列算法或者称作哈希算法。 MD5是一 ...
相关推荐
Java 中的 URL 重写 Java 中的 URL 重写是一种常用的技术,它可以将原始的 URL 转换为另一个 URL,以便达到特定的目的。例如,隐藏真实的 URL、实现 URL 的加密、实现 URL 的重定向等。在 Java 中,有多种方式可以...
### JAVA URL重写知识点解析 #### 一、实验目的与背景 在进行Web开发时,服务器需要维护客户端的会话状态。通常情况下,这可以通过HTTP协议中的Cookie机制来完成,但在某些场景下(如用户的浏览器禁用了Cookie功能...
Java URL重写器 v2.0 RC1
功能是在java的过滤器中实现的,思路是获取请求的信息,查看是否是禁止IP或相关的URL,在做处理
在Web开发中,URL重写是一种常用的技术,它能够帮助我们优化网站的URL结构,提高用户体验,并且对于搜索引擎优化(SEO)也具有积极影响。`URLRewrite`是Apache的开源项目Tuckey提供的一种URL重写工具,它可以在不...
在Java Web开发中,URL重写是一种常见的技术,它能够帮助我们优化应用程序的用户体验和搜索引擎优化(SEO)。URL重写的主要目的是将复杂的、带有多个参数的URL转化为更加友好、易于理解的形式。这样的URL更容易被...
URL重写是Web开发中的一种技术,主要用于优化和简化用户访问网站时的URL结构,使其更易读、更友好。这种技术通常与动态网站或基于框架的应用程序配合使用,例如ASP.NET、PHP、Java等。在本例中,我们将探讨URL重写的...
- **UrlRewriteFilter**:这是一个基于Java的开源过滤器,常用于Spring MVC等Java Web应用中,通过web.xml配置实现URL重写。 **4. 使用UrlRewriteFilter** UrlRewriteFilter是Tuckey开发的非侵入式的URL重写工具...
`urlrewritefilter`是一个开源的URL重写过滤器,它基于Apache许可证2.0发布,适用于Java Web应用。该工具模仿了IIS和Apache HTTP Server中的mod_rewrite模块,提供了灵活的规则配置,使得开发者能够轻松地对URL进行...
本篇文章将详细探讨“jsp动态转静态URL重写”的概念、重要性以及实现方法。 一、动态URL与静态URL的区别 1. 动态URL:动态URL通常包含“?”、“=”、"&"等特殊字符,用于传递参数给服务器执行相应的动态脚本,例如...
总之,Java伪静态URL重写是通过URL重写库和Web应用的配置实现的,它可以使得动态网站以静态URL的形式展现,从而提高网站的可访问性和SEO效果。在实际应用中,可以根据项目需求自定义更复杂的URL重写规则。
"Tomcat服务器以URL重写的方式除去两个opencms"的主题聚焦于如何在OpenCms平台上通过URL重写技术来改善网站的URL结构,以提高其可读性并促进搜索引擎的抓取。OpenCms是一款开源的内容管理系统,它允许开发者创建、...
在当前的项目开发过程中,我们采用了URL重写技术以提升网站地址的易读性,并确保搜索引擎能够更快地索引我们的站点。URL重写,简而言之,就是对网页地址进行优化美化的过程。众所周知,许多服务器都支持URL重写技术...
在Java Web开发中,我们可以使用多种技术实现URL重写,其中包括Apache的`mod_rewrite`模块(在使用Tomcat等非Apache服务器时,可能需要额外的中间件支持)以及Java内置的`Filter`机制。这里我们主要讨论使用Java ...
标题 "urlrewrite重写URL伪静态请求路径" 涉及到的是Web开发中的一个重要概念——URL重写,这是为了优化网站的SEO(搜索引擎优化)和用户体验而进行的一种技术手段。URL重写允许我们将复杂的动态URL转换为简洁、易于...
2. 采用框架或库:许多Web框架如ASP.NET MVC、PHP的Laravel、Java的Spring等内置了URL重写功能。 3. 自定义中间件:对于“另类URL重写”,开发者可以编写自己的中间件,实现个性化的URL处理逻辑。 五、源码分析与...
UrlRewriter Java v2.0 RC1 是一个用于Java Web应用程序的URL重写库,它主要功能是帮助开发者实现友好的、搜索引擎优化(SEO)的URL。URL重写技术在现代Web开发中扮演着重要角色,因为它能将复杂的动态URL转化为简洁...
URL重写在SEO(搜索引擎优化)方面也有着显著的作用。下面我们将详细探讨如何在Struts2框架中实现URL重写。 首先,了解URL重写的基本概念。URL重写是通过改变HTTP请求URL的外观,而不会改变其实际的行为。这通常...
这就是`URL Rewrite Filter`发挥作用的地方,它是一个基于Apache的开源过滤器,用于实现URL重写规则。在这个场景中,我们将深入探讨如何使用`URL Rewrite Filter`来重写Struts2的Action。 首先,让我们理解`URL ...
URL重写插件 Java 2.0 RC1