【问题标题】:url encoding in java?java中的url编码?
【发布时间】:2012-04-23 07:28:49
【问题描述】:

我想知道什么是url 编码。 我有 2 个 jsp 页面和一个 servlet。 当我运行应用程序时,显示的 url 是:

http://localhost:8080/myproject/index.jsp

在哪里

index.jsp:

<form action="Myservlet" method="post">
    <input type="text" name="mytext" id="mytext"/>
    <input type="submit" value="submit"/>
</form>

点击提交按钮后显示的网址是:

http://localhost:8080/myproject/Myservlet

URL编码是什么意思?如何编码网址?

index.jspMyservlet 然后到result.jsp

Myservet#doPost // 我需要在这里进行 URL 编码吗?如果是怎么办?

  fetching data from db.......
  ....................
  String nextJSP = "/result.jsp";
  RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
  dispatcher.forward(request,response);

result.jsp

displays data here

【问题讨论】:

  • 请有人回答我的问题
  • 你试过用谷歌搜索吗? en.wikipedia.org/wiki/URL_Encoding
  • 可能重复:stackoverflow.com/questions/8713208/…(见第二个回复)
  • 是的,我用谷歌搜索了,但我没有得到我的问题的答案......我发现了令人困惑的话题并且没有接近我的问题..如果你知道然后请通过发布帮助我一点你的答案,我该如何编码 url?
  • 只要搜索'java url encoding'...

标签: java jsp url servlets urlencode


【解决方案1】:

有两种编码类型:HTML form encodingURL re-writing

在表单编码中,URL 字符串被转换为 Internet 就绪的有效 ASCII 格式。来自URLEncoder.encode(String, String) 文档:

将字符串转换为 application/x-www-form-urlencoded 格式 使用特定的编码方案。此方法使用提供的 获取不安全字符字节的编码方案。

第二种是URL重写。 URL 字符串使用会话 ID 进行编码,以防客户端浏览器不支持(或禁用)cookie 或会话跟踪。来自HttpServletResponse.encodeURL(String) 文档:

通过在其中包含会话 ID 对指定的 URL 进行编码,或者,如果 不需要编码,返回 URL 不变。实施 该方法包括判断会话ID是否为逻辑 需要在 URL 中编码。例如,如果浏览器支持 cookie,或会话跟踪已关闭,URL 编码是 没必要。

【讨论】:

  • 感谢 blackcompe 的回答...所以在 index.jsp 中,我应该这样写:&lt;form action="Myservlet?some encoding"&gt; 吗?
  • @sujit:你想做什么类型的编码?形式还是重写?
  • @blackcompe .....我想要 URL 编码而不是表单编码,我如何编码 urlhttp://localhost:8080/myproject/index.jsp?以便保护它免受易受攻击的攻击?
  • @sujit:表单编码:&lt;form action="&lt;%= new URLEncoder().encode(myURL, "UTF-8") %&gt;"&gt;,URL 重写:&lt;form action="&lt;%= request.encodeURL(myURL) %&gt;"&gt;
  • 这些都不能帮助保护您免受攻击。这完全是题外话。
【解决方案2】:

我认为你在这里误解了。 HTML Form EncodingURL Re-writing 都不是你想要达到的目标。

如果你想实现喜欢。

例如:用户不会输入http://localhost:8080/search.jsp?xxx,而是看到http:/localhost:8080/search?xxx

您可以像这样创建一个 servlet 映射:

<servlet-mapping>
   <servlet-name>MappingServlet</servlet-name>
   <url-pattern>path/*</url-pattern>
 </servlet-mapping>

必须根据您的需要编辑 url 模式。您当然需要创建 servlet 以便将 url 映射到实际的 jsp。大多数 MVC 框架都使用这种技术。

阅读更多 How to develop JSP/Servlets Web App using MVC pattern?

【讨论】:

  • 感谢 Hardik 的回答..servlet 很好,即localhost:8080/search,但对于 jsp,我怎么能这样显示:localhost:8080/search(不是 8080/search.jsp)?我可以在 web.xml 中做点什么吗?
  • 就像我们将 servlet 映射到 web.xml 中的 url 一样,您必须在 web.xml 中使用特定的 url 模式映射 jsp 页面。
【解决方案3】:

使用java.net.URLEncoder.encode(s, "UTF-8"),其中s 是要编码的字符串。

每当我们将文本作为路径段、查询字符串参数等发送时,这都是必需的......

示例:see the documentation

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 2010-10-17
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多