urlrewrite(伪静态技术运用2之outbound-rule)

2023-11-12

问题:页面通过"/servlet/detail?magid=520&categoryId=205“来访问一个servlet,这个链接在IE地址栏上给人家看起来很不舒服,想把它伪装一下变成别的地址,例如想把它伪装成:/servlet/detail/520_205.html 或者其他的url地址那该怎么实现了?

【注意:页面连接不是“/servlet/detail/520_205.html “而是“/servlet/detail?magid=520&categoryId=205”】

urlrewrite.xml配置:

错误代码:

<urlrewrite>

<rule>
<from>/servlet/detail/([0-9]+)_([0-9]+).html</from>
<to>/servlet/detail?magid=$1&amp;categoryId=$2</to>
</rule>

</urlrewrite>

有很多新手刚开始就认为这样配置就能解决了上面提问的问题。其实错误,这样页面只能通过:”/servelt/detail/24_42.html ” 来访问,访问这个地址时它会forward到/servlet/detail?magid=24&categoryid=42这个servlet。如果我们页面通过“/servlet/detail?magid=24&categoryid=42”这样来访问的话,是不会被重写的。这是新手的常遇到的一个问题。

正确代码:

<urlrewrite>

<rule>
<from>/servelt/detail/([0-9]+)_([0-9]+).html</from>
<to>/servelt/detail?magid=$1&amp;categoryId=$2</to>
</rule>


<outbound-rule>
<from>/servlet/detail\?magid=([0-9]+)&amp;categoryId=([0-9]+)</from>
<to>/servlet/detail/$1_$2.html</to>
</outbound-rule>
</urlrewrite>

通过上面的配置基本上实现了上面的提出的问题。

1:通过:“/servlet/detail?magid=24&categoryid=42”来访问,得在<outbound-rule>标签中配置,同时还得在<rule>中配置相关信息。如果rule中没有配置,会找不到相关的资源信息,抱404错误

2:上面的配置文件得注意的地方:在<outbound-rule>中的特殊符号“?”“&”等得转义。不然的话也会出错,不能被重写。像上面的“outbound-rule>from标签中路径中如果出现“?”问号的话,记得要转义,“\?”。

3:jsp中,上面提出的问题中,在页面如果直接写<a href="/servlet/detail?magid=24&categoryid=42"/>这样也是错误的,同样也没办法被重写。

它只能用在response.encodeURL()或者jstl中c:url中,才会被重写。这个也是容易犯错的地方。

jsp:页面关键代码:

<a href="<c:url value='/servlet/detail?magid=3934&categoryId=3'/>">JSTl c:URL</a><hr/>
<a href="<%=response.encodeUrl("/servlet/detail?magid=3934&categoryId=3") %>">response EncodeURL</a>

4:如果想在<outbound-rule>中定义多个from to标签这个是不可以的,<outbound-rule>中只能定义一个from to 标签。这个是我在程序中测试得出来的结论。只能定义一对from to标签是在个人测试得出来的结论,如果您测试出来不是这样的话,请给我指正,评判。

5:通过上面的urlrewrite.xml的配置, <a href=”servlet/detail?44_77.html">测试</a>这样子来访问也是可以被重写的。也就是相当于双向。


这样便很好的隐藏了真实地址
这其中有点是需要注意的,引用官网中的一段话:
Using the example above JSP's with the code
<a href="<%= response.encodeURL("/world.jsp?country=usa&amp;city=nyc") %>">nyc</a>
will output
<a href="/world/usa/nyc">nyc</a>

Or JSTL
<a href="<c:url value="/world.jsp?country=${country}&amp;city=${city}" />">nyc</a>
will output
<a href="/world/usa/nyc">nyc</a>

需要转化的链接不能直接写在a标签中,需要写在c:url或其他服务器需要解析的变量中,这样才能对其重新显示

注意:<rule>标签可以单独的存在。而<outbound-rule>必须要和<rule>标签成对出现。而且在页面的时候需要<c:url>标签来转换成<rule>所对应的规则。

转自:http://hi.baidu.com/allen_zzw/item/e2d16a539fdf41a2acc857b2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

urlrewrite(伪静态技术运用2之outbound-rule) 的相关文章

  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab
  • 如何使用 Java 中的 Web 服务(例如 Axis2)发送复杂对象的数组或集合?

    我对 SOAP Web 服务还比较陌生 虽然我完成了一些较小的 Web 服务项目 但我偶然从来不需要返回 或用作参数 复杂 对象的数组或集合 当我尝试这样做时 根据我的 SOAP 绑定风格 我会得到不同的奇怪行为 当我使用RPC 文字 我可
  • Hibernate注解放置问题

    我有一个我认为很简单的问题 我见过两种方式的例子 问题是 为什么我不能将注释放在字段上 让我举一个例子 Entity Table name widget public class Widget private Integer id Id G
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • react-native run-android 失败并出现错误:任务 ':app:dexDebug' 执行失败

    我使用的是 Windows 8 1 和react native cli 1 0 0 and react native 0 31 0 添加后react native maps对于该项目 我运行了命令react native upgrade并给
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • Java整数双除法混淆[重复]

    这个问题在这里已经有答案了 方案1 int sum 30 double avg sum 4 result is 7 0 not 7 5 VS 方案2 int sum 30 double avg sum 4 0 Prints lns 7 5
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的

随机推荐

  • 大模型时代,企业如何重构 AI 应用落地范式?

    近一年来 生成式人工智能 AIGC 技术的快速发展和各种大模型的涌现 引发了全球范围内对于通用人工智能 AGI 时代是否即将到来的讨论 在 AIGC 大模型公共服务逐渐被大众辩证地接受后 如何用 AIGC 技术重塑企业智能服务成为一个深水区
  • 使用Jmeter进行http接口做功能、性能测试

    使用Jmeter进行http接口做功能 性能测试 1 使用Jmeter进行http接口做功能 性能测试 在测试移动APP时 会有很多接口需要做测试 我在这里介绍一下对HTTP接口做功能 性能的测试 首先我们会从开发人员拿到接口数据 1 1
  • 苹果IOS开发者账号总结

    详细地址 https developer apple com programs which program 个人账号 Individual 费用99美金一年 该账号在App Store销售者只能显示个人的ID 比如zhitian zhang
  • Linux 查看进程消耗内存情况总结

    在Linux中 有很多命令或工具查看内存使用情况 今天我们来看看如何查看进程消耗 占用的内存情况 Linux的内存管理和相关概念要比Windows复杂一些 在此之前 我们需要了解一下Linux系统下面有关内存的专用名词和专业术语概念 物理内
  • LeetCode之最长公共子序列问题LCS解决方法

    Leetcode官网解答 使用动态规划原理 请参考原文地址 https leetcode cn com problems longest common subsequence solution zui chang gong gong zi
  • Python机器学习--算法实现--常用算法在Sklearn中的回归算法关键参数详解

    常用算法在Sklearn中的关键参数详解 回归算法 线性回归算法 from sklearn linear model import LinearRegression LinearRegression fit intercept True n
  • VS2008调试dump文件

    让程序在崩溃时体面的退出之Dump文件 在我的那篇 让程序在崩溃时体面的退出之CallStack 中提供了一个在程序崩溃时得到CallStack的方法 可是要想得到CallStack 必须有pdb文件的支持 但是一般情况下 发布出去的程序都
  • 网址服务器不稳定,关于网站被360搜索提示服务器不稳定可能无法正常访问的解决方法...

    相信很多做网站的站长们都有过类似的经历吧 有时候因为服务器节点问题或者其他问题导致服务器或vps暂时性无法运行导致网站暂时无法打开 这些都是属于正常的现象 但是运气不好的时候辛辛苦苦优化的网站可能就会被搜素引擎标记为 该页面因服务器不稳定可
  • 锦囊妙计--组建新团队整体规划

    详细请见幕布链接 https mubu com doc 2MicLCcsoC 幕布内的具体内容还在持续完善中 敬请期待
  • 【洛谷 P1115】最大子段和 题解(贪心算法)

    最大子段和 题目描述 给出一个长度为 n n n 的序列 a a a 选出其中连续且非空的一段使得这段和最大 输入格式 第一行是一个整数 表示序列的长度 n
  • 报错unable to access android sdk add-on list

    前言 初次安装Android Studio AS启动后 会在默认路径下检测是否有Android SDK 如果没有的话 就会报错如下 解决办法 我这里安装了sdk 然后点击cancel 下一步会自动读取我们的sdk 然后点击next就行了 如
  • OPENWRT中SSH免密钥登陆(详细步骤)

    通过使用ssh keygen生成公钥 在两台机器之间互相建立新人通道极客 假设本地机器是client 远程机器为server 1 使用ssh keygen生成rsa keygen 在这里会覆盖以前生成的 ssh id rsa文件 请提前做好
  • vue3的一些知识点plus--3

    二十 兄弟组件传值 Bus 兄弟组件直接的传值 最基础的是通过同一个父级进行数值的传递 使用prop和emit 太过繁琐 父级 div a a b b div let flag ref false let getFlag params bo
  • 停车场管理

    停车场管理 1 项目简介 设停车场是一个可以停放n辆汽车的南北方向的狭长通道 且只有一个大门可供汽车进出 汽车在停车场内按车辆到达时间的先后顺序 依次由北向南排列 大门在最南端 最先到达的第一辆车停放在车场的最北端 若车场内已停满n辆车 那
  • Java入门(1) —— 变量、运算符、分支结构和程序员思维的理解

    1 计算机语言的发展史 机器语言 机器语言是指一台计算机全部的指令集合 汇编语言 为了减轻使用机器语言编程的痛苦 人们进行了一种有益的改进 用一些简洁的英文字母 符号串来替代一个特定的指令的二进制串 高级语言 BASIC True basi
  • Map循环遍历的五种方法

    因为Map比较常用 所以今天来总结下Map取值比较常用的几种遍历方法 1 创建一个Enum public enum FactoryStatus BAD 0 ou GOOD 1 yeah private int status private
  • 排错解决:etcd节点掉线后(code=exited, status=1/FAILURE),如何加入

    一 问题出现环境 有一个etcd节点因为磁盘问题当掉 在node1节点查看健康状态 root node01 k8s etcd bin etcdctl ca file k8s etcd ssl ca pem cert file k8s etc
  • python统计字典里面value出现的次数_python 统计list中各个元素出现的次数的几种方法...

    利用字典dict来完成统计 举例 a 1 2 3 1 1 2 dict for key in a dict key dict get key 0 1 print dict 输出结果 gt gt gt 1 3 2 2 3 1 利用Python
  • 【WINDOWS / DOS 批处理】for命令详解(六)

    for命令详解 一 共十篇 for命令详解 二 共十篇 for命令详解 三 共十篇 for命令详解 四 共十篇 for命令详解 五 共十篇 for命令详解 六 共十篇 for命令详解 七 共十篇 for命令详解 八 共十篇 for命令详解
  • urlrewrite(伪静态技术运用2之outbound-rule)

    问题 页面通过 servlet detail magid 520 categoryId 205 来访问一个servlet 这个链接在IE地址栏上给人家看起来很不舒服 想把它伪装一下变成别的地址 例如想把它伪装成 servlet detail