Java高并发静态页面生成方案--UrlRewrite 本文关键词:并发,静态,生成,页面,方案
Java高并发静态页面生成方案--UrlRewrite 本文简介:Java高并发:静态页面生成方案--UrlRewrite文/叶秋雨2013-02-27解决方案一、打开eclipse,新建web项目,项目名为urlrewrite。部署到tomcat以后,浏览器访问网址:http://localhost:8080/urlrewrite/index.html,出现40
Java高并发静态页面生成方案--UrlRewrite 本文内容:
Java高并发:静态页面生成方案--UrlRewrite
文/叶秋雨
2013-02-27
解决方案
一、打开eclipse,新建web项目,项目名为urlrewrite。部署到tomcat以后,浏览器访问网址:http://localhost:8080/urlrewrite/index.html,出现404错误。
二、到urlrewrite官网下载最新jar包。网址:http://tuckey.org/urlrewrite
。目前最新版为:urlrewritefilter-4.0.3.jar
三、把urlrewritefilter-4.0.3.jar复制到项目的WebRoot/WEB-INF/lib/目录下
四、在web.xml文件中加入以下代码:
UrlRewriteFilter
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
UrlRewriteFilter
/*
REQUEST
FORWARD
五、在WebRoot/WEB-INF/目录下,新建urlrewrite.xml
,并加入以下代码(代码从官网上复制,如需深入了解,请自行查阅。):
The
rule
means
that
requests
to
/test/status/
will
be
redirected
to
/rewrite-status
the
url
will
be
rewritten.
/test/status/
%{context-path}/rewrite-status
The
outbound-rule
specifies
that
when
response.encodeURL
is
called
(if
you
are
using
JSTL
c:url)
the
url
/rewrite-status
will
be
rewritten
to
/test/status/.
The
above
rule
and
this
outbound-rule
means
that
end
users
should
never
see
the
url
/rewrite-status
only
/test/status/
both
in
thier
location
bar
and
in
hyperlinks
in
your
pages.
/rewrite-status
/test/status/
6、
在urlrewrite.xml里面加入如下代码:
^/index.html
/index.jsp
from
代表你在访问网站的时候,浏览器地址栏中显示的URL
to
代表将浏览器中显示的URL转换后的地址,也就是你网站中真正访问的URL
(注意路径问题:项目名字不要写到里面。)
7、
重启tomcat,访问http://localhost:8080/urlrewrite/index.html
,发现访问正常。
8、
对于传值的url写法(单值或多值),具体配置如下:
新建几个jsp页面。
index.jsp代码如下:
接受单个参数
接受多个参数
receiveParam.jsp代码如下:
param1的值为:${param.param1}
receiveParams.jsp代码如下:
param2的值为:${param.param2}
param3的值为:${param.param3}
urlrewrite.xml配置如下:
^/receiveParam-(.[0-9]*).html
/receiveParam.jsp?param1=$1
^/receiveParams-(.[0-9]*)-(.[0-9]*).html
/receiveParams.jsp?param2=$1param3=$2
注明:
.[0-9]*为正则表达式的写法,不了解的请自行查阅相关资料。
$1意思是匹配第一个正则表达式,$2意思是匹配第二个正则表达式,依此类推。
“”来代替“&”,多个值的时候依此类推。
声明:部分内容来自互联网,请勿从事非法活动,否则一切后果与本人无关。如果用于商业用途,请自行排查漏洞等问题,否则造成的一切后果也与本人无关。
本人也刚踏入这行没几年,没写过多少技术文档,写的不好,还请大家见谅。如果在开发中遇到什么问题,或者认为有什么改进的地方,可以与本人联系。
以下内容来自51cto,原文链接:http://developer.51cto.com/art/201206/342021.htm
提升网站性能的方式有很多,例如有效的使用缓存,生成静态页面等等。今天要说的就是生成静态页面的方式。这个也是我近期一直在搞的一个问题,近期在做使用html
+
servlet做个人网站,为什么是这2个东西呢?
1、直接用servlet是为了保证网站能以最快的速度执行命令个人总感觉像Struts
hibernate
spring之类的虽然方便但是效能带来的损耗不太能接收
2、使用html同样是为了保证最快的反应速度,毕竟html
比jsp少了一层服务器执行.速度上要快的多
一、在这里要先说一下什么是页面静态化:
简单的说,我们如果访问一个链接
http://abc.com/test.do,服务器对应的模块会处理这个请求,转到对应的jsp界面,最后生成我们想要看到的数据。这其中的缺点是显而易见的:因为每次请求服务器都会进行处理,如果有太多的高并发请求,那么就会加重应用服务器的压力,弄不好就把服务器
搞down
掉了。那么如何去避免呢?如果我们把对
test.do
请求后的结果保存成一个
html
文件,然后每次用户都去访问
http://abc.com/test.html
,这样应用服务器的压力不就减少了?
那么静态页面从哪里来呢?总不能让我们每个页面都手动处理吧?这里就牵涉到我们要讲解的内容了,静态页面生成方案.
我们需要的是自动的生成静态页面,当用户访问
http://abc.com/test.do,会自动生成
test.html
,然后显示给用户。
二、下面我们在简单介绍一下要想掌握页面静态化方案应该掌握的知识点
1、
基础—
URL
Rewrite
什么是
URL
Rewrite
呢
?
URL
重写。用一个简单的例子来说明问题:输入网址http://www.16fw.com/test.do
,但是实际上访问的却是
http://www.16fw.com/test.action,那我们就可以说
URL
被重写了。这项技术应用广泛,有许多开源的工具可以实现这个功能。
2、
基础—
Servlet
web.xml
如果你还不知道
web.xml
中一个请求和一个
servlet
是如何匹配到一起的,那么请搜索一下
servlet
的文档。这可不是乱说呀,有很多人就认为
/xyz/*.do
这样的匹配方式能有效。
如果你还不知道怎么编写一个
servlet
,那么请搜索一下如何编写
servlet。这可不是说笑呀,在各种集成工具漫天飞舞的今天,很多人都不会去从零编写一个
servlet了。
三、基本的方案介绍
其中,对于
URL
Rewriter的部分,可以使用收费或者开源的工具来实现,如果
url不是特别的复杂,可以考虑在
servlet
中实现,那么就是下面这个样子:
以下内容来自百度百科,原文链接:http://baike.baidu.com/view/2673841.htm
UrlRewrite的含义
UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址。
优点
一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多
二:美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL
三:更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息
使用范围
地址重写一般是用于将动态地址伪静态。如果本身就是静态就没必要了。地址重写后网站制作者可以通过输理地址名直接访问。
使用方法
首页,访问其官网:我下载的是最新的目前还处于Beta版的urlrewritefilter-3.2.0,下载后将其中的urlrewrite-3.2.0.jar扔到需使用此功能项目的lib目录中去
其次,在web.xml中加入如下配置:
UrlRewriteFilter
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
logLevel
WARN
UrlRewriteFilter
/*
REQUEST
FORWARD
其实,urlrewrite其实就是个过虑器,它将会过虑用户的所有请求,符合规则的便对其进行重定向,具体的配置参数的使用方法见官方文档:
配置好web.xml后将下载的urlrewritefilter-3.2.0中的urlrewrite.xml配置文件放在WEB-INF目录下,这样在使用urlrewritefilter时它便自动到该目录下读取相关的配置了,我配置了个简单的,代码如下:
rule结点中form的规则默认使用的是正则表达式来匹配的,当用户访问服务器时的URL会与该配置相比较,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转,具体配置可见官网文档。[1]
outbound-rule结点是服务器解析后的页面URL对外表现的形式,配置与上面的大体相同,如我一新闻链接代码在JSP中书写的形式如下:
经服务器解析后,最终显示在页面中的将变成:
·
新闻标题
当用户点击此链接后urlrewrite便用通过rule的配置重跳转到真正的访问地址,这样便很好的隐藏了真实地址
这其中有点是需要注意的,引用官网中的一段话:
Using
the
example
above
JSP
s
with
the
code
nyc
will
output
nyc
Or
JSTL
nyc
will
output
nyc
Note,If
you
are
using
JSTL
(ie, this will work also. 意思就是说需要转化的链接不能直接写在a标签中,需要写在c:url或其他服务器需要解析的变量中,这样才能对其重新显示[1]。 在drupal中如果要开启Clean URLs,需要开启Apache里的urlrewrite组件。