我有一个链接,点击它我必须得到下一页,我正在给链接的URL作为
http://localhost/test/controller?name=""&image="url"
有没有办法传递数据而不会在点击链接时附加到网址?正常的href。
答案 0 :(得分:2)
如果另一个页面位于同一个域中,则存储在cookie中的任何信息都可以被它们访问,并且不需要附加到该链接。通常,如果您正在使用JSP,则servlet容器将自动为您管理会话(基于后台的cookie) - 因此您可以在一个页面中设置会话的属性,然后从另一个页面读取它们。有关在servlet中存储客户端状态的信息,请参阅此Sun tutorial。
请记住,这需要在服务器端进行,因此如果用户点击链接时需要完成完全(例如记录时间)他们点击了),然后这不能通过纯JSP会话逻辑来完成。您需要自己提供某种基于cookie的逻辑。
如果目标页面完全在另一个域上,那么将属性附加到请求是传递此信息的唯一方法。我不确定你这样做的反对意见,无论是技术还是其他方面;这是一种非常常见的技术,效果很好。有多种方法可以对流程应用“整容”调整,例如从URL读取信息的登录页面,将其放在 站点上的客户端会话中,然后替换URL使用“更干净”的版本(即删除了所有添加的参数的版本)。或者,POST请求将意味着属性不会出现在实际的URL本身中,并且如果链接表示某种动作或不可重复(即不可书签)的状态,则有意义。
您在将属性放入网址时究竟遇到了什么问题?
答案 1 :(得分:1)
有两种方法可以实现这一目标:
使用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>
您可以使用CSS来设置按钮的样式,就好像它是一个链接一样。当然,您需要相应地在控制器servlet中实现doPost()
。
使用“RESTFul”(和SEO友好)URL模式(确保您的控制器servlet映射到/controller/*
而不是/controller
)。
<a href="controller/name/url">click</a>
与doGet()
中的以下内容结合使用(当然还有一些简单的检查,以避免像数组索引超出边界的运行时异常):
String pathInfoParts = request.getPathInfo().split("/");
String name = pathInfoParts[1];
String image = pathInfoParts[2];
目前还不清楚你对“url”的意思是什么,但是如果它是一个完整的http:// web URL,那么你应该让它们只是将它们保存在服务器端的地图中,然后将地图的密钥作为参数传递/ PATHINFO。或者,如果它在您自己的背景下,只需使其相对。
答案 2 :(得分:0)
抱歉显而易见的问题是,POST请求不可能吗? (例如,让链接执行form.submit()
,表单目标将是您的目标网址,表单方法将为POST
,您的数据将隐藏在隐藏字段中