Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击超链接时将数据从一个页面传递到另一个页面_Java_Jsp - Fatal编程技术网

Java 单击超链接时将数据从一个页面传递到另一个页面

Java 单击超链接时将数据从一个页面传递到另一个页面,java,jsp,Java,Jsp,我有一个链接,点击该链接我将进入下一页,我将该链接的url设置为 http://localhost/test/controller?name=“”&image=“url” 有没有一种方法可以在点击链接时传递数据而不附加到url?这是正常的a href。如果另一个页面位于同一个域中,那么Cookie中存储的任何信息都可以被这两个页面访问,并且不需要附加到链接中。通常,如果您使用的是JSP,servlet容器将自动为您管理会话(基于后台cookie)——因此您可以在一个页面中设置会话属性,然后从另一

我有一个链接,点击该链接我将进入下一页,我将该链接的url设置为
http://localhost/test/controller?name=“”&image=“url”


有没有一种方法可以在点击链接时传递数据而不附加到url?这是正常的a href。

如果另一个页面位于同一个域中,那么Cookie中存储的任何信息都可以被这两个页面访问,并且不需要附加到链接中。通常,如果您使用的是JSP,servlet容器将自动为您管理会话(基于后台cookie)——因此您可以在一个页面中设置会话属性,然后从另一个页面读取属性。例如,请参见关于在servlet中存储客户机状态的示例

请记住,这需要在服务器端进行,因此,如果需要在用户单击链接时准确地执行此操作(例如记录他们单击的时间),那么纯JSP会话逻辑无法完成此操作。您需要自己提供某种基于cookie的逻辑


如果目标页面完全位于另一个域上,那么向请求添加属性是传递此信息的唯一方法。我不确定你反对这样做的原因是什么,不管是技术上的还是其他方面的;这是一种非常常见的技术,而且效果很好。有多种方法可以对流程应用“修饰性”调整,例如从URL读取信息的登录页,将其放入该站点上的客户端会话,然后用“更干净”的版本(即删除所有添加参数的版本)替换URL。或者,发布请求将意味着属性不会出现在实际URL本身中,并且如果链接表示某种操作或不可重复(即不可书签)状态,则会有意义


在URL中添加属性时,您到底遇到了什么问题?

很抱歉,有一个明显的问题,POST请求不可能吗?(例如,让链接执行一个
form.submit()
,表单目标将是您的目标URL,表单方法将是
POST
,您的数据在隐藏字段中)

有两种方法可以实现这一点:

  • 使用
    POST
    表单

    <form method="post" action="controller">
        <input type="hidden" name="name" value="">
        <input type="hidden" name="image" value="url">
        <input type="submit" value="click">
    </form>
    
    结合
    doGet()
    中的以下内容(当然还有一些琐碎的检查,以避免运行时异常,如数组索引超出范围):

    不清楚“url”的真正含义是什么,但是如果它是完整的http://web url,那么您应该将它们保存在服务器端的映射中,并将映射的键作为参数/pathinfo传递。或者,如果它是在你自己的背景下,只是使它相对


  • 实际上这个url有卡片名和图片url,我可以附加它,但我不想这样做?我需要使用response.encodeurl吗?对不起,我不太明白你在评论中想说什么。但是,我确实明白了,您只是重复了您可以附加查询参数,但不想添加。你能澄清一下你为什么不想这样做吗?(是的,如果参数出现在URL中,您需要对其进行编码)根据您平台的库方法进行编码-在Java中,它将是
    Java.net.URLEncoder.encode(inputParameter,“UTF-8”)
    。我附加的URL就像我无法对itErm进行编码一样,是的。我建议你阅读关于如何使用URL编码的分步指南,并在论坛上询问你是否仍然有问题;您的案例正是URL编码的设计目的。
    <a href="controller/name/url">click</a>
    
    String pathInfoParts = request.getPathInfo().split("/");
    String name = pathInfoParts[1];
    String image = pathInfoParts[2];