2010-09-20 12 views
8

Analiz amacıyla bir sunucuya bir url gönderen bir site yapıyorum. İstemci tarafında, URL'yi kodlanmış bir parametre olarak gönderirim. http://www.site.com: Sunucu tarafında örneğin ...Java Servlet getParameter URL'si olan bir param için

Submit: http://www.site.com 
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com 

için, benim servlet isteği şöyle parametre ...

String url = request.getParameter("url"); 

Ne Aldığım bir kodu çözülmüş dizedir var. Şimdiye kadar çok iyi - bu beklendiği gibi çalışıyor ... çoğu zaman.

bir url param kendi parametrelerini içerdiğinde sorun oluşur ...

Submit: http://www.site.com?param1=1&param2=2 
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2 

Her şey müşteri sitesindeki iyi, ama ben parametresini aldığımda benim servlet'dir ben url yalnızca bir kısmını almak param!

http://www.site.com?param1=1 

İkinci parametreyi giriş URL'imden düşürdüm! Sunucuya göndermeden önce kesinlikle url parametresini kodluyorum ... neler oluyor?

+0

Bunu, Tomcat 6.0.29 üzerinde yeniden üretemezsiniz. Hangi servletcontainer? – BalusC

+0

Tomcat 6.0.29'u Kullanma. Servletim HttpServlet'i genişletiyor. –

+0

BalusC ile aynıdır, hatalarınızı tomcat 5.5 veya 6'da yeniden üretemiyorum. Metnin herhangi birini kodlamak/deşifre etmek gerekmedi. Bize müşteri kodu/formunu gösterebilir misin? – Sean

cevap

9

Sorununuzu Tomcat 6.0.29 üzerinde yeniden oluşturamıyorum. Daha çok konu var. Belki de istek nesnesinde bir şey yapan zincirdeki bir Filtre?

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
     <p><a href="?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2">click here</a> 
     <p>URL: ${param.url} 
    </body> 
</html> 

Copy'n'paste'n'run onu ve bağlantıyı tıklayın:

Neyse, burada tek bir JSP lezzetinde bir SSCCE bu. Tam burada ben şu sonucu bakın:

burada tıklama

URL: http://www.site.com?param1=1&param2=2

aynı tarayıcı adres çubuğuna doğrudan çağrılır böyle basit bir Servlet ile tekrarlanabilir geçerli:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.getWriter().write(request.getParameter("url")); 
} 

Tomcat, HTTP bağlayıcısında URIEncoding="UTF-8" ile yapılandırılmış, ancakile bile(varsayılan olan), davranış, bu özel durumda beklendiği gibi aynıdır.

+0

Teşekkürler, sorun, URL'mizi (bir form aracılığıyla) başka bir sayfaya göndermekti. İkinci sayfa sunucuya bir ajax çağrısı kullanıyordu. Süreçte, url kodu çözüldü, bu yüzden servlet'e çağrı yapmadan önce bir kez daha tekrar hatırlatmak zorundayım. –