论坛首页 Java企业应用论坛

urlrewriter使用时请注意

浏览 7761 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-11-16  
   上午开发小组开常规的开发进度会议,在讨论使用urlrewriter在项目中担任URL重写的时候有点争议,我坚持使用urlrewriter重写URL需要配合JSTL标签中的c:url一起使用,才能真正达到重写所有页面上的URL的目的,一个同事说可以不需要使用这个标签也可以达到重写的目的,为了解决这个争议,决定写一个DEMO来进行验证我的说法。首先新建一个项目,导入必要的依赖。
 
                   <dependency>
			<groupId>taglibs</groupId>
			<artifactId>standard</artifactId>
			<version>1.1.2</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.tuckey</groupId>
			<artifactId>urlrewritefilter</artifactId>
			<version>3.1.0</version>
		</dependency>


在WEB.XML中进行过滤器的配置
 <filter>
	  <filter-name>rewriteFilter</filter-name>
	  <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
	  <init-param>
	   <param-name>confPath</param-name>
	   <param-value>/WEB-INF/urlrewrite.xml</param-value>
	  </init-param>
 </filter>
 <filter-mapping>
	  <filter-name>rewriteFilter</filter-name>
	  <url-pattern>*.jsp</url-pattern>
	  <dispatcher>REQUEST</dispatcher>
	  <dispatcher>FORWARD</dispatcher>
 </filter-mapping>
 <filter-mapping>
	  <filter-name>rewriteFilter</filter-name>
	  <url-pattern>*.html</url-pattern>
	  <dispatcher>REQUEST</dispatcher>
	  <dispatcher>FORWARD</dispatcher>
 </filter-mapping>


在WEB-INF下新建一个urlrewrite.xml文件[color=red][/color]


<?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">
   <urlrewrite>
	<rule>
		<from>/index.html$</from>
		<to>/index.jsp</to>
	</rule>
    <outbound-rule>
    	<from>/index.jsp</from>
    	<to>/index.html</to>
    </outbound-rule>
</urlrewrite>


这个主要是测试用的,现在在根目录下新建一个index.jsp页面。代码如下

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
</head>
<body>
<a href="index.jsp">无标签的URL输出首页地址</a>
<br/>
<br/>
<br/>
<br/>
<a href="<c:url value='/index.jsp' />">有标签的URL输出首页地址</a>
</body>
</html>



启动容器,输入项目路径 http://localhost:8080/index.html,输出如下HTML代码


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
</head>
<body>
<a href="index.jsp">无标签的URL输出首页地址</a>
<br/>
<br/>
<br/>
<br/>
<a href="/index.html;jsessionid=62408E24FEA0F75AFB9B0CACA9314006">有标签的URL输出首页地址</a>

</body>
</html>



综上所述,urlrewriter如果要重写成功,要把需要重写的URL用标签输出,直接输出URL是不会重写URL的!
   发表时间:2010-11-17  
说了好多,其实LZ就是想问问不用 标签怎么输出 urlrewrite里面 outbound-rule配的对应连接是吗?

<%= response.encodeURL("/index.jsp") %>
0 请登录后投票
   发表时间:2010-11-17  
我赞成不用。因为静态化需求时使用html来进行请求,那么意味着所有的链接应该都可以由html来调用。那么为什么不直接使用html后缀,逻辑性更强,还避免了转出时进行转换。
0 请登录后投票
   发表时间:2010-11-17  
蔡华江 写道
我赞成不用。因为静态化需求时使用html来进行请求,那么意味着所有的链接应该都可以由html来调用。那么为什么不直接使用html后缀,逻辑性更强,还避免了转出时进行转换。

如果有天产品不想用html,而想用htm或者shtml,那是不是所有的页面都要进行修改?
0 请登录后投票
   发表时间:2010-11-18  
这个插件用着还可以啦!
效果基本都能达到!
   jstl  <%= response.encodeURL("/index.jsp") %>  都可以!

这个只是视觉效果! 并且附加一定的损耗!  不建议全部使用!
在适当的地方用用就OK!
0 请登录后投票
   发表时间:2010-11-18  
zhb870815 写道
蔡华江 写道
我赞成不用。因为静态化需求时使用html来进行请求,那么意味着所有的链接应该都可以由html来调用。那么为什么不直接使用html后缀,逻辑性更强,还避免了转出时进行转换。

如果有天产品不想用html,而想用htm或者shtml,那是不是所有的页面都要进行修改?

如果你有这个需求。。。urlwriter当然可以。。。
虽然我个人认为这个有点。。

当然并不意味着不用就不能实现,web总是基于请求的,如果你有这个需求,在转入时候将html转为htm/shtml又何仿。
要知道,在页面中使用html,可以让代码清淅,且方便跳转,在IDE下支持就更好了。
<a href="b.html"/>你一看就知道到了那里,
如果加上c:out,总是多隔了一层。
同样,如果命名真的很规范你也可以无视。。
0 请登录后投票
   发表时间:2010-11-18  
jstl标签可以解析到urlrewriter的啊?那不错,你的方法我很赞同啊,如果直接写index.html虽然简单,但是确实不灵活,如果一般不会轻易改变为htm shtml的话,直接写html也是不错的选择
0 请登录后投票
   发表时间:2010-11-18  
zhb870815 写道
蔡华江 写道
我赞成不用。因为静态化需求时使用html来进行请求,那么意味着所有的链接应该都可以由html来调用。那么为什么不直接使用html后缀,逻辑性更强,还避免了转出时进行转换。

如果有天产品不想用html,而想用htm或者shtml,那是不是所有的页面都要进行修改?


其实这个只是欺骗用户,让他不知道你是用什么语言开发的。而且还影响效率建议还是用Apache web 服务器,进行配置
2 请登录后投票
   发表时间:2010-11-18  

楼主,urlrewriter和JSTL标签中的c:url有什么关系吗?

urlrewriter主要是URL规则的一种对应转换;而JSTL标签中的c:url只是对URL中特殊字符,比如:中文,进行了URL编码,还有对不支持cookie的浏览器,jsessionid附加到了URL的后面.

所以,在urlrewriter中使用不使用c:url完全是功能的需要.比如:你例子中的首页,就完全没有必要使用
0 请登录后投票
   发表时间:2010-11-18  
个人觉得这个与真实的静态化配合使用比较好,如果单为伪静态而耗损这样的性能不值得,当然部分页面用一下也是可以的。另外,在用urlrewrite的时候是要经过服务器解析的(就是web.xml配置的经过urlrewrite过滤器),所以直接写自然不行了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics